From e7bbb2ad4f8aa26b3207d3ae44af0f30f3b7cda4 Mon Sep 17 00:00:00 2001 From: Zeynep Caysar Date: Tue, 17 Mar 2026 13:59:40 +0100 Subject: [PATCH 1/3] Add nbstripout filter for notebooks --- .gitattributes | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..978cb3e --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.ipynb filter=nbstripout From 9f296e63fd06a267b1c9a383dc4f93285556c31c Mon Sep 17 00:00:00 2001 From: Zeynep Caysar Date: Tue, 17 Mar 2026 14:05:52 +0100 Subject: [PATCH 2/3] Strip notebook metadata --- ontologies/hpo_overview.ipynb | 1155 ++------------------------------- 1 file changed, 52 insertions(+), 1103 deletions(-) diff --git a/ontologies/hpo_overview.ipynb b/ontologies/hpo_overview.ipynb index a4267ce..3d64a17 100644 --- a/ontologies/hpo_overview.ipynb +++ b/ontologies/hpo_overview.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "edd272b5", + "id": "0", "metadata": {}, "source": [ "# HPO Overview - Analysis\n", @@ -19,19 +19,10 @@ }, { "cell_type": "code", - "execution_count": 13, - "id": "52b450b6", + "execution_count": null, + "id": "1", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Loading HPO ontology...\n", - "Ontology loaded.\n" - ] - } - ], + "outputs": [], "source": [ "from owlready2 import *\n", "import matplotlib.pyplot as plt\n", @@ -41,13 +32,13 @@ "\n", "\n", "print(\"Loading HPO ontology...\")\n", - "hpo = get_ontology(\"model/hp.owl\").load()\n", + "hpo = get_ontology(\"model/hpo.owl\").load()\n", "print(\"Ontology loaded.\")" ] }, { "cell_type": "markdown", - "id": "fa54f8d0", + "id": "2", "metadata": {}, "source": [ "## 2. Statistical Analysis\n", @@ -64,21 +55,10 @@ }, { "cell_type": "code", - "execution_count": 15, - "id": "e20cae73", + "execution_count": null, + "id": "3", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Total classes (phenotype terms, e.g. HP:0001250): 32085\n", - "Total individuals: 0. HPO itself does not contain instances of classes (actual objects), because it is a reference vocabulary/terminology, not a dataset.\n", - "Object properties (relations between entities, e.g. is_a): 235\n", - "Annotation properties (metadata about entities, e.g. definition): 126\n" - ] - } - ], + "outputs": [], "source": [ "classes = list(hpo.classes())\n", "individuals = list(hpo.individuals())\n", @@ -93,7 +73,7 @@ }, { "cell_type": "markdown", - "id": "d1d49947", + "id": "4", "metadata": {}, "source": [ "### Listing Phenotype Categories" @@ -102,67 +82,9 @@ { "cell_type": "code", "execution_count": null, - "id": "18088ddc", + "id": "5", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Root is instance of: \n", - "Root term: Phenotypic abnormality (ID: HP_0000118)\n", - "Number of direct subclasses of root: 46\n", - "\n", - "Top-level categories under 'Phenotypic abnormality':\n", - " - ['Growth abnormality'] (ID: HP_0001507)\n", - " - ['Abnormality of the genitourinary system'] (ID: HP_0000119)\n", - " - ['Abnormality of head or neck'] (ID: HP_0000152)\n", - " - ['Abnormality of the eye'] (ID: HP_0000478)\n", - " - ['Abnormality of the ear'] (ID: HP_0000598)\n", - " - ['Abnormality of the nervous system'] (ID: HP_0000707)\n", - " - ['Abnormality of the breast'] (ID: HP_0000769)\n", - " - ['Abnormality of the endocrine system'] (ID: HP_0000818)\n", - " - ['Abnormality of the musculoskeletal system'] (ID: HP_0033127)\n", - " - ['Abnormality of the integument'] (ID: HP_0001574)\n", - " - ['Abnormality of prenatal development or birth'] (ID: HP_0001197)\n", - " - ['Abnormality of limbs'] (ID: HP_0040064)\n", - " - ['Abnormality of the digestive system'] (ID: HP_0025031)\n", - " - ['Abnormality of the voice'] (ID: HP_0001608)\n", - " - ['Abnormality of the cardiovascular system'] (ID: HP_0001626)\n", - " - ['Constitutional symptom'] (ID: HP_0025142)\n", - " - ['Abnormality of blood and blood-forming tissues'] (ID: HP_0001871)\n", - " - ['Abnormality of metabolism/homeostasis'] (ID: HP_0001939)\n", - " - ['Abnormality of the respiratory system'] (ID: HP_0002086)\n", - " - ['Neoplasm'] (ID: HP_0002664)\n", - " - ['Abnormality of the immune system'] (ID: HP_0002715)\n", - " - ['Abnormal cellular phenotype'] (ID: HP_0025354)\n", - " - ['Abnormality of the thoracic cavity'] (ID: HP_0045027)\n", - " - ['Growth abnormality'] (ID: HP_0001507)\n", - " - ['Abnormality of the genitourinary system'] (ID: HP_0000119)\n", - " - ['Abnormality of head or neck'] (ID: HP_0000152)\n", - " - ['Abnormality of the eye'] (ID: HP_0000478)\n", - " - ['Abnormality of the ear'] (ID: HP_0000598)\n", - " - ['Abnormality of the nervous system'] (ID: HP_0000707)\n", - " - ['Abnormality of the breast'] (ID: HP_0000769)\n", - " - ['Abnormality of the endocrine system'] (ID: HP_0000818)\n", - " - ['Abnormality of the musculoskeletal system'] (ID: HP_0033127)\n", - " - ['Abnormality of the integument'] (ID: HP_0001574)\n", - " - ['Abnormality of prenatal development or birth'] (ID: HP_0001197)\n", - " - ['Abnormality of limbs'] (ID: HP_0040064)\n", - " - ['Abnormality of the digestive system'] (ID: HP_0025031)\n", - " - ['Abnormality of the voice'] (ID: HP_0001608)\n", - " - ['Abnormality of the cardiovascular system'] (ID: HP_0001626)\n", - " - ['Constitutional symptom'] (ID: HP_0025142)\n", - " - ['Abnormality of blood and blood-forming tissues'] (ID: HP_0001871)\n", - " - ['Abnormality of metabolism/homeostasis'] (ID: HP_0001939)\n", - " - ['Abnormality of the respiratory system'] (ID: HP_0002086)\n", - " - ['Neoplasm'] (ID: HP_0002664)\n", - " - ['Abnormality of the immune system'] (ID: HP_0002715)\n", - " - ['Abnormal cellular phenotype'] (ID: HP_0025354)\n", - " - ['Abnormality of the thoracic cavity'] (ID: HP_0045027)\n" - ] - } - ], + "outputs": [], "source": [ "root = hpo.search_one(label = \"Phenotypic abnormality\")\n", "print(f\"Root is instance of: {type(root)}\")\n", @@ -176,7 +98,7 @@ }, { "cell_type": "markdown", - "id": "5b7403bd", + "id": "6", "metadata": {}, "source": [ "### Finding parents and children" @@ -184,45 +106,10 @@ }, { "cell_type": "code", - "execution_count": 32, - "id": "e61e4a40", + "execution_count": null, + "id": "7", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Parents:\n", - "obo.HP_0012638 ['Abnormal nervous system physiology']\n", - "\n", - "Children:\n", - "obo.HP_0002069 ['Bilateral tonic-clonic seizure']\n", - "obo.HP_0002197 ['Generalized-onset seizure']\n", - "obo.HP_0011146 ['Dialeptic seizure']\n", - "obo.HP_0033259 ['Non-motor seizure']\n", - "obo.HP_0002133 ['Status epilepticus']\n", - "obo.HP_0011145 ['Symptomatic seizures']\n", - "obo.HP_0007359 ['Focal-onset seizure']\n", - "obo.HP_0020219 ['Motor seizure']\n", - "obo.HP_0020207 ['Reflex seizure']\n", - "obo.HP_0031951 ['Nocturnal seizures']\n", - "obo.HP_0032807 ['Neonatal seizure']\n", - "obo.HP_0032892 ['Infection-related seizure']\n", - "obo.HP_0002069 ['Bilateral tonic-clonic seizure']\n", - "obo.HP_0002197 ['Generalized-onset seizure']\n", - "obo.HP_0011146 ['Dialeptic seizure']\n", - "obo.HP_0033259 ['Non-motor seizure']\n", - "obo.HP_0002133 ['Status epilepticus']\n", - "obo.HP_0011145 ['Symptomatic seizures']\n", - "obo.HP_0007359 ['Focal-onset seizure']\n", - "obo.HP_0020219 ['Motor seizure']\n", - "obo.HP_0020207 ['Reflex seizure']\n", - "obo.HP_0031951 ['Nocturnal seizures']\n", - "obo.HP_0032807 ['Neonatal seizure']\n", - "obo.HP_0032892 ['Infection-related seizure']\n" - ] - } - ], + "outputs": [], "source": [ "seizure = hpo.search_one(label=\"Seizure\")\n", "\n", @@ -237,7 +124,7 @@ }, { "cell_type": "markdown", - "id": "7cc66c92", + "id": "8", "metadata": {}, "source": [ "### Working with Annotation Properties" @@ -245,158 +132,10 @@ }, { "cell_type": "code", - "execution_count": 59, - "id": "7dcc5323", + "execution_count": null, + "id": "9", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ID: HP_0001250\n", - "\n", - "Label:\n", - "['Seizure']\n", - "\n", - "Ancestors:\n", - "{obo.HP_0001250, obo.HP_0000118, obo.HP_0012638, obo.HP_0000001, owl.Thing, obo.HP_0000707}\n", - "\n", - "Descendants:\n", - "{obo.HP_0032778, obo.HP_0032874, obo.HP_0032854, obo.HP_0032742, obo.HP_0033348, obo.HP_0032836, obo.HP_0032799, obo.HP_0020214, obo.HP_0032664, obo.HP_0032762, obo.HP_0007332, obo.HP_0011174, obo.HP_0032895, obo.HP_0020207, obo.HP_0032724, obo.HP_0032913, obo.HP_0032818, obo.HP_0032689, obo.HP_0032706, obo.HP_0032779, obo.HP_0032855, obo.HP_0032743, obo.HP_0011157, obo.HP_0032837, obo.HP_0032800, obo.HP_0020215, obo.HP_0032665, obo.HP_0032761, obo.HP_0011175, obo.HP_0032856, obo.HP_0002069, obo.HP_0032896, obo.HP_0020216, obo.HP_0032725, obo.HP_0032914, obo.HP_0032819, obo.HP_0002133, obo.HP_0032688, obo.HP_0032707, obo.HP_0032780, obo.HP_0032656, obo.HP_0032744, obo.HP_0011158, obo.HP_0032892, obo.HP_0032838, obo.HP_0032876, obo.HP_0032801, obo.HP_0020217, obo.HP_0032666, obo.HP_0007334, obo.HP_0032763, obo.HP_0032857, obo.HP_0032897, obo.HP_0001327, obo.HP_0032726, obo.HP_0032820, obo.HP_0032691, obo.HP_0032708, obo.HP_0032745, obo.HP_0011159, obo.HP_0032894, obo.HP_0032915, obo.HP_0032839, obo.HP_0032877, obo.HP_0032802, obo.HP_0020220, obo.HP_0032667, obo.HP_0032781, obo.HP_0032764, obo.HP_0025190, obo.HP_0032858, obo.HP_0032898, obo.HP_0032727, obo.HP_0032821, obo.HP_0032690, obo.HP_0032659, obo.HP_0032746, obo.HP_0011160, obo.HP_0002373, obo.HP_0032916, obo.HP_0032840, obo.HP_0032709, obo.HP_0032878, obo.HP_0032803, obo.HP_0020218, obo.HP_0032668, obo.HP_0032782, obo.HP_0032765, obo.HP_0007207, obo.HP_0032859, obo.HP_0001250, obo.HP_0032899, obo.HP_0032728, obo.HP_0032822, obo.HP_0032692, obo.HP_0032747, obo.HP_0033722, obo.HP_0032917, obo.HP_0032841, obo.HP_0032710, obo.HP_0032879, obo.HP_0032804, obo.HP_0032669, obo.HP_0032783, obo.HP_0032766, obo.HP_0032861, obo.HP_0011147, obo.HP_0032900, obo.HP_0032729, obo.HP_0032823, obo.HP_0032693, obo.HP_0032748, obo.HP_0011161, obo.HP_0032842, obo.HP_0032918, obo.HP_0032711, obo.HP_0032880, obo.HP_0032805, obo.HP_0032670, obo.HP_0032784, obo.HP_0032767, obo.HP_0033346, obo.HP_0032862, obo.HP_0032901, obo.HP_0032730, obo.HP_0032824, obo.HP_0032694, obo.HP_0032749, obo.HP_0032843, obo.HP_0032919, obo.HP_0032712, obo.HP_0032806, obo.HP_0032672, obo.HP_0032785, obo.HP_0032768, obo.HP_0012002, obo.HP_0032863, obo.HP_0002349, obo.HP_0032902, obo.HP_0032731, obo.HP_0032825, obo.HP_0032750, obo.HP_0011163, obo.HP_0032844, obo.HP_0032678, obo.HP_0032713, obo.HP_0032882, obo.HP_0032807, obo.HP_0032673, obo.HP_0032786, obo.HP_0032769, obo.HP_0012003, obo.HP_0032658, obo.HP_0032864, obo.HP_0032920, obo.HP_0032903, obo.HP_0032732, obo.HP_0032826, obo.HP_0032787, obo.HP_0032751, obo.HP_0032696, obo.HP_0032845, obo.HP_0011149, obo.HP_0032883, obo.HP_0032808, obo.HP_0032770, obo.HP_0032680, obo.HP_0032663, obo.HP_0032865, obo.HP_0032921, obo.HP_0032904, obo.HP_0032733, obo.HP_0002199, obo.HP_0032715, obo.HP_0032827, obo.HP_0031165, obo.HP_0032788, obo.HP_0007359, obo.HP_0032752, obo.HP_0011165, obo.HP_0032846, obo.HP_0011150, obo.HP_0032884, obo.HP_0032809, obo.HP_0032771, obo.HP_0012004, obo.HP_0012847, obo.HP_0032866, obo.HP_0032922, obo.HP_0032905, obo.HP_0032734, obo.HP_0032714, obo.HP_0032828, obo.HP_0032789, obo.HP_0011153, obo.HP_0032753, obo.HP_0011166, obo.HP_0002384, obo.HP_0032698, obo.HP_0032847, obo.HP_0031475, obo.HP_0032885, obo.HP_0032810, obo.HP_0012005, obo.HP_0032867, obo.HP_0032923, obo.HP_0032906, obo.HP_0032736, obo.HP_0032716, obo.HP_0032829, obo.HP_0032772, obo.HP_0011146, obo.HP_0032790, obo.HP_0020221, obo.HP_0032754, obo.HP_0011167, obo.HP_0032699, obo.HP_0032848, obo.HP_0032671, obo.HP_0032886, obo.HP_0032811, obo.HP_0032682, obo.HP_0012006, obo.HP_0032792, obo.HP_0032868, obo.HP_0032924, obo.HP_0032907, obo.HP_0032735, obo.HP_0032718, obo.HP_0032830, obo.HP_0032773, obo.HP_0033259, obo.HP_0032791, obo.HP_0020208, obo.HP_0002266, obo.HP_0032755, obo.HP_0011168, obo.HP_0032700, obo.HP_0032849, obo.HP_0032860, obo.HP_0007270, obo.HP_0032887, obo.HP_0032812, obo.HP_0032681, obo.HP_0033347, obo.HP_0010818, obo.HP_0032869, obo.HP_0032925, obo.HP_0032910, obo.HP_0032737, obo.HP_0032717, obo.HP_0032831, obo.HP_0002121, obo.HP_0002197, obo.HP_0031951, obo.HP_0006813, obo.HP_0032793, obo.HP_0020209, obo.HP_0032756, obo.HP_0011169, obo.HP_0032701, obo.HP_0032774, obo.HP_0011151, obo.HP_0032926, obo.HP_0032888, obo.HP_0032813, obo.HP_0012007, obo.HP_0010819, obo.HP_0032870, obo.HP_0032850, obo.HP_0032908, obo.HP_0032739, obo.HP_0011152, obo.HP_0032720, obo.HP_0032832, obo.HP_0020219, obo.HP_0032795, obo.HP_0020210, obo.HP_0032757, obo.HP_0011170, obo.HP_0032702, obo.HP_0032775, obo.HP_0032927, obo.HP_0032889, obo.HP_0032719, obo.HP_0032814, obo.HP_0032685, obo.HP_0012008, obo.HP_0032679, obo.HP_0032871, obo.HP_0032851, obo.HP_0032909, obo.HP_0032738, obo.HP_0011154, obo.HP_0032833, obo.HP_0032677, obo.HP_0032796, obo.HP_0020211, obo.HP_0032660, obo.HP_0032758, obo.HP_0011171, obo.HP_0007193, obo.HP_0032890, obo.HP_0032721, obo.HP_0032815, obo.HP_0032684, obo.HP_0025613, obo.HP_0032776, obo.HP_0032872, obo.HP_0032852, obo.HP_0032740, obo.HP_0032834, obo.HP_0032794, obo.HP_0011145, obo.HP_0032797, obo.HP_0020212, obo.HP_0032661, obo.HP_0032759, obo.HP_0011172, obo.HP_0032704, obo.HP_0032891, obo.HP_0032722, obo.HP_0032911, obo.HP_0032816, obo.HP_0032687, obo.HP_0010820, obo.HP_0032777, obo.HP_0032873, obo.HP_0032853, obo.HP_0032741, obo.HP_0032835, obo.HP_0002123, obo.HP_0012469, obo.HP_0002173, obo.HP_0032798, obo.HP_0020213, obo.HP_0032662, obo.HP_0032760, obo.HP_0011173, obo.HP_0032893, obo.HP_0032723, obo.HP_0032912, obo.HP_0032817, obo.HP_0032686, obo.HP_0032705, obo.HP_0010821, obo.HP_0011097}\n", - "\n", - "Synonyms:\n", - "['Epileptic seizure', 'Seizures']\n", - "\n", - "Annotation properties:\n", - "comment\n", - "label\n", - "deprecated\n", - "IAO_0000700\n", - "license\n", - "IAO_0000115\n", - "IAO_0000233\n", - "IAO_0100001\n", - "OMO_0003000\n", - "SynonymTypeProperty\n", - "OMO_0003002\n", - "OMO_0003004\n", - "OMO_0003011\n", - "RO_0002259\n", - "SubsetProperty\n", - "valid_for_go_annotation_extension\n", - "valid_for_go_gp2term\n", - "valid_for_go_ontology\n", - "valid_for_gocam\n", - "BRAND_NAME\n", - "INN\n", - "IUPAC_NAME\n", - "1_STAR\n", - "2_STAR\n", - "3_STAR\n", - "BDS_subset\n", - "blood_and_immune_upper_slim\n", - "cellxgene_subset\n", - "eye_upper_slim\n", - "general_cell_types_upper_slim\n", - "kidney_upper_slim\n", - "gocheck_do_not_annotate\n", - "gocheck_obsoletion_candidate\n", - "goslim_agr\n", - "goslim_candida\n", - "goslim_chembl\n", - "goslim_drosophila\n", - "goslim_euk_cellular_processes_ribbon\n", - "goslim_flybase_ribbon\n", - "goslim_generic\n", - "goslim_metagenomics\n", - "goslim_mouse\n", - "goslim_pir\n", - "goslim_plant\n", - "goslim_plant_ribbon\n", - "goslim_pombe\n", - "goslim_prokaryote\n", - "goslim_prokaryote_ribbon\n", - "goslim_synapse\n", - "goslim_yeast\n", - "syngo_official_label\n", - "systematic_synonym\n", - "abbreviation\n", - "creator\n", - "allelic_requirement\n", - "display_label\n", - "hposlim_core\n", - "layperson\n", - "obsolete_synonym\n", - "plural_form\n", - "secondary_consequence\n", - "uk_spelling\n", - "abnormal_slim\n", - "absent_slim\n", - "attribute_slim\n", - "cell_quality\n", - "disposition_slim\n", - "hpo_slim\n", - "location_grouping\n", - "mpath_slim\n", - "relational_slim\n", - "scalar_slim\n", - "value_slim\n", - "Gene-based\n", - "PRO-short-label\n", - "ro-eco\n", - "common_anatomy\n", - "cumbo\n", - "cyclostome_subset\n", - "defined_by_ordinal_series\n", - "developmental_classification\n", - "early_development\n", - "efo_slim\n", - "emapa_ehdaa2\n", - "feed_aligned\n", - "functional_classification\n", - "grouping_class\n", - "homology_grouping\n", - "human_reference_atlas\n", - "inconsistent_with_fma\n", - "location_grouping\n", - "major_organ\n", - "non_informative\n", - "organ_slim\n", - "pheno_slim\n", - "phenotype_rcn\n", - "uberon_slim\n", - "unverified_taxonomic_grouping\n", - "upper_level\n", - "vertebrate_core\n", - "_upper_level\n", - "creator\n", - "date\n", - "description\n", - "license\n", - "rights\n", - "subject\n", - "title\n", - "contributor\n", - "date\n", - "consider\n", - "creation_date\n", - "default-namespace\n", - "hasAlternativeId\n", - "hasBroadSynonym\n", - "hasDbXref\n", - "hasExactSynonym\n", - "hasNarrowSynonym\n", - "hasOBOFormatVersion\n", - "hasRelatedSynonym\n", - "hasSynonymType\n", - "id\n", - "inSubset\n", - "logical-definition-view-relation\n", - "saved-by\n", - "shorthand\n" - ] - } - ], + "outputs": [], "source": [ "term = hpo.search_one(label=\"Seizure\")\n", "\n", @@ -423,29 +162,10 @@ }, { "cell_type": "code", - "execution_count": 62, - "id": "fb5e309b", + "execution_count": null, + "id": "10", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "ID: HP_0001250\n", - "IRI: http://purl.obolibrary.org/obo/HP_0001250\n", - "\n", - "Annotations:\n", - "comment ['A type of electrographic seizure has been proposed in neonates which does not have a clinical correlate, it is electrographic only. The term epilepsy is not used to describe recurrent febrile seizures. Epilepsy presumably reflects an abnormally reduced seizure threshold.', 'A type of electrographic seizure has been proposed in neonates which does not have a clinical correlate, it is electrographic only. The term epilepsy is not used to describe recurrent febrile seizures. Epilepsy presumably reflects an abnormally reduced seizure threshold.']\n", - "label ['Seizure']\n", - "IAO_0000115 ['A seizure is an intermittent abnormality of nervous system physiology characterized by a transient occurrence of signs and/or symptoms due to abnormal excessive or synchronous neuronal activity in the brain.', 'A seizure is an intermittent abnormality of nervous system physiology characterized by a transient occurrence of signs and/or symptoms due to abnormal excessive or synchronous neuronal activity in the brain.']\n", - "hasAlternativeId ['HP:0001275', 'HP:0001303', 'HP:0002125', 'HP:0002182', 'HP:0002279', 'HP:0002306', 'HP:0002348', 'HP:0002391', 'HP:0002417', 'HP:0002430', 'HP:0002431', 'HP:0002432', 'HP:0002434', 'HP:0002437', 'HP:0002466', 'HP:0002479', 'HP:0002794', 'HP:0006997', 'HP:0010520', 'HP:0001275', 'HP:0001303', 'HP:0002125', 'HP:0002182', 'HP:0002279', 'HP:0002306', 'HP:0002348', 'HP:0002391', 'HP:0002417', 'HP:0002430', 'HP:0002431', 'HP:0002432', 'HP:0002434', 'HP:0002437', 'HP:0002466', 'HP:0002479', 'HP:0002794', 'HP:0006997', 'HP:0010520']\n", - "hasDbXref ['SNOMEDCT_US:128613002', 'SNOMEDCT_US:246545002', 'SNOMEDCT_US:313307000', 'SNOMEDCT_US:84757009', 'SNOMEDCT_US:91175000', 'UMLS:C0014544', 'UMLS:C0036572', 'SNOMEDCT_US:128613002', 'SNOMEDCT_US:246545002', 'SNOMEDCT_US:313307000', 'SNOMEDCT_US:84757009', 'SNOMEDCT_US:91175000', 'UMLS:C0014544', 'UMLS:C0036572']\n", - "hasExactSynonym ['Epileptic seizure', 'Seizures']\n", - "hasRelatedSynonym ['Epilepsy', 'Epilepsy']\n", - "id ['HP:0001250', 'HP:0001250']\n" - ] - } - ], + "outputs": [], "source": [ "term = hpo.search_one(label=\"Seizure\")\n", "\n", @@ -461,7 +181,7 @@ }, { "cell_type": "markdown", - "id": "940a9c83", + "id": "11", "metadata": {}, "source": [ "### Printing Edges label" @@ -470,17 +190,9 @@ { "cell_type": "code", "execution_count": null, - "id": "e468a0bd", + "id": "12", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "All relationship types actually present in HPO: {'is_a'}\n" - ] - } - ], + "outputs": [], "source": [ "relations = set()\n", "\n", @@ -500,7 +212,7 @@ }, { "cell_type": "markdown", - "id": "ecb74a96", + "id": "13", "metadata": {}, "source": [ "### Hierarchy Statistics" @@ -508,22 +220,10 @@ }, { "cell_type": "code", - "execution_count": 54, - "id": "56b738f2", + "execution_count": null, + "id": "14", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Max depth: 21\n", - "Average depth: 8.57\n", - "Average number of children per term: 2.59\n", - "Average number of ancestors per term: 12.20\n", - "Total hierarchy edges: 42111\n" - ] - } - ], + "outputs": [], "source": [ "# Compute depth of each class recursively\n", "def get_depth(cls):\n", @@ -563,7 +263,7 @@ }, { "cell_type": "markdown", - "id": "2de76871", + "id": "15", "metadata": {}, "source": [ "### Term Annotations" @@ -571,19 +271,10 @@ }, { "cell_type": "code", - "execution_count": 10, - "id": "87108cdc", + "execution_count": null, + "id": "16", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Average labels per term: 1.00\n", - "Average synonyms per term: 1.35\n" - ] - } - ], + "outputs": [], "source": [ "label_counts = [len(c.label) if c.label else 0 for c in classes]\n", "# Some HPO classes have synonyms in hasExactSynonym\n", @@ -595,7 +286,7 @@ }, { "cell_type": "markdown", - "id": "d531e3bd", + "id": "17", "metadata": {}, "source": [ "### Visualization" @@ -603,21 +294,10 @@ }, { "cell_type": "code", - "execution_count": 11, - "id": "a0b64e9c", + "execution_count": null, + "id": "18", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAMWCAYAAAAgRDUeAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA1fBJREFUeJzs3QecU1X+///PDL0jIE2KKEiTorAgFhYVQUBXBFexIiAIggooKLtIVVGUJtVGcQUFXLEggkhVugiKCIiKgktX6UjN//E+v//NN5nGzJBkMpnX8/EImeSe3Htzb2by4XPP+Zw4n8/nMwAAAAAAACCC4iO5MQAAAAAAAEBISgEAAAAAACDiSEoBAAAAAAAg4khKAQAAAAAAIOJISgEAAAAAACDiSEoBAAAAAAAg4khKAQAAAAAAIOJISgEAAAAAACDiSEoBAAAAAAAg4khKAVFuwIABFhcXF5FtNWrUyN08ixcvdtt+7733IrL9Bx980C6++GKLZkeOHLGHHnrISpYs6Y5N9+7dM3qXspRffvnFHfeXX345o3cFAJBOxDZZI7bxzvP+/fvP2Vbxn+LAhDGo7tMavwLIXEhKARE0efJk9wXr3XLnzm2lS5e2pk2b2iuvvGKHDx8OyXZ27tzpAoH169dbtInmfUuN559/3p3HLl262H/+8x+7//77kw3CznWLxgDKS/p4txw5clixYsXs6quvtn/961+2ffv2iOzHnDlz3HEEAEQ3YpusEdsEOnPmjE2aNMnFMUWKFLFcuXK5pFK7du3sq6++ith+I3W/k8ndov1CMLKO7Bm9A0BWNGjQIKtQoYKdOnXKdu/e7a4C6arU8OHD7aOPPrKaNWv62/bt29eefvrpNAdHAwcOdF82tWvXTvXrPvvsMwu3lPbt9ddft7Nnz1o0W7hwoV111VXWv3//ZNu0atXKKlasGHQFUoHe7bff7pZ5SpQoYdHq7rvvtubNm7vz8eeff9qaNWts5MiRNmrUKHvzzTetTZs2YU9KjR07lsQUAGQSxDaxHdt4jh8/7mKZuXPnWsOGDd0FKyWmdFFrxowZNmXKFHcBq0yZMmnahy1btlh8PP0lQkHnRcnFQOoJV69ePevUqZP/ufz584dke8D5IikFZIBmzZpZ3bp1/Y/79OnjAoJbbrnF/vGPf9imTZssT548/++XNHt2dwunY8eOWd68eS1nzpyWkdQrJ9rt3bvXqlWrlmIbJRUDE4vqtq6klJ677777znsfjh49avny5bNwuvLKKxPt66+//mpNmjSxtm3bWtWqVa1WrVph3QcAQOZBbJO0WIltPL169XIJqREjRiQa5qeklp5PD/W2Cqe//vrLxbmxlPhSsvPkyZNu5EWgSy65xN0Cde7c2T0Xijg0Fo8lMhafJCBK3HDDDfbMM8+4//i//fbbKdZdmD9/vl177bVWuHBhd5WjcuXK7kqVqNfV3/72N/ezulF7XXTVlVfU1fryyy+3tWvXuispSkZ5r01uTL66aauNag0oGaLE2Y4dO1KsBeAJXOe59i2pmlJKwDzxxBNWtmxZF7DovaqekM/nC2qn9XTr1s0++OAD9/7Utnr16i5wSm1A1qFDB9d7SV/uSrjoal/C2gbbtm2zTz75xL/vujKYXps3b7Y77rjDXWHUNpWoVE+5pLpgL1myxB555BErXry4/+qjdy6//fZb+/vf/+7OpXpoeTXA9Jr69eu7BKeO2+eff27no3z58m5/FAANHTo0aNmBAwdccOqdJ+3Hiy++GHR1OLAelIJWrU/7pn3/7rvv/O30OVAvKQnsZp7Qa6+9Zpdeeqnbnj5X6s0VSL0Q9TnT8VKbUqVK2W233XZe5wwAkHrENrEV2/z222/26quv2k033ZRk3als2bLZk08+maiXlGIEHQfFrYUKFXLfzbogmpo4MrnvfsUP6vnzxRdfJGrjva93333XjTi46KKLXIx06NAht3zVqlV28803u33R84pDli1bFrQOL/7+8ccfz7nvSQmMt1UCQfurURITJkxI1PbEiRMuoafYSedYn4vevXu755P6PEydOtV9DtQ2tZ+FpPzvf/+z9u3bu8+H99maOHFiqo+ljov+H6Kecbqwrp+13IvhNmzY4P4G6P8OivmmTZuW7n1FbKOnFBBFNIZfyR8No+vYsWOSbTZu3Oj+8KvXjbrK60tEX5jel6l6sOj5fv36uS661113nXteX4ie33//3V3R1BAsXTE51zCy5557zn0hPfXUUy7A0TCuxo0bu9oJXo+u1EjNvgVScKYE2KJFi1xQpS7x8+bNc1fp9EWa8Grcl19+ae+//75L3hQoUMDV6WrdurX7sixatGiKXdEVPOg46steQcPMmTPdl60Cqccff9ztu7pC9+jRwwVbCiblwgsvtPTQebzmmmvcl7eGZ+oLW93eW7Zsaf/973/dUL9Aek/alo6dglmPhtbp86Bz+c9//tPGjx/vflbAooBRV8buuecee+mll1wCTMlEHZv0atCggQsGlRj1KDhTQKdz8vDDD1u5cuVs+fLlrgfgrl273Ocl0FtvveXqp3Xt2tVdbdOQQAUtCl70WdQ6NMxT20jY/dyjwEbrUFt9NpUk03CCn3/+2X9VWudex/nRRx91wa4+u1qnPg/UUQCAyCC2iZ3Y5tNPP7XTp0+fs+ZUQnfeeafb/pAhQ+zrr7+2N954w11k08WrtFD5AH3vK25UjKPvfB1LXdxTIiehwYMHux49SpQpwaOfNTJBMXCdOnVcIki9fVQfS3GIElxKdIVq3xWjqRSC1qGyCIrz1HNe+6FkkOjind6DzrNiY50TxUP6HPzwww8uIRlI+6/16Jyq5md645k9e/a4IZteokvnXOdXn0klnBImHZM6lt6Fax1PXehWLKb4U+tTXPvvf//b7r33XhefKRn3wAMPuDhSxxMI4gMQMZMmTdIlMN+aNWuSbVOoUCHfFVdc4X/cv39/9xrPiBEj3ON9+/Yluw6tX220vYT+/ve/u2UTJkxIcplunkWLFrm2F110ke/QoUP+52fMmOGeHzVqlP+58uXL+9q2bXvOdaa0b3q91uP54IMPXNtnn302qN0dd9zhi4uL8/3444/+59QuZ86cQc9988037vnRo0f7UjJy5EjX7u233/Y/d/LkSV+DBg18+fPnD3rv2r8WLVr40kLnSuvXufTceOONvho1avj++usv/3Nnz571XX311b5KlSol+sxce+21vtOnTyd5LqdNm+Z/bvPmze65+Ph438qVK/3Pz5s3L9njHmjbtm2u3UsvvZRsm9tuu821OXjwoHs8ePBgX758+Xw//PBDULunn37aly1bNt/27duD1p0nTx7fb7/95m+3atUq93yPHj38z3Xt2jXoc59w/4oWLer7448//M9/+OGH7vmPP/7YPf7zzz/P+T4AAOeP2CbrxDb6ntY6161b50sNL4Zt37590PO33367+x4PlDCO9GJQ3Xv7Xrx4cV/t2rV9J06c8Ld77bXXXLuk4tdLLrnEd+zYsaA4SzFW06ZN3c8etalQoYLvpptuSte+J8WL0YYNG+Z/Tvut/df70PuR//znPy5m++KLL4Jerzhdr1+2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qB6+BwAAAAAAgNgU1cP3AGQ8TR6wf//+sKy7WLFiVq5cubCsGwCQ9fCdBQBA5kJSCkCKwX2VqlXt+LFjYTlKefLmtc2bNpGYAgCE5DurapUqduz48bAczbx58timzZv5zgIAIIRISgFIlnpIKSF157PjrXiFSiE9Unu3bbUZfbu4bdBbCgBwvvR9ooTU5FbNrGqxIiE9oJv2/2EPvv8p31kAAIQYSSkA56SE1EVVa3GkAABRTwmpK0qXyOjdAAAAqUChcwAAAAAAAEQcSSkAAAAAAABEHEkpAAAAAAAARBxJKQAAAAAAAEQcSSkAAAAAAABEHEkpAAAAAAAARBxJKQAAgCg2fvx4q1mzphUsWNDdGjRoYJ9++ql/+V9//WVdu3a1okWLWv78+a1169a2Z8+eoHVs377dWrRoYXnz5rXixYtbr1697PTp00FtFi9ebFdeeaXlypXLKlasaJMnT060L2PHjrWLL77YcufObfXr17fVq1eH8Z0DAIBYR1IKAAAgipUpU8ZeeOEFW7t2rX311Vd2ww032G233WYbN250y3v06GEff/yxzZw505YsWWI7d+60Vq1a+V9/5swZl5A6efKkLV++3KZMmeISTv369fO32bZtm2tz/fXX2/r166179+720EMP2bx58/xtpk+fbj179rT+/fvb119/bbVq1bKmTZva3r17I3xEAABArCApBQAAEMVuvfVWa968uVWqVMkuu+wye+6551yPqJUrV9rBgwftzTfftOHDh7tkVZ06dWzSpEku+aTl8tlnn9n3339vb7/9ttWuXduaNWtmgwcPdr2elKiSCRMmWIUKFWzYsGFWtWpV69atm91xxx02YsQI/35oGx07drR27dpZtWrV3GvU82rixIkZdmwAAEDmRlIKAAAgk1Cvp3fffdeOHj3qhvGp99SpU6escePG/jZVqlSxcuXK2YoVK9xj3deoUcNKlCjhb6MeTocOHfL3tlKbwHV4bbx1KHmlbQW2iY+Pd4+9Nsk5ceKE21bgDQAAwMUTHAYAAIDotmHDBtc7SvWeOnfubLNmzXK9lXbv3m05c+a0woULB7VXAkrLRPeBCSlvubcspTZKIB0/ftz279/vEmJJtfHWkZwhQ4ZYoUKF/LeyZcuex5EAAACxhKQUAABAlKtcubKr9bRq1Srr0qWLtW3b1g3Jywz69Onjhhl6tx07dmT0LgEAgCiRPaN3AAAAAClTbyjNiCeqG7VmzRobNWqU3XXXXW5o3YEDB4J6S2n2vZIlS7qfdZ9wljxvdr7ANgln7NNjzfaXJ08ey5Ytm7sl1cZbR3LUu0s3AACAhOgpBQAAkMmcPXvW1WpSgipHjhy2YMEC/7ItW7bY9u3bXc0p0b2G/wXOkjd//nyXcNIQQK9N4Dq8Nt46lBTTtgLbaB/02GsDAACQVvSUAgAAiPLhb5oxT8XLDx8+bNOmTbPFixfbvHnzXI2mDh06WM+ePa1IkSIu0fToo4+6RNFVV13lXt+kSROXfLr//vtt6NChrgZU3759rWvXrv4eTKpTNWbMGOvdu7e1b9/eFi5caDNmzLBPPvnEvx/ahoYN1q1b1+rVq2cjR450Bdc1Gx8AAEB6kJQCAACIYurh9MADD9iuXbtcEqpmzZouIXXTTTe55SNGjHAz4bVu3dr1ntKseePGjfO/XsPuZs+e7WpRKVmVL18+l1waNGiQv02FChVcAqpHjx5uWGCZMmXsjTfecOvyaKjgvn37rF+/fi6xVbt2bZs7d26i4ucAAACpRVIKiAEapqGZkUJt06ZNIV8nACBt3nzzzRSX586d28aOHetuySlfvrzNmTMnxfU0atTI1q1bl2Kbbt26uRsAAEAokJQCYiAhVaVqVTt+7FhG7woAAAAAAKlGUgrI5NRDSgmpO58db8UrVArpurcsW2Dzxw0J6ToBAAAAABCSUkCMUELqoqq1QrrOvdu2hnR9AAAAAAB44v0/AQAAAAAAABFCUgoAAAAAAAARR1IKAAAAAAAAEUdSCgAAAAAAABFHUgoAAAAAAAARR1IKAAAAAAAAEUdSCgAAAAAAABFHUgoAAAAAAAARR1IKAAAAAAAAEUdSCgAAAAAAABFHUgoAAAAAAAARR1IKAAAAAAAAEUdSCgAAAAAAABFHUgoAAAAAAAARlz3ymwSA/7Np06awHI5ixYpZuXLlONQAAAAAEKVISgHIEIf377G4+Hi77777wrL+PHnz2uZNm0hMAQAAAECUIikFIEMcP3zIfGfP2p3PjrfiFSqFdN17t221GX272P79+0lKAQAAAECUIikFIEMpIXVR1VqcBQAAAADIYih0DgAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIjLVEmpF154weLi4qx79+7+5/766y/r2rWrFS1a1PLnz2+tW7e2PXv2BL1u+/bt1qJFC8ubN68VL17cevXqZadPnw5qs3jxYrvyyistV65cVrFiRZs8eXLE3hcAAAAAAEBWk2mSUmvWrLFXX33VatasGfR8jx497OOPP7aZM2fakiVLbOfOndaqVSv/8jNnzriE1MmTJ2358uU2ZcoUl3Dq16+fv822bdtcm+uvv97Wr1/vkl4PPfSQzZs3L6LvEQAAAAAAIKvIFEmpI0eO2L333muvv/66XXDBBf7nDx48aG+++aYNHz7cbrjhBqtTp45NmjTJJZ9Wrlzp2nz22Wf2/fff29tvv221a9e2Zs2a2eDBg23s2LEuUSUTJkywChUq2LBhw6xq1arWrVs3u+OOO2zEiBEZ9p4BAAAAAABiWaZISml4nnoyNW7cOOj5tWvX2qlTp4Ker1KlipUrV85WrFjhHuu+Ro0aVqJECX+bpk2b2qFDh2zjxo3+NgnXrTbeOgAAAAAAABBa2S3Kvfvuu/b111+74XsJ7d6923LmzGmFCxcOel4JKC3z2gQmpLzl3rKU2ihxdfz4ccuTJ0+ibZ84ccLdPGoLAAAAAACAGOgptWPHDnv88cdt6tSpljt3bosmQ4YMsUKFCvlvZcuWzehdAgAAAAAAyDSiOiml4Xl79+51s+Jlz57d3VTM/JVXXnE/qzeT6kIdOHAg6HWafa9kyZLuZ90nnI3Pe3yuNgULFkyyl5T06dPH1bTybkqgAQAAAAAAIAaSUjfeeKNt2LDBzYjn3erWreuKnns/58iRwxYsWOB/zZYtW2z79u3WoEED91j3WoeSW5758+e7hFO1atX8bQLX4bXx1pGUXLlyuXUE3gAAAAAAABADSakCBQrY5ZdfHnTLly+fFS1a1P2sYXMdOnSwnj172qJFi1zPqnbt2rlk0lVXXeXW0aRJE5d8uv/+++2bb76xefPmWd++fV3xdCWWpHPnzvbzzz9b7969bfPmzTZu3DibMWOG9ejRI4OPAAAAyOpUMuBvf/ubi4uKFy9uLVu2dBfhAjVq1Mji4uKCbopvAuminSaOyZs3r1tPr1697PTp00FtFi9e7HqoK0aqWLGiTZ48OdH+aAbjiy++2JVWqF+/vq1evTpM7xwAAMS6qE5KpcaIESPslltusdatW1vDhg3dULz333/fvzxbtmw2e/Zsd69k1X333WcPPPCADRo0yN+mQoUK9sknn7jeUbVq1bJhw4bZG2+84WbgAwAAyEgqXaCLaStXrnSximYe1kW3o0ePBrXr2LGj7dq1y38bOnSof9mZM2dcQkplD5YvX25TpkxxCad+/fr522zbts21uf76612P9O7du9tDDz3kLuh5pk+f7i4G9u/f301Eo7hJ8VJgj3QAAICYmX0vIV3BC6SrdLpip1tyypcvb3PmzElxvbrCuG7dupDtJwAAQCjMnTs36LGSSerppB7iuiDnUQ8or15mQp999pl9//339vnnn7uanLVr17bBgwfbU089ZQMGDHCzGU+YMMFdqNPFOalatap9+eWX7gKgd6Fu+PDhLvmlnumi1+jC3sSJE+3pp5/mhAMAgNhOSgFAam3atCnkB6tYsWJWrlw5TgKADKMJVqRIkSJBz2u24rffftslpm699VZ75plnXKJKVqxYYTVq1HAJKY8STV26dLGNGzfaFVdc4do0btw4aJ1qox5Tol5WSoRpshdPfHy8e41eCwAAkFYkpQDEnMP791hcfLwbrhtqefLmtc2bNpGYApAhzp4965JE11xzjauv6bnnnntcz/DSpUvbt99+63pAqe6UV9Jg9+7dQQkp8R5rWUptDh06ZMePH7c///zTDQNMqo1qcibnxIkT7ubR+gAAAISkFICYc/zwIfOdPWt3PjveileoFLL17t221Wb07WL79+8nKQUgQ6i21HfffeeG1QXq1KmT/2f1iCpVqpSbxfinn36ySy+91DK6UPvAgQMzdB8AAEB0IikFIGYpIXVR1VoZvRsAEBLdunVzk7csXbrUypQpk2JbzYonP/74o0tKaUhfwlny9uzZ4+69OlS6954LbFOwYEHLkyePmzRGt6TaJFfLSjTcT8XRA3tKlS1bNtXvGwAAxK5MP/seAABALPP5fC4hNWvWLFu4cKErRn4umj1P1GNKNAPxhg0bgmbJ00x+SjhVq1bN32bBggVB61EbPS8qhl6nTp2gNhpOqMdem6TkypXLbSfwBgAAIPSUAgAAiPIhe9OmTbMPP/zQChQo4K8BVahQIdeDSUP0tLx58+ZWtGhRV1OqR48ebma+mjVrurZNmjRxyaf777/fhg4d6tbRt29ft24ljaRz5842ZswY6927t7Vv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rItkPNSmTRv/zzVq1LCaNWvapZde6npP3XjjjZaR+vTpYz179vQ/Vk+psmXLZug+AQCAGB6+d91119lbb73lf6w6CmfPnrWhQ4fa9ddfH45NAgAARJWMjIdUu6pYsWKuyLqo1tTevXuD2pw+fdolyLw6VLrfs2dPUBvv8bnaJFfLSpSAK1iwYNANAAAgbD2lFGzpqtxXX33lCmZqKmHN9qLAZ9myZRx5AAAQ8zIyHvrtt99cTalSpUq5xw0aNLADBw64WfXq1Knjnlu4cKFLktWvX9/f5t///redOnXK1cISFTFXjSoN3fPaLFiwwLp37+7fltroeQAAgKjoKXX55ZfbDz/8YNdee63ddtttrvu66hxo6mB1JQcAAIh1oYyHjhw54mbC0022bdvmflYRdS3TbHgrV660X375xSWNtL2KFSu6IuRStWpVV3eqY8eOtnr1apcU69atmxv2p5n35J577nFFzjU7oJJn06dPd7PtBQ69e/zxx12Rds0cuHnzZhswYIBLumldAAAAUdFTSgoVKuSutgEAAGRVoYqHlPgJHPLnJYratm1r48ePt2+//damTJniekMpydSkSRMbPHhwUO2qqVOnuuSRem9p1r3WrVvbK6+8ErSvKs7etWtX15tKw//69etnnTp18re5+uqrbdq0ada3b19XTF1F2z/44AOXgAMAAIiapJSmDn7zzTdt06ZN7nG1atWsXbt2bpYXAACArCBU8VCjRo3M5/Mlu1yz/J2LtqmEUkpUIP2LL75Isc0///lPdwMAAIjK4XtLly61iy++2F19UzCmm37WNMNaBgAAEOuIhwAAADKgp5S6fd91112uO3m2bNncc2fOnLFHHnnELduwYUM4NgsAABA1iIcAAAAyoKeUph9+4okn/Akp0c+qf+BNTQwAABDLiIcAAAAyICl15ZVX+msnBNJztWrVCscmAQAAogrxEAAAQISG72nWF89jjz3mpgzWFcKrrrrKPadpiseOHWsvvPBCqDYJAAAQVYiHAAAAMiApVbt2bYuLiwuaGaZ3796J2t1zzz2u3hQAAECsIR4CAADIgKTUtm3bQrUqAACATIl4CAAAIAOSUuXLlw/VqgAAADIl4iEAAIAMSEoltHPnTvvyyy9t7969dvbs2aBlqjkFAAAQ64iHAAAAIpyUmjx5sj388MOWM2dOK1q0qKs15dHP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69Chgx05ciSozbfffuv2NXfu3Fa2bFn3XhKaOXOmValSxbVRj/g5c+ac13sDAABZV0hrSql2lAIh9ZLSUD3dkvL++++HcrMAAABRIxzx0NGjR61WrVrWvn17a9WqVaLlSh5pQhltq0KFCvbMM89Y06ZN7fvvv3fJI1FCateuXTZ//nw7deqUtWvXzjp16mTTpk1zyw8dOmRNmjRxCa0JEybYhg0b3PaUwFI7UYLt7rvvtiFDhtgtt9ziXtuyZUv7+uuv6RUPAAAyNin1wAMPuKt3AAAAWVU44qFmzZq5W1LUS2rkyJHWt29ff5H1t956y0qUKOF6VLVp08Y2bdpkc+fOtTVr1ljdunVdm9GjR1vz5s3t5Zdfdj2wpk6daidPnrSJEydazpw5rXr16q4m6PDhw/1JqVGjRtnNN99svXr1co8HDx7sklxjxoxxiSwAAIAMS0pNnjw5lKsDAADIdCIdD23bts12797tejh5ChUqZPXr17cVK1a4pJTu1ePJS0iJ2sfHx9uqVavs9ttvd20aNmzoElIe9bZ68cUX7c8//7QLLrjAtenZs2fQ9tUm4XBCAACAiCelAAAAEFlKSIl6RgXSY2+Z7osXLx60PHv27FakSJGgNhr6l3Ad3jIlpXSf0naScuLECXfzaJggAABAWGbfAwAAADyqP6WeW95NBdQBAABISgEAAGRyJUuWdPd79uwJel6PvWW637t3b9Dy06dPuxn5AtsktY7AbSTXxluelD59+tjBgwf9tx07dpzHuwUAALGEnlIAAACZmIbcKSm0YMGCoCFyqhXVoEED91j3Bw4csLVr1/rbLFy40M6ePetqT3ltli5d6mbm86iIeeXKld3QPa9N4Ha8Nt52kpIrVy4rWLBg0A0AAEBISgEAAES5I0eOuJnwdPOKm+vn7du3u5n+unfvbs8++6x99NFHtmHDBjcDoGbUa9mypWtftWpVN2tex44dbfXq1bZs2TLr1q2bK4KudnLPPfe4IucdOnSwjRs32vTp091se4GFzR9//HE3i9+wYcNs8+bNNmDAAPvqq6/cugAAANKKQucAAABRTomf66+/3v/YSxS1bdvWzfbXu3dvO3r0qHXq1Mn1iLr22mtd8ih37tz+10ydOtUlj2688UY3617r1q3tlVde8S9XvafPPvvMunbtanXq1LFixYpZv3793Do9V199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+R0GovnvQUbEZx07dgz6W6Hfq8wopb956fn7kpnjtcx6TkMRtyl5sXHjRndcZs+e7RIFnTp1smgSqtht0KBBQef50UcftWgTihguM5zTUMZzmeG8LglBXHfmzBmXkDp58qT7v/OUKVNcpwclntPEh1SpV6+er2vXrv7HZ86c8ZUuXdo3ZMiQJNvfeeedvhYtWgQ9V79+fd/DDz+cKY743r17ffp4LFmyJNk2kyZN8hUqVMiXWfTv399Xq1atVLfP7OdQHn/8cd+ll17qO3v2bEycQ30mZ82a5X+s91WyZEnfSy+95H/uwIEDvly5cvneeeedkP0+Z+R7TMrq1atdu19//TVkn/eMfo9t27b13XbbbWlaT7Sex9ScQ73XG264IcU20XwOk/qe0O9ejhw5fDNnzvS32bRpk2uzYsWKJNeR3t9hILP8PYhEfPb3v//dfd9ndin9zUvP35fMJGG8FivnND1x2/fff+9et2bNGn+bTz/91BcXF+f73//+54tG6Y3dypcv7xsxYoQvM0lPDJcZz+n5xHOZ8bymN66bM2eOLz4+3rd7925/m/Hjx/sKFizoO3HihC+16CmVCsr8rV271nUv9cTHx7vHK1asSPI1ej6wvegqQHLto83BgwfdfZEiRVJsp26X5cuXt7Jly9ptt93mMuDRTN2D1R3zkksucRl7dTdMTmY/h/rcvv3229a+fXuXwY+Vcxho27Zttnv37qDzVKhQITdsI7nzlJ7f52j8/dQ5VffnUH3eo8HixYtdt9/KlStbly5d7Pfff0+2bWY+j+r2/Mknn7hemOcSzecw4feEzoeusgWeEw29KVeuXLLnJD2/w0As/T0IVXw2depUK1asmF1++eXWp08f11MjM0rub156/r5kFsnFa7FyTtP6N1/3im/q1q3rb6P2+p1Wz6rMKrnYTcO6NDTqiiuucEPA0jrsKTPEcLF6TlOK5zLjeT2YjrhO9xqmWqJEiaD/Lx86dChN/6fMHsL3EbP279/vuqYFHmzR482bNyf5Gv3BTaq9no92Z8+ete7du9s111zjvgiToz866rJYs2ZN9yF++eWX7eqrr3YfwDJlyli00ReeuhNqv9WNcuDAgXbddde54XgaSxtL51A0BvrAgQNunHesnMOEvHORlvOUnt/naKLu7apToKGlGnoZqs97RlO3b3UHrlChgv3000/2r3/9y5o1a+a+7LJlyxZT51Fdm3UOzjXsJJrPYVLfE/qdy5kzZ6KAO6Xfx/T8DgOx9PcgFPHZPffc4y4uKZnz7bffuu8IDRXSkKHMJKW/een5+5JZJBWvxco5Tc/ffN0ruREoe/bs7j/KmfVcJxe7PfbYY3bllVe696ahT0o+6rM/fPhwy0zOFcPF4jlNKZ7LjOf1bDrjuuT+v+wtSy2SUkhEY0sVAJyrdkmDBg3czaNkRtWqVe3VV1+1wYMHR92R1R9Hj5IwCn70hT9jxoxU9VjIbN588033nhXQxMo5zOp0teLOO+90RULHjx8fU5/3Nm3a+H/WFRft86WXXuquvN14440WS5QIVg+Ac00qEM3nMLXfEwDC/3sXWJdFfz9VQFp/N/WfQ/0dzSxS+pungtixKql4LVbOKVKO3VQHL/AzrwTAww8/7ApQ58qVK9McvqwUw6UmnsuM57VrBsd1DN9LBXWdVZY3YaV5PS5ZsmSSr9HzaWkfLbp16+aKzy1atCjNPWVy5Mjhuij++OOPlhko63vZZZclu7+Z9RyKipV//vnn9tBDD8X0OfTORVrOU3p+n6MpqNG5VTHClHpJpefzHm00dEPnKrn9zazn8YsvvnBXu9P6uxlN5zC57wkddw1D0RX/tHxXem1S+xogVv4ehCs+UzJHMvpvxfkK/JuXnr8vmUFq47VYOaep+Zuv+4QTFGjok2Zvy2znOq2xm86z3usvv/ximVnCGC6Wzml64rloP6/dziOuS+7/y96y1CIplQrKbtapU8cWLFgQ1MVNjwN7mQTS84HtRX+Mkmuf0ZS91wdy1qxZtnDhQtf9Mq3UdX7Dhg3uak5moFpKuuKU3P5mtnMYaNKkSa6brGZDiOVzqM+p/uAFnieNYdb49OTOU3p+n6MlqFGtDQWvGqMe6s97tPntt99cPYLk9jcznkfvirj2WzO7ZLZzeK7vCb0vJbYDz4kCNtWESe6cpOd3GIiVvwfhis/Wr1/v7jPL3/vU/M1Lz9+XzCC18VqsnNPU/M3Xvf4TrHo2Hn329TvtJecyg/TEbjrPqrOUcKhbZpMwhouVc5reeC5az6svBHGd7vV/x8Cko5eArVatWpp2Bqnw7rvvupkhJk+e7GYQ6NSpk69w4cL+SvP333+/7+mnn/a3X7ZsmS979uy+l19+2VWp14wiql6/YcOGqDzeXbp0cbOwLV682Ldr1y7/7dixY/42Cd/jwIEDffPmzfP99NNPvrVr1/ratGnjy507t2/jxo2+aPTEE0+497dt2zZ3fho3buwrVqyYm2kgFs5h4IxD5cqV8z311FOJlmXGc3j48GHfunXr3E1/soYPH+5+9mYveeGFF9zv4ocffuj79ttv3SwYFSpU8B0/fty/Ds2KMXr06FT/PkfTezx58qTvH//4h69MmTK+9evXB/1+Bs5qkfA9nuvzHk3vUcuefPJJN5OH9vfzzz/3XXnllb5KlSr5/vrrr0xxHs/1OZWDBw/68ubN62YlSUq0n8PUfE907tzZ/f1ZuHCh76uvvvI1aNDA3QJVrlzZ9/777/sfp+Z3GDiXaPp7EMnfux9//NE3aNAg9/umvxX6Pbrkkkt8DRs29GU25/qbl5q/L5lJcvFaZj+noYjbbr75Zt8VV1zhW7Vqle/LL7908cDdd9/tiybnG7stX77czdCm5YrD3377bd+FF17oe+CBB3zRJhQxXGY4p6GI5zLTee0Sgrju9OnTvssvv9zXpEkT957nzp3r3m+fPn3StC8kpdJA/1nQScmZM6ebenjlypX+ZZq6VdNhBpoxY4bvsssuc+2rV6/u++STT3zRSr90Sd0mTZqU7Hvs3r27/3iUKFHC17x5c9/XX3/ti1Z33XWXr1SpUm5/L7roIvdYX/yxcg49SjLp3G3ZsiXRssx4DhctWpTkZ9N7H5pe+JlnnnH7r/+Q3HjjjYneu6ZmVVIxtb/P0fQe9QWf3O+nXpfcezzX5z2a3qO+/PRlpi8xJX71Xjp27JjoP5PRfB7P9TmVV1991ZcnTx43xW5Sov0cpuZ7Qv+peOSRR3wXXHCBC9huv/12F+AkXE/ga1LzOwykRrT8PYjk79327dtdsqJIkSLu96dixYq+Xr16uf80ZTbn+puXmr8vmUly8VpmP6ehiNt+//13l7DInz+/m1q+Xbt2LlkQTc43dtPF4Pr167ukgC4IV61a1ff8888HJXKiRShiuMxwTkMRz2Wm82ohiut++eUXX7Nmzdwx0YUEXWA4depUmvYl7v/fIQAAAAAAACBiqCkFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAx4JdffrG4uDhbv369RYvNmzfbVVddZblz57batWuf17r03j744INkly9evNi1OXDggHs8efJkK1y4cIrrHDBgwHnvF4D0IykFAFkwQAQAAKH34IMPuu/8F154Ieh5JVL0fFbUv39/y5cvn23ZssUWLFiQbLvdu3fbo48+apdcconlypXLypYta7feemuKr0no6quvtl27dlmhQoVCtPcAwo2kFIAsEyDqliNHDitRooTddNNNNnHiRDt79mzIt9WyZcuQrhMAAGQe6hH04osv2p9//mmx4uTJk+l+7U8//WTXXnutlS9f3ooWLZrsBbw6derYwoUL7aWXXrINGzbY3Llz7frrr7euXbumels5c+a0kiVLhjQBeD7vHcC5kZQCkCXcfPPN7sqZgp5PP/3UBTmPP/643XLLLXb69OmM3j0AABAjGjdu7BIjQ4YMSdOQsZEjR9rFF1+c6ELX888/7y6oaRjaoEGDXNzSq1cvK1KkiJUpU8YmTZqU5JA59RpSguzyyy+3JUuWBC3/7rvvrFmzZpY/f3637vvvv9/279/vX96oUSPr1q2bde/e3YoVK2ZNmzZN8n3o4p72Sfuh3k16T0omeZQcWrt2rWujn/W+k/LII4+45atXr7bWrVvbZZddZtWrV7eePXvaypUrg9pqP2+//XbLmzevVapUyT766KNkh+8lRb3Y9J4LFChgHTp0sL/++itouXfcn3vuOStdurRVrlzZPb9jxw6788473XnQsb/ttttcXJnwdS+//LKVKlXKJeCUUDt16lSy+wKApBSALEKBkgLEiy66yK688kr717/+ZR9++KFLUKnegCiAeeihh+zCCy+0ggUL2g033GDffPNNogDy1VdfdV3KFQwpODl48KB/+ZQpU9x6vZ5ZCo48P//8s0uG6XW1atWyFStWZMCRAAAA4ZQtWzaXSBo9erT99ttv57Uu9RzauXOnLV261IYPH+6GwumC2gUXXGCrVq2yzp0728MPP5xoO0paPfHEE7Zu3Tpr0KCBGwb3+++/++MdxThXXHGFffXVVy6JtGfPHhfTBFJMo55Hy5YtswkTJiS5f6NGjbJhw4a5RMy3337rklf/+Mc/bOvWrW65LggquaR90c9PPvlkonX88ccfbh+UwNEwv4QS1oQaOHCg21dtr3nz5nbvvfe6daTGjBkzXLym86P3ruTRuHHjErXTkEENN5w/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FVf4H/fv39+9xjNixAj3eN++fcmuQ+tXG20vob///e9u2YQJE5Jcpptn0aJFru1FF13kO3TokP/5GTNmuOdHjRrlf658+fK+tm3bnnOdKe2bXq/1eD744APX9tlnnw1qd8cdd/ji4uJ8P/74o/85tcuZM2fQc9988417fvTo0b6UjBw50rV7++23/c+dPHnS16BBA1/+/PmD3rv2r0WLFr7UuuWWW3zXXHON//Frr73my549u2/v3r2J3rv2YdCgQUHP67NQp04d/+OFCxe6do899liibZ09e9bd//LLL75s2bL5nnvuuaDlGzZscNv2nl+3bp1b18yZM1N8D/ny5Uvy3LZs2dId859++sn/3M6dO30FChTwNWzYMNHn/tprr/WdPn060ee9a9euvrTyfi/+8Y9/BD3/yCOPuOd17tNyLM71u3Eu+kwEfnb/85//+OLj431ffPFFUDutW9tYtmyZ/zk9VtuNGzcGtfWOW9OmTf3nVvS51Oe/c+fO/ud0XMuUKRP0uwYAmRGxUtaJlfTd5n33lihRwnf33Xf7xo4d6/v1118Tte3Tp48vV65cvgMHDvifUyyl73LFBGmNp8Jx3NK6j88//7z/uT///NOXJ08et+13333X//zmzZtd28DX16pVK02xaMLfLR0HnTvP0KFD3fMffvihe3z48GFf4cKFfR07dgx6/e7du13cFvi8916efvrpNO+P4r/A/+MoZtLjqVOnBrWbO3duouf1GdNzWhbI+7/L5ZdfHvQe9dnSsW3WrFlQe31+A3+fkDUwfA84B3UlTWkWPq9Xh4aApbfQpXpX6QpEaukKja4KedQFtlSpUq53Rjhp/eq+rSslgXTlTTFCwpns1HvL68Uj6k2mXjw///zzObejnii62uLR1RRtV72c1OsnPdTrRlfdAterq2pet+KkqOdQIPVECtz///73v+71SRUP9a5u6UqePhvqGbR//37/Te9RXb11VVDUE0q0j7oClha6wqcefeoaf8kll/if1+dCvcB0RVFX7gLpKpbOZ8LP86pVq1wB/PTo2rVr0GP1KhLvs5naY5He343k6OqxrhirQGvgdtUdXxJu9+9//3uy9Td0BTdwCK+u/Orzr+c9Oq7qJXeuzzoAxAJipdiIlfTdphjk2WefdcPQ33nnHfe9rh5Ud911V1BNKcWi6tmt3tWe6dOnu146SdUkOlc8FY7jltZ9VE+nwHhIPX3UU0oxi0fPaVngdvRYvdVVgiE91IM7sMeReo+pl5oXO2kYoI69znVgDKPjpRgkYQzjrSMUsZNiU/X2Ctyuyi/odz7hdtXDST20kqJzEfgevdipffv2Qe30vMo56Bwh6yApBZyDvtgDE0AJ6UtaXZz1RaahRRpmpARHWhJUGl+dlqLm+s97wiBCdXLCPd29uhKXLl060fHwZuXQ8kAaypSQgpykxskn3I7eo7r0pmY7qaVAROP+Nc2xug7r9scff7gvQHXTTsirD5XS/mvMvo6J6iIlR0GKvnj1nrS+wJuGxWkIpvdl3rNnT3vjjTfckDF9sauegVdPKiUaAqdEVmBX6cDjps9jwppNXrfzQOqy/t1337ku7+qCru7UaUmsJPxsKmDUefQ+m6k9Fun93UiOtquAMeE2L7vsMrc84XaTOjbJfa69ZKKOWcLnz/VZB4BYQKwUO7GSLgZpuJq+k3WBSokpzdznDWn36CKP6pIGxk/6WW0Vk6Y1ngrHcTvffdT3uIY9Jqwlm/D7XaUwlDRSTKH6ohpy+O2331p6YyclfHRRMTB2El1ISxjH6IJkwhhGCS2vVuj50HYVg6reU8Lt6nc+XLGTYtbUxL6IHdSUAlKgKeX1RzHhF1cgjY9WgUJdLVARSRVZVPJDXxz6okjYEyW5dYRawi/QwB41qdmnUEhuOxlV/NkLSpIq4ClKvgT2MgrVcdKXq86HrvIltU4FHx7VWFA9CPW80+dHVwy9+kyhCDDO9bnT1UBdvVRhUG1fdZFUu0A9nFRr4Xw/h2k5FsntY3pouwoUhw8fnuTyhEFRSttN7nOR1PMUOgcQ64iVYitWCqTEiC62qle5Cl0rMaWaP16tKfV+Ue0qfQbUI0mxiuoNJRSOuDO1x+189zE121EdKl2k9GI3XVxUDSzVnwrsfZVe3oVu1ZVS77iEEtb+UmIxYbIyvdtVQiqpC7eSMIkXqtgpWj7/iBySUkAK9MdfkuuK6tEffs1yppv+06tCx7rKpESVuhcnlyBKr4Tdg/WHW71+1HU58GpRUlP36kpTYOIlLfum7tsqTqnhjIFXsjTjmrc8FLQeXWHSl2Hgl+r5bEeFGVWIWlf5NDQrkLajQq2aTaVv375pWq96Aqmru3pcJddbSm10jnQFyeuZkxIlT3TTvmiflURTYKPu9MmdMwUGKmSpIpMJ6bjpOCZMvKQUhKpwqG66CqYC5ypOnpqklD6bgVfK9LnU8fUKcKb1WISKtvvNN9+439FQ/z4CQFZGrBQ7sVJyNOxKMaa+470h96KElXp4qzeVCq+rnUYQpEe4jlso9zEligFVbkA39SJSokq9zVOTlNJxvf766/2P9fpdu3a52fPEG6aoBJH+XxEp2q7OieLQcFxABzwM3wOSodm3Bg8e7P7znNJUqkpGJKQZQ8Sb0lTj0SWpJFF6aCazwDpXGiuvL6/ApIG+SHQ1SDO6eTSLW8IhXGnZN305qqdVwitMuhqk/+inpydNctvZvXu363Hm0dhyzdShnjQJk0qp4V3l0ax0qsEVeFPvIK0zuStBKdHVQyVZNBNbcld5NFuLrgSpTcIrP3qsWleimk8Jx9ArOaVgM3B6XJ2zhOdL62/SpIm7Shc4jHPPnj0u2aYZWFRrISU6twm7SysAUnf61E7P602f7NE5E++zkdpjEWo6x5q95/XXX0+0TEGqN/sgACD1iJViK1ZSckSz1yWkmGPFihXugmdg7xiVGtD7efvtt10MdfPNN7vn0vt+wnHcQrmPyUkYu+j4a5RFamMnzeKr8hIezaqnc+m9Z10cVwyni96B7QJLOIQrdtI50f+HEtL+her/NQA9pQAzN5RIV2L0B1b/iVeQpaKCuirz0UcfuXHmydE4cg3fa9GihWuvniXjxo1zQ62UCPASRCqCqN4uuvqjpILqGKU09vpcV2O0bl2N0f6OHDnSffmpcLVHV2aUrNKXr75U1K1YX8iBRSHTum+33nqru5KjXmBKfNSqVct1U1YipHv37onWnV4q+Pjqq6+6YWxr1651vWz0XjT1rN5rSjW+kqNARMnC5HoLaRpiFeXW9L3qGZRaOh7qZaWpiBXM6XjrquUXX3zhlqlnlo6Lejn16dPHHTcVI9d7UO8tDZPT+33yySfd507t//nPf7peRPo86gq0kjhKfnlUYFJXrtQrTwkjnSudM21Dn1t9NtTLSd25dRwVFKlW1Lko0anPrRJ1OrcKqrSdNWvWuGGFqaH3pGOp46AAVp85FVrX+iS1xyLUdI407ECFVtWDUVf9FGjp917Pq7ebCpMDAJJGrBT7sZJ6FOs7W8kQDeVXvKkLOlOmTHH1pbTehMOtNDxOcYMklbxIrXAet1DtY3I0MUqjRo1cfKZj9tVXX7lzEViDKyW6gKye3IrX1eNd/49QLKd4SpSQUqJKsYxiVPX+UnJQCUSVDlFMk9SQxPOlxObDDz/sykisX7/eXfxUTzPFuyqCPmrUKP9xBc5LRk//B2QkbypW76bpZUuWLOm76aabfKNGjQqaTtejKWADf3UWLFjgu+2223ylS5d2r9e9pjn94Ycfgl6naV2rVavmpqENnFZYU+9Wr149yf3TssAp5b1pVd955x03zW3x4sXddLWahjap6XqHDRvmu+iii9x0uNdcc43vq6++SrTOlPYt4TTH3rS0PXr0cO8zR44cvkqVKvleeuklN41wIK1HU8smpPVpveeyZ88eX7t27XzFihVzx7VGjRpJTsWcmmmO165d6/bnmWeeSbbNL7/84trovXnvPV++fOc8/3L69Gl3DKpUqeL29cILL3RT3Gq7gf773//6rr32Wrde3dRex2jLli1u+c8//+xr376979JLL/Xlzp3bV6RIEd/111/v+/zzz4PWo+mIGzZs6M699iXweH799de+pk2buumg8+bN616/fPnyVE3vfeLECV+vXr3c1MYFChRw+6ifx40bl+LxDTwu33//vZu+Wa+/4IILfN26dfMdP348UftzHYtz/W6ciz4TCT+7mor4xRdfdOvU74T2T9MwDxw40Hfw4MFzfnaTO27ee9+3b1/Q88l9hgAgMyFWyhqxkre+F154wX3/lipVyr1XfVfecMMNvvfeey/J1yh2UJtChQol+X2flngqXMctvfuYXByS8Hg+++yzvnr16vkKFy7sYjPFNM8995yLO1Lzu7VkyRJfp06d3D4qfrv33nt9v//+e6L2+n+AYjy9D8WJihcffPBBF9+f672kho5pUumB1157zcVLem+K7/Q56927t2/nzp3JHpPAfdY6Z86ceV4xFWJbnP45v7QWACCrU90EDclTF/JQd4sHAADRSb261WtbPZ3efPNNi0bRuo8qGq9RD+qRTm9tZGXUlAIAAAAApNkHH3zgLkhpiFy0ygz7CGRl1JQCAAAAAKTaqlWr3Ox/qtF0xRVXpKuwerhlhn0EQE8pAAAAAEAaqPB2ly5d3Cy9mhU6GmWGfQRgRk0pAAAAAAAARBw1pQAAAAAAABBxJKUAAAAAAAAQcSSlAAAAAAAAEHHMvhciZ8+etZ07d1qBAgUsLi4uVKsFAAAR5vP5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Qmrjxo02f/58mz17tkt0derUyb/80KFD1qRJEytfvrytXbvWXnrpJRswYIC99tpr/jbLly+3u+++2yW01q1bZy1btnS37777LsxHAAAAAAAAIGvKnpEbb9asmbslRb2kRo4caX379rXbbrvNPffWW29ZiRIlXI+qNm3a2KZNm2zu3Lm2Zs0aq1u3rmszevRoa968ub388suuB9bUqVPt5MmTNnHiRMuZM6dVr17d1q9fb8OHD/cnr0aNGmU333yz9erVyz0ePHiwS3KNGTPGJcQAAAAAAACQRWpKbdu2zXbv3u2G7HkKFSpk9evXtxUrVrjHuteQPS8hJWofHx/velZ5bRo2bOgSUh71ttqyZYv9+eef/jaB2/HaeNsBAAAAAABADPWUSokSUqKeUYH02Fum++LFiwctz549uxUpUiSoTYUKFRKtw1t2wQUXuPuUtpOUEydOuFvgMEEAAAAAAABk8p5S0W7IkCGu55Z3UwF1AAAAAAAAZPKkVMmSJd39nj17gp7XY2+Z7vfu3Ru0/PTp025GvsA2Sa0jcBvJtfGWJ6VPnz528OBB/23Hjh3n8W4BAAAAAACylqhNSmnInZJCCxYsCBoip1pRDRo0cI91f+DAATernmfhwoV29uxZV3vKa6MZ+U6dOuVvoyLmlStXdkP3vDaB2/HaeNtJSq5cuaxgwYJBNwAAAAAAAGSCpNSRI0fcTHi6ecXN9fP27dstLi7Ounfvbs8++6x99NFHtmHDBnvggQfcjHotW7Z07atWrepmzevYsaOtXr3ali1bZt26dXMz86md3HPPPa7IeYcOHWzjxo02ffp0N9tez549/fvx+OOPu1n8hg0bZps3b7YBAwbYV1995dYFAAAAAACAGCt0rsTP9ddf73/sJYratm1rkydPtt69e9vRo0etU6dOrkfUtdde65JHuXPn9r9m6tSpLnl04403uln3Wrduba+88op/ueo9ffbZZ9a1a1erU6eOFStWzPr16+fW6bn66qtt2rRp1rdvX/vXv/5llSpVsg8++MAuv/zyiB0LAAAAAACArCRDk1KNGjUyn8+X7HL1lho0aJC7JUcz7SmhlJKaNWvaF198kWKbf/7zn+4GAAAAAACALFxTCgAAAAAAALGLpBQAAEAUGzJkiP3tb3+zAgUKWPHixV1tzS1btiTqfa4e5oG3zp07B7VRzc4WLVpY3rx53Xp69erlZi0OtHjxYrvyyivdhC4VK1Z05RQSGjt2rF188cWunIImllFdTwAAgPQgKQUAABDFlixZ4mpjrly50s0OrBmFmzRp4upuBtLEL7t27fLfhg4d6l925swZl5A6efKkLV++3KZMmeISTqqz6dGEM2qjep+aeEYTzjz00EM2b948fxtNGKMaoP3797evv/7aatWqZU2bNrW9e/dG6GgAAIBYkqE1pQAAAJAyTfISSMkk9XRau3atNWzY0P+8ekCVLFkyyXVo0pfvv//ePv/8cytRooTVrl3bBg8ebE899ZSbdVgzFU+YMMEqVKjgZiP2Zjn+8ssvbcSIES7xJMOHD3fJr3bt2rnHes0nn3xiEydOtKeffppTCQAA0oSeUgAAAJnIwYMH/ZO9BNKMxJplWLMH9+nTx44dO+ZftmLFCqtRo4ZLSHmUaDp06JBt3LjR36Zx48ZB61QbPS/qZaVEWGAbzXysx14bAACAtKCnFAAAQCZx9uxZN6zummuuccknzz333GPly5e30qVL27fffut6QKnu1Pvvv++W7969OyghJd5jLUupjRJXx48ftz///NMNA0yqzebNm5Pd5xMnTribR+sDAAAQklIAAACZhGpLfffdd25YXaBOnTr5f1aPqFKlStmNN95oP/30k1166aWW0YXaBw4cmKH7AAAAohPD9wAAADKBbt262ezZs23RokVWpkyZFNtqVjz58ccf3b1qTe3ZsyeojffYq0OVXJuCBQtanjx53NDAbNmyJdkmuVpWoqGEGnLo3Xbs2JGm9w0AAGIXSSkAAIAo5vP5XEJq1qxZtnDhQleM/Fw0e56ox5Q0aNDANmzYEDRLnmbyU8KpWrVq/jYLFiwIWo/a6HlRMfQ6deoEtdFwQj322iQlV65cbjuBNwAAAGH4HgAAQJQP2Zs2bZp9+OGHVqBAAX8NqEKFCrkeTBqip+XNmze3okWLuppSPXr0cDPz1axZ07Vt0qSJSz7df//9NnToULeOvn37unUraSSdO3e2MWPGWO/eva19+/YuATZjxgw3u56nZ8+e1rZtW6tbt67Vq1fPRo4caUePHvXPxgcAAJAWJKUAAACi2Pjx4919o0aNgp6fNGmSPfjgg64H0+eff+5PEJUtW9Zat27tkk4eDbvT0L8uXbq4Xk358uVzyaVBgwb526gHlhJQSmiNGjXKDRF844033Ax8nrvuusv27dtn/fr1c4mt2rVr29y5cxMVPwcAAEgNklIAAABRPnwvJUpCLVmy5Jzr0ex8c+bMSbGNEl/r1q1LsY2GEuoGAABwvqgpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIgjKQUAAAAAAICIIykFAAAAAACAiCMpBQAAAAAAgIiL6qTUmTNn7JlnnrEKFSpYnjx57NJLL7XBgwebz+fzt9HP/fr1s1KlSrk2jRs3tq1btwat548//rB7773XChYsaIULF7YOHTrYkSNHgtp8++23dt1111nu3LmtbNmyNnTo0Ii9TwAAAAAAgKwmqpNSL774oo0fP97GjBljmzZtco+VLBo9erS/jR6/8sorNmHCBFu1apXly5fPmjZtan/99Ze/jRJSGzdutPnz59vs2bNt6dKl1qlTJ//yQ4cOWZMmTax8+fK2du1ae+mll2zAgAH22muvRfw9AwAAAAAAZAXZLYotX77cbrvtNmvRooV7fPHFF9s777xjq1ev9veSGjlypPXt29e1k7feestKlChhH3zwgbVp08Yls+bOnWtr1qyxunXrujZKajVv3txefvllK126tE2dOtVOnjxpEydOtJw5c1r16tVt/fr1Nnz48KDkFQAAAAAAALJAUurqq692vZV++OEHu+yyy+ybb76xL7/80iWLZNu2bbZ79243ZM9TqFAhq1+/vq1YscIlpXSvIXteQkrUPj4+3vWsuv32212bhg0buoSUR72t1DPrzz//tAsuuCDRvp04ccLdAntbITElBcOhWLFiVq5cOQ45AAAAAABZOSl14MABl/gJtaefftole6pUqWLZsmVzNaaee+45NxxP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iYqKkuHDh0vmzP87/VWrVkmvXr1k+/btUqJECenfv7+0b98+oOcDAACcKy1jJgAAAFf1lGrevLl8/vnnEig//vijTJkyRapVq+bzfM+ePeWrr76SefPmyerVq+XgwYM+swNevnxZHnroIblw4YJ8//338tFHH8mMGTNk4MCBnm32799vtrnvvvvk559/NiObTz/9tCxevDhg5wMAANwp0DETAACA65JSn332meTPn18CIT4+Xtq1aycffPCB5MuXz/P8yZMnZerUqTJmzBi5//77pVatWmamG00+rV+/3myzZMkS2bFjh8yaNUuqV69uAsFhw4aZUUpNVKnJkyebvg+jR4+WihUrSrdu3eRf//qXvPPOOwE5HwAA4F6BjJkAAAAcfftejRo1fBqdW5Ylhw8flr/++svcNhcIXbt2NZVMTZo0kddff93z/KZNm0xPK33eVqFCBSlZsqSsW7dO7r77bvOzatWqPrfz6S1+ejuf3qqn56PbeO/D3iZpLwgAAID0HDMBAAA4OinVsmVLn8ehoaFSsGBBuffee01CyN+0V9RPP/1kbt9LSgO7rFmzSt68eX2e1wSUrrO38U5I2evtdVfb5tSpU5KQkCBhYWFXvLb2r9LFptsCAACkVcwEAADg+KTUoEGDJFgOHDhgmoQuXbpUsmfPLumJNkofMmRIWh8GAABIp/wZM61Zs0beeustUyV+6NAhmT9/vk/SS6uw9PW01cGJEyekfv36MmnSJClbtqxnm2PHjskLL7xgenFqgqx169Yybtw4MwmMbcuWLaZCXQcDNYGm2/ft29fnWLSP54ABA+S3334z+x85cqQ8+OCDfjtXAADgHn7rKRUIGngdOXJEatasaWbK00WbmY8fP978rtVM2hdKgy9vcXFxUqRIEfO7/tTHSdfb6662Te7cuZOtklI6C6D2tLIXTaABAAAEwpkzZyQiIsL0xEzOqFGjTHykfTJ/+OEHyZkzp2lFoLMU27Q/p7Yu0MG+hQsXmkTXs88+61P13bRpUylVqpSJwTQJNnjwYHn//fc922jfzieeeEI6deokmzdvNokxXbZt28aFBwAAgauU0hE1774IydH1ly5dEn9p3LixbN261ee5Dh06mJL3l19+WUqUKCFZsmSR5cuXm9E+tWvXLomNjZW6deuax/rzjTfeMMmtQoUKmec0GNOEU6VKlTzbfP311z6vo9vY+0hOtmzZzAIAABDomEknatElOVolNXbsWOnfv7+0aNHCPDdz5kwzeLdgwQJ5/PHHJSYmRqKjo00FVO3atc02EyZMMBVOb7/9thQrVkxmz55tBvumTZtm2iNUrlzZzEqsE8rYySutrHrggQekT58+5rFOHqMx07vvvmsSYgAAAAFJSmmZeEq0UbiOziUmJoo/5cqVS6pUqeLznI78FShQwPO8jtT16tXLzGKjiSYtM9dkkjY5Vzrip8mnJ5980owiav8oDdq0NN1OKnXu3NkEU1qe3rFjR1mxYoV8+umnsmjRIr+eDwAAcL5gx0z79+838Y33pC158uSROnXqmNfTpJT+1B6cdkJK6faaQNPKqkcffdRs06hRI5OQsmm1ld6ed/z4cTMDsm6jcZc33UaTXymhDycAALjppJQ98uZNq5JeeeUV05tAS8KHDh0qwfbOO+94+iJo0KOBkfeMNpkyZTIl6jrbniarNKkVFRXlc6ylS5c2CaiePXuaEcDixYvLhx9+aPYFAACQGsGOmeyJW5KbtMV7Uhe7YtymrRB0UM97G42Jku7DXqdJqZQmh7H3kRz6cAIAAL81OlcHDx40zTQ/+ugjk7jR0u6kFU2BsmrVKp/H2gBd+yuk1GNBaW+EpLfnJaUz4WhvBAAAAH9Jy5gpvdA+nN7VVdq7SlswAAAApKrRuTb01l5Od9xxh2mUqb2cdMTPbcEVAABAeomZ7Ilbkpu0xXtSF+2v6U17WumMfP6YHMZenxxtl6AtFrwXAACAVCWltB9TmTJlzK1wn3zyiZl9pWHDhryLAAAAaRgz6S13mhTSxJd3NZL2ivKe+EVnK9ZZ9WzaQ1N7W2nvKXsbnZHv4sWLnm20iXn58uXNrXv2Nt6vcz2TwwAAANz07XvaByEsLMyM+GkJui7J+eKLL653lwAAAI4TiJgpPj5e9u7d69PcXG8F1J5QJUuWlB49esjrr78uZcuWNUmqAQMGmBn1WrZsabavWLGimTXvmWeeMbPkaeKpW7dupgm6bqfatm0rQ4YMMZPIaJXXtm3bTK9N7d9p6969u9xzzz0yevRoeeihh2TOnDmyceNGef/992/iHQMAAG513Umpp5566prTGwMAALhdIGImTfzcd999nsd2jyadvGXGjBlmBuEzZ87Is88+ayqiGjRoINHR0ab3pm327NkmEdW4cWPPJDE6E6D3jH1LliwxMxTXqlVLwsPDZeDAgWaftnr16snHH39sZjJ+9dVXTRJMZ96jlQMAAAhoUkoDHgAAAAQ/ZtIJWSzLSnG9JsF0Rr+rzeqnVVWaULqaatWqybfffnvVbdq0aWMWAACAoDY6BwAAAAAAAPyBpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgo6kFAAAAAAAAIKOpBQAAAAAAACCjqQUAAAAAAAAgi5z8F8SSP9iYmICst/w8HApWbJkQPYNAAAAAEBGQlIK8HIq7pSEhIZIZGRkQN6XsBxhsjNmJ4kpAAAAAIDrpeuk1PDhw+WLL76QnTt3SlhYmNSrV09Gjhwp5cuX92xz7tw56d27t8yZM0fOnz8vzZo1k/fee08KFy7s2SY2Nla6dOkiK1eulFtuuUWioqLMvjNn/t/pr1q1Snr16iXbt2+XEiVKSP/+/aV9+/ZBP2ekrYSTCWIlWhI5JVIKl/vfZ8gf4nbHyaznZsnRo0dJSgEAAAAAXC9dJ6VWr14tXbt2lTvvvFMuXbokr776qjRt2lR27NghOXPmNNv07NlTFi1aJPPmzZM8efJIt27dpFWrVrJ27Vqz/vLly/LQQw9JkSJF5Pvvv5dDhw7JU089JVmyZJE333zTbLN//36zTefOnWX27NmyfPlyefrpp6Vo0aImyQX30YRUiYgSaX0YAAAAAAA4VrpOSkVHR/s8njFjhhQqVEg2bdokjRo1kpMnT8rUqVPl448/lvvvv99sM336dKlYsaKsX79e7r77blmyZIlJYi1btsxUT1WvXl2GDRsmL7/8sgwePFiyZs0qkydPltKlS8vo0aPNPvTvv/vuO3nnnXfSTVJKq720wiaj9E4CAADBozHNkCFDfJ7TynKtNldUlgMAgPQoXSelktIklMqfP7/5qcmpixcvSpMmTTzbVKhQwdwatW7dOpOU0p9Vq1b1uZ1PE016O5/eqlejRg2zjfc+7G169OiR4rHorYK62E6dOiWBTEhVqFhBEs4mBOw1AABAxla5cmUzCGfzblNAZTkAAEiPMkxSKjEx0SSJ6tevL1WqVDHPHT582FQ65c2b12dbTUDpOnsb74SUvd5ed7VtNNGUkJBg+lklpT2pko5IBopWSGlCKhB9jnYs2yHfvPGNX/cJAACCT5NQ2q4gKTdVlgMAgIwlwySltLfUtm3bTPCTHvTr1880RrdpAksbpGe0PkfafBsAAGR8e/bskWLFikn27Nmlbt26ZgBNq8fTsrIcAAAgwyeltHn5woULZc2aNVK8eHHP8zoaeOHCBTlx4oRPtVRcXJxnpFB/btiwwWd/ut5eZ/+0n/PeJnfu3MlWSals2bKZBQAAIK3VqVPH9N7UPlI6qYtWczds2NAM6KVlZXmwWx4AAICMJVTSMcuyTEJq/vz5smLFClMy7q1WrVpmFj2dLc+2a9cu04NJRwiV/ty6dascOXLEs83SpUtNwqlSpUqebbz3YW9j7wMAACA9a968ubRp00aqVatmqpe+/vprM2j36aefpvWhmYotnSHZXgJdWQ4AADKO0PR+y96sWbNMD4RcuXKZETpddDROaWDTqVMncxvdypUrTXl6hw4dTDJJS9FV06ZNTfLpySeflF9++UUWL14s/fv3N/u2K506d+4s+/btk759+5pZat577z0TxGlTUAAAgIxGq6LKlSsne/fu9aks95a0sjy5qnF73Y1WltstD7Svlb0cOHDAb+cJAAAytnSdlJo0aZIJXu69914pWrSoZ5k7d65nG22u+fDDD0vr1q2lUaNGJmD64osvPOszZcpkbv3Tn5qsioyMlKeeekqGDh3q2UYrsBYtWmSqoyIiIkwDzw8//JCmnQAAIEOKj4+XX3/91cRNaV1ZroOAuh/vBQAAIN33lNLb965Fm3lOnDjRLCkpVaqUKWO/Gk18bd68+YaOEwAAIC299NJL8sgjj5iY5+DBgzJo0CAzIPfEE0/4VJbnz5/fJIVeeOGFFCvLR40aZSrTk6ssf/fdd01leceOHU1rBa0s14E9AAAAxyWlAAAAcG1//PGHSUD9/fffUrBgQWnQoIGsX7/e/G5XloeGhprKcm06rn2ntF1B0spynW1Pk1U5c+aUqKioZCvLtb3BuHHjzOQzVJYDAICbQVIKAAAgg5szZ85V11NZDgAA0qN03VMKAAAAAAAAzkRSCgAAAAAAAEFHUgoAAAAAAABBR1IKAAAAAAAAQUdSCgAAAAAAAEFHUgoAAAAAAABBR1IKAAAAAAAAQUdSCgAAAAAAAEFHUgoAAAAAAABBR1IKAAAAAAAAQUdSCgAAAAAAAEFHUgoAAAAAAABBR1IKAAAAAAAAQUdSCgAAAAAAAEFHUgoAAAAAAABBlzn4LwnA32JjY+Xo0aMBeWPDw8OlZMmSAdk3AAAAAMC9SEoBDkhIVahYQRLOJgRk/2E5wmRnzE4SUwAAAAAAvyIpBQRZTEyM3/enCanIKZFSuFxhv+47bneczHpulqnColoKAAAAAOBPJKWAIDkVd0pCQkMkMjIyIPvXhFSJiBIB2TcAAAAAAP5GUgoIkoSTCWIlWn6vaNqxbId888Y3ftsfAAAITrWzjf6NAAC3IikFBJm/K5r0FjsAABA4cafjJDQkNGDVzjnCckjMzhhulQcAuA5JKQAAAOAqTp47KYlWokxpPUXKFSzn1/dq91+75bnPn6N/IwDAlUhKAQAAANdBE1IRxSJ4rwAA8JNQf+0IAAAAAAAAuF4kpQAAAAAAABB0JKUAAAAAAAAQdCSlAAAAAAAAEHQkpQAAAAAAABB0JKUAAAAAAAAQdCSlAAAAAAAAEHSZg/+SADKamJiYgOw3PDxcSpYsGZB9AwAAAADSN5JSAFJ0Ku6UhISGSGRkZEDepbAcYbIzZieJKQAAAABwIZJSAFKUcDJBrERLIqdESuFyhf36TsXtjpNZz82So0ePkpQCAAAAABciKQXgmjQhVSKiBO8UAAAAAMBvaHQOAAAAAACAoKNSCkCaook6AAAAALgTSSkAjmyini17Nvn8s8+laNGift0vMwYCAAAAgH+QlALguCbq+9bvkwWvLZCHH35Y/I0ZAwEAAADAP0hKAXBcE3Wd2S8QCS9mDAQAAAAA/yEpBcCxmDUQAJBR0GMRAOBGJKWSmDhxorz11lty+PBhiYiIkAkTJshdd92VNlcHAAAgHSJe8p+403ESGhIasB6LOcJySMzOGClZsmRA9g8AwM0gKeVl7ty50qtXL5k8ebLUqVNHxo4dK82aNZNdu3ZJoUKFbuqNBuAcjGYDcDPiJf86ee6kJFqJMqX1FClXsJxf9737r93y3OfPydGjR0lKAQDSJZJSXsaMGSPPPPOMdOjQwTzW5NSiRYtk2rRp8sorr6TVNQLgkhkDaaIOICMgXgoMTUhFFIsI0N4BAEifSEr914ULF2TTpk3Sr18/z5sTGhoqTZo0kXXr1qXV9QHgkhkD7Sbq3377rVSsWFH87fz585ItWza/7zeQ+w4PD2dkH0hniJcypkBU+Aby3xW+/wHAPUhK/ZeWNV++fFkKF/b9P5r6eOfOncn+Q6yL7eTJk+bnqVOn/H6R4uPjzc8DvxyQ82f+95r+cHjP4YDsO1D7Zd+8H2n5GbH3eyHhgt8/1ycOnhAJkYBVYem+xZIMte9s2bPJv2f++4rvZX/QQYfExES/7zej7jsjHrMqUqSIWfzN/rfcsgL1H4174qVgxkx2vPTLwV/kzIUzft33nr/2ZMh9/xj7o4RIYCp8db9WgP5hyZ4tu8z890y+/zP4d3RG3HdGPOaMuu+MeMwZdd9F0nu8ZMH4888/9Z20vv/+e593pE+fPtZdd911xbs0aNAgsz0L7wGfAT4DfAb4DPAZcOZn4MCBA0RJNxkvETOl/eeYhfeAzwCfAT4DfAYkHcdLVEp5lQlnypRJ4uLifJJ2+ji5rKLe5qdN0W2a0Tx27JgUKFBAQkJCrppNLFGihBw4cEBy584tbuLWc+e83XW9FdfcXdfcrdfbyeeuI36nT5+WYsWKpfWhZPh46WZiptRy6ufxajhn519nrrHzr7Ebr7Pbztep52z5KV4iKfVfWbNmlVq1asny5culZcuWnqBJH3fr1u2KN07voU96H33evHmv+43XD6JTPoyp5dZz57zdh2vuLm693k499zx58qT1ITgiXvJHzJRaTvw8Xgvn7HxcY3dw23V22/k68Zzz+CFeIinlRUfxoqKipHbt2nLXXXfJ2LFj5cyZM57Z+AAAANyOeAkAAPgLSSkvjz32mPz1118ycOBAOXz4sFSvXl2io6MD0mQRAAAgIyJeAgAA/kJSKgktPU+p/NwftHx90KBBAZtCNz1z67lz3u663opr7q5r7tbr7fZzd7tAx0s3wo2fR87Z+bjG7uC26+y283XrOV+vEO12ft1bAwAAAAAAAH4Q6o+dAAAAAAAAAKlBUgoAAAAAAABBR1IKAAAAAAAAQUdSKsgmTpwot912m2TPnl3q1KkjGzZsEKdZs2aNPPLII1KsWDEJCQmRBQsW+KzXNmY6w2HRokUlLCxMmjRpInv27JGMbPjw4XLnnXdKrly5pFChQtKyZUvZtWuXzzbnzp2Trl27SoECBeSWW26R1q1bS1xcnGR0kyZNkmrVqknu3LnNUrduXfnmm28cf95JjRgxwnzee/To4ehzHzx4sDlP76VChQqOPmdvf/75p0RGRprz0++vqlWrysaNGx39/ab/ZiW95rrodXbDNUfG4eQYy22xlRvjKrfHU26Io9waQ7kpdiJmujEkpYJo7ty50qtXL9N1/6effpKIiAhp1qyZHDlyRJzkzJkz5tw0OEzOqFGjZPz48TJ58mT54YcfJGfOnOZ90C/ijGr16tXmH5H169fL0qVL5eLFi9K0aVPzXth69uwpX331lcybN89sf/DgQWnVqpVkdMWLFzeBxKZNm8w/MPfff7+0aNFCtm/f7ujz9vbjjz/KlClTTDDpzannXrlyZTl06JBn+e677xx/zur48eNSv359yZIli/k/Cjt27JDRo0dLvnz5HP39pp9v7+ut33GqTZs2jr/myDicHmO5LbZyY1zl5njKTXGU22Iot8VOxEw3SGffQ3DcddddVteuXT2PL1++bBUrVswaPny4Yy+BfsTmz5/veZyYmGgVKVLEeuuttzzPnThxwsqWLZv1ySefWE5x5MgRc+6rV6/2nGOWLFmsefPmebaJiYkx26xbt85ymnz58lkffvihK8779OnTVtmyZa2lS5da99xzj9W9e3fzvFPPfdCgQVZERESy65x6zraXX37ZatCgQYrr3fL9pp/x22+/3Zyv0685Mg43xVhujK3cGle5IZ5yUxzlxhjK7bETMdP1oVIqSC5cuGBGPrQc0RYaGmoer1u3Ttxi//79cvjwYZ/3IU+ePKbM3knvw8mTJ83P/Pnzm5967XWUz/u8tVy3ZMmSjjrvy5cvy5w5c8xIppadu+G8dST3oYce8jlH5eRz15JqvYWkTJky0q5dO4mNjXX8Oasvv/xSateubSqE9HaSGjVqyAcffOCq7zf9t2zWrFnSsWNHc9uB0685Mga3x1hu+O5xW1zlpnjKbXGU22IoN8dOxEzXj6RUkBw9etT8A1O4cGGf5/Wx/ofoFva5Ovl9SExMNPfDa6lqlSpVzHN6blmzZpW8efM68ry3bt1q7n3Pli2bdO7cWebPny+VKlVy/HlrwKi3iWjvi6Sceu4aJMyYMUOio6NN/wsNJho2bCinT5927Dnb9u3bZ865bNmysnjxYunSpYu8+OKL8tFHH7nm+0372Jw4cULat29vHjv9miNjcHuM5fTvHjfFVW6Lp9wWR7kxhnJz7ETMdP0yp2JbANc54rNt2zafe8Sdrnz58vLzzz+bkczPPvtMoqKizL3wTnbgwAHp3r276XWhTXXdonnz5p7ftfeDBlilSpWSTz/91DSndDL9P0Y62vfmm2+axzrap/+taw8E/cy7wdSpU81nQEd5ASAY3BRXuSmecmMc5cYYys2xEzHT9aNSKkjCw8MlU6ZMV8ygoI+LFCkibmGfq1Pfh27dusnChQtl5cqVpmGlTc9NSzi1wsCJ560jO3fccYfUqlXLjHZpM9Zx48Y5+ry1zFob6NasWVMyZ85sFg0ctVGj/q4jPE49d286oleuXDnZu3evo6+30llhdMTaW8WKFT2l907/fvv9999l2bJl8vTTT3uec/o1R8bg9hjLyd89bour3BRPEUe5I4Zya+xEzJQ6JKWC+I+M/gOzfPlyn8yxPtZ7xd2idOnS5gvG+304deqUmWkhI78P2ndUAycts16xYoU5T2967XXWCe/z1qmN9Qs5I593SvSzff78eUefd+PGjU2ZvY5o2ouOBGl/APt3p567t/j4ePn1119N0OHk66301pGkU5Lv3r3bjHI6+fvNNn36dNMPQnt/2Jx+zZExuD3GcuJ3D3GV8+Mp4ih3xFBujZ2ImVLpOhuiww/mzJljZhKYMWOGtWPHDuvZZ5+18ubNax0+fNhR76/OorF582az6EdszJgx5vfff//drB8xYoQ57//85z/Wli1brBYtWlilS5e2EhISrIyqS5cuVp48eaxVq1ZZhw4d8ixnz571bNO5c2erZMmS1ooVK6yNGzdadevWNUtG98orr5jZcPbv32+upz4OCQmxlixZ4ujzTo73rDFOPffevXubz7le77Vr11pNmjSxwsPDzcxITj1n24YNG6zMmTNbb7zxhrVnzx5r9uzZVo4cOaxZs2Z5tnHi95s9k5leV51FJyknX3NkHE6PsdwWW7kxriKecn4c5cYYyo2xEzFT6pGUCrIJEyaYL5usWbOa6YvXr19vOc3KlStNwJR0iYqK8kz9OWDAAKtw4cImgGzcuLG1a9cuKyNL7nx1mT59umcb/WJ9/vnnzfS++mX86KOPmgAro+vYsaNVqlQp85kuWLCguZ52QsrJ5309wZQTz/2xxx6zihYtaq73rbfeah7v3bvX0efs7auvvrKqVKlivrsqVKhgvf/++z7rnfj9phYvXmy+05I7F6dfc2QcTo6x3BZbuTGuIp5yfhzl1hjKbbETMVPqhej/pLa6CgAAAAAAALgZ9JQCAAAAAABA0JGUAgAAAAAAQNCRlAIAAAAAAEDQkZQCAAAAAABA0JGUAgAAAAAAQNCRlAIAAAAAAEDQkZQCAAAAAABA0JGUAgAAAAAAQNCRlAKQrvz2228SEhIiP//8s6QXO3fulLvvvluyZ88u1atXT+vDAQAALkasBMBJSEoB8NG+fXuTFBoxYoTP8wsWLDDPu9GgQYMkZ86csmvXLlm+fPlVt123bp1kypRJHnroIUlvVq1aZa7hiRMn0vpQAADIsIiVbixW+uuvv6RLly5SsmRJyZYtmxQpUkSaNWsma9euDfg1A5B+kZQCcAWtCBo5cqQcP37cMe/OhQsXbvhvf/31V2nQoIGUKlVKChQocNVtp06dKi+88IKsWbNGDh48KE5kWZZcunQprQ8DAIA0Q6yU+lipdevWsnnzZvnoo49k9+7d8uWXX8q9994rf//9d1CuGYD0iaQUgCs0adLEjF4NHz48xXdn8ODBV9zKNnbsWLntttt8RhJbtmwpb775phQuXFjy5s0rQ4cONQmNPn36SP78+aV48eIyffr0ZG+Zq1evngn6qlSpIqtXr/ZZv23bNmnevLnccsstZt9PPvmkHD161LNeg5xu3bpJjx49JDw83IzEJScxMdEckx6HjtrpOUVHR3vWa2XRpk2bzDb6u553SuLj42Xu3LlmFFArpWbMmJFspZKOINauXVty5MhhzlFHFb199dVXcuedd5pz12N/9NFHPevOnz8vL730ktx6661mRLJOnTpmv7bff/9dHnnkEcmXL59ZX7lyZfn6669Nqf99991nttF1ehx6fex9vvjii1KoUCHzmhpU/vjjj1cc9zfffCO1atUy79N3330nv/zyi9lnrly5JHfu3Gbdxo0bU3x/AABwCmKl1MVKWqX97bffmkFPjR00eXXXXXdJv3795J///KfZpmPHjvLwww/7/N3FixdNfKKDfnZ8pzFL3759TRyp8WrS14uNjZUWLVqYGFHjk//7v/+TuLi4K2LYf//73yZuzZMnjzz++ONy+vRps37mzJkmsabxkTeNaTXe9N7HtGnTTOWXvtbzzz8vly9fllGjRpnj0uN+4403fAb19O/sSrFixYqZcwHcjqQUgCvo7WeaSJowYYL88ccfN/UOrVixwlQMaeXQmDFjTHm3BhyaGPnhhx+kc+fO8txzz13xOpq06t27txlRq1u3rkm02CNpGtjcf//9UqNGDZME0SSSBhsadHjTkbisWbOasvDJkycne3zjxo2T0aNHy9tvvy1btmwxySsNjvbs2WPWHzp0yCR29Fj0d00IpeTTTz+VChUqSPny5SUyMtIEKhqAJPXaa6+Z19Rjz5w5swnCbIsWLTJJqAcffNCcuyawNGizaaJNbxGcM2eOOd42bdrIAw884Dnerl27miBK3++tW7ea4E8DpRIlSsjnn39uttEkmJ6LnrvSwE7X6fv1008/yR133GHeh2PHjvkc9yuvvGJu64yJiZFq1apJu3btTDJPE1gajOr6LFmypPj+AADgFMRKqYuVNBbRRdtBJE322J5++mkT0+k+bAsXLpSzZ8/KY4895nlO4xUdeNM4UhNAmgxbunSpZ7BRE1Iaw+iApj6/b98+n7+3K7v0WHT/uui2dusKja00uaSVXLYjR46YGM07ZtN96ICdHvMnn3xiEmc6KKkxre5PY7D+/fub41Qaa73zzjsyZcoU897p61etWvWGP4OAY1gA4CUqKspq0aKF+f3uu++2OnbsaH6fP3++Zlc82w0aNMiKiIjwee/eeecdq1SpUj770seXL1/2PFe+fHmrYcOGnseXLl2ycubMaX3yySfm8f79+83rjBgxwrPNxYsXreLFi1sjR440j4cNG2Y1bdrU57UPHDhg/m7Xrl3m8T333GPVqFHjmte2WLFi1htvvOHz3J133mk9//zznsd6nnq+11KvXj1r7NixnmMODw+3Vq5c6Vmvv+sxLlu2zPPcokWLzHMJCQnmcd26da127dolu//ff//dypQpk/Xnn3/6PN+4cWOrX79+5veqVatagwcPTvbv7dc/fvy457n4+Hgr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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "plt.figure(figsize=(12, 8))\n", "\n", @@ -651,7 +331,7 @@ }, { "cell_type": "markdown", - "id": "f41a1677", + "id": "19", "metadata": {}, "source": [ "### Branch Overview\n", @@ -660,18 +340,10 @@ }, { "cell_type": "code", - "execution_count": 12, - "id": "ca928ed5", + "execution_count": null, + "id": "20", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Number of terms under 'Phenotypic abnormality': 23\n" - ] - } - ], + "outputs": [], "source": [ "phenotypic_root = hpo.search_one(label=\"Phenotypic abnormality\")\n", "if phenotypic_root:\n", @@ -681,7 +353,7 @@ }, { "cell_type": "markdown", - "id": "590087c2", + "id": "21", "metadata": {}, "source": [ "# 3. Printing HPO Terms\n", @@ -690,8 +362,8 @@ }, { "cell_type": "code", - "execution_count": 17, - "id": "a223ee28", + "execution_count": null, + "id": "22", "metadata": {}, "outputs": [], "source": [ @@ -744,36 +416,9 @@ { "cell_type": "code", "execution_count": null, - "id": "8ca32608", + "id": "23", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\n", - "--- HPO Term Overview ---\n", - "Name / ID: HP_0001250\n", - "Labels: ['Seizure']\n", - "Synonyms: ['Epileptic seizure', 'Seizures']\n", - "Parents (is_a): ['HP_0012638']\n", - "Children (subclasses): ['HP_0002069', 'HP_0002197', 'HP_0011146', 'HP_0033259', 'HP_0002133', 'HP_0011145', 'HP_0007359', 'HP_0020219', 'HP_0020207', 'HP_0031951', 'HP_0032807', 'HP_0032892']\n", - "Ancestors: ['HP_0001250', 'HP_0000001', 'HP_0012638', 'Thing', 'HP_0000118', 'HP_0000707']\n", - "---------------------------\n", - "\n", - "\n", - "--- HPO Term Overview ---\n", - "Name / ID: HP_0001250\n", - "Labels: ['Seizure']\n", - "Synonyms: ['Epileptic seizure', 'Seizures']\n", - "Parents (is_a): ['HP_0012638']\n", - "Children (subclasses): ['HP_0002069', 'HP_0002197', 'HP_0011146', 'HP_0033259', 'HP_0002133', 'HP_0011145', 'HP_0007359', 'HP_0020219', 'HP_0020207', 'HP_0031951', 'HP_0032807', 'HP_0032892']\n", - "Ancestors: ['HP_0001250', 'HP_0000001', 'HP_0012638', 'Thing', 'HP_0000118', 'HP_0000707']\n", - "---------------------------\n", - "\n" - ] - } - ], + "outputs": [], "source": [ "# Assuming 'onto' is already loaded\n", "print_hpo_term(\"HP:0001250\", hpo) # By ID\n", @@ -782,7 +427,7 @@ }, { "cell_type": "markdown", - "id": "95853345", + "id": "24", "metadata": {}, "source": [ "# 4. Graph Overview\n", @@ -797,705 +442,9 @@ { "cell_type": "code", "execution_count": null, - "id": "75a3f259", + "id": "25", "metadata": {}, - "outputs": [ - { - "data": { - "image/svg+xml": [ - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Phenotypic abnormality\n", - "\n", - "Phenotypic abnormality\n", - "\n", - "\n", - "\n", - "Growth abnormality\n", - "\n", - "Growth abnormality\n", - "\n", - "\n", - "\n", - "Phenotypic abnormality->Growth abnormality\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "All\n", - "\n", - "All\n", - "\n", - "\n", - "\n", - "All->Phenotypic abnormality\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Abnormality of body height\n", - "\n", - "Abnormality of body height\n", - "\n", - "\n", - "\n", - "Growth abnormality->Abnormality of body height\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Growth delay\n", - "\n", - "Growth delay\n", - "\n", - "\n", - "\n", - "Growth abnormality->Growth delay\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Tall stature\n", - "\n", - "Tall stature\n", - "\n", - "\n", - "\n", - "Abnormality of body height->Tall stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Short stature\n", - "\n", - "Short stature\n", - "\n", - "\n", - "\n", - "Abnormality of body height->Short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Abnormal upper to lower segment ratio\n", - "\n", - "Abnormal upper to lower segment ratio\n", - "\n", - "\n", - "\n", - "Abnormality of body height->Abnormal upper to lower segment ratio\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Disproportionate tall stature\n", - "\n", - "Disproportionate tall stature\n", - "\n", - "\n", - "\n", - "Tall stature->Disproportionate tall stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Slender build\n", - "\n", - "Slender build\n", - "\n", - "\n", - "\n", - "Tall stature->Slender build\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Overgrowth\n", - "\n", - "Overgrowth\n", - "\n", - "\n", - "\n", - "Tall stature->Overgrowth\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Birth length greater than 97th percentile\n", - "\n", - "Birth length greater than 97th percentile\n", - "\n", - "\n", - "\n", - "Tall stature->Birth length greater than 97th percentile\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Proportionate tall stature\n", - "\n", - "Proportionate tall stature\n", - "\n", - "\n", - "\n", - "Tall stature->Proportionate tall stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Decreased body weight\n", - "\n", - "Decreased body weight\n", - "\n", - "\n", - "\n", - "Decreased body weight->Slender build\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Pituitary dwarfism\n", - "\n", - "Pituitary dwarfism\n", - "\n", - "\n", - "\n", - "Short stature->Pituitary dwarfism\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Disproportionate short stature\n", - "\n", - "Disproportionate short stature\n", - "\n", - "\n", - "\n", - "Short stature->Disproportionate short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Proportionate short stature\n", - "\n", - "Proportionate short stature\n", - "\n", - "\n", - "\n", - "Short stature->Proportionate short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Birth length less than 3rd percentile\n", - "\n", - "Birth length less than 3rd percentile\n", - "\n", - "\n", - "\n", - "Short stature->Birth length less than 3rd percentile\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Asymmetric short stature\n", - "\n", - "Asymmetric short stature\n", - "\n", - "\n", - "\n", - "Short stature->Asymmetric short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Growth delay->Short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Delayed puberty\n", - "\n", - "Delayed puberty\n", - "\n", - "\n", - "\n", - "Growth delay->Delayed puberty\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Intrauterine growth retardation\n", - "\n", - "Intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "Growth delay->Intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Postnatal growth retardation\n", - "\n", - "Postnatal growth retardation\n", - "\n", - "\n", - "\n", - "Growth delay->Postnatal growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Disproportionate short-trunk short stature\n", - "\n", - "Disproportionate short-trunk short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short stature->Disproportionate short-trunk short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature\n", - "\n", - "Disproportionate short-limb short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short stature->Disproportionate short-limb short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Neonatal short-trunk short stature\n", - "\n", - "Neonatal short-trunk short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-trunk short stature->Neonatal short-trunk short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Childhood-onset short-trunk short stature\n", - "\n", - "Childhood-onset short-trunk short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-trunk short stature->Childhood-onset short-trunk short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Lethal short-trunk short stature\n", - "\n", - "Lethal short-trunk short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-trunk short stature->Lethal short-trunk short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Infancy onset short-trunk short stature\n", - "\n", - "Infancy onset short-trunk short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-trunk short stature->Infancy onset short-trunk short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Abnormal axial skeleton morphology\n", - "\n", - "Abnormal axial skeleton morphology\n", - "\n", - "\n", - "\n", - "Abnormal axial skeleton morphology->Disproportionate short-trunk short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Rhizomelia\n", - "\n", - "Rhizomelia\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature->Rhizomelia\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Mesomelic short stature\n", - "\n", - "Mesomelic short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature->Mesomelic short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Severe short-limb dwarfism\n", - "\n", - "Severe short-limb dwarfism\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature->Severe short-limb dwarfism\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Lethal short-limbed short stature\n", - "\n", - "Lethal short-limbed short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature->Lethal short-limbed short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Neonatal short-limb short stature\n", - "\n", - "Neonatal short-limb short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature->Neonatal short-limb short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Childhood onset short-limb short stature\n", - "\n", - "Childhood onset short-limb short stature\n", - "\n", - "\n", - "\n", - "Disproportionate short-limb short stature->Childhood onset short-limb short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Rhizomelic arm shortening\n", - "\n", - "Rhizomelic arm shortening\n", - "\n", - "\n", - "\n", - "Rhizomelia->Rhizomelic arm shortening\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Mesomelic/rhizomelic limb shortening\n", - "\n", - "Mesomelic/rhizomelic limb shortening\n", - "\n", - "\n", - "\n", - "Rhizomelia->Mesomelic/rhizomelic limb shortening\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Rhizo-meso-acromelic limb shortening\n", - "\n", - "Rhizo-meso-acromelic limb shortening\n", - "\n", - "\n", - "\n", - "Rhizomelia->Rhizo-meso-acromelic limb shortening\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Rhizomelic leg shortening\n", - "\n", - "Rhizomelic leg shortening\n", - "\n", - "\n", - "\n", - "Rhizomelia->Rhizomelic leg shortening\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Limb undergrowth\n", - "\n", - "Limb undergrowth\n", - "\n", - "\n", - "\n", - "Limb undergrowth->Rhizomelia\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Mild short stature\n", - "\n", - "Mild short stature\n", - "\n", - "\n", - "\n", - "Proportionate short stature->Mild short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Severe short stature\n", - "\n", - "Severe short stature\n", - "\n", - "\n", - "\n", - "Proportionate short stature->Severe short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Moderately short stature\n", - "\n", - "Moderately short stature\n", - "\n", - "\n", - "\n", - "Proportionate short stature->Moderately short stature\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Reduced upper to lower segment ratio\n", - "\n", - "Reduced upper to lower segment ratio\n", - "\n", - "\n", - "\n", - "Abnormal upper to lower segment ratio->Reduced upper to lower segment ratio\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Increased upper to lower segment ratio\n", - "\n", - "Increased upper to lower segment ratio\n", - "\n", - "\n", - "\n", - "Abnormal upper to lower segment ratio->Increased upper to lower segment ratio\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Delayed menarche\n", - "\n", - "Delayed menarche\n", - "\n", - "\n", - "\n", - "Delayed puberty->Delayed menarche\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Delayed adrenarche\n", - "\n", - "Delayed adrenarche\n", - "\n", - "\n", - "\n", - "Delayed puberty->Delayed adrenarche\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Delayed thelarche\n", - "\n", - "Delayed thelarche\n", - "\n", - "\n", - "\n", - "Delayed puberty->Delayed thelarche\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Puberty and gonadal disorders\n", - "\n", - "Puberty and gonadal disorders\n", - "\n", - "\n", - "\n", - "Puberty and gonadal disorders->Delayed puberty\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Abnormality of the menstrual cycle\n", - "\n", - "Abnormality of the menstrual cycle\n", - "\n", - "\n", - "\n", - "Abnormality of the menstrual cycle->Delayed menarche\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Severe intrauterine growth retardation\n", - "\n", - "Severe intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "Intrauterine growth retardation->Severe intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Mild intrauterine growth retardation\n", - "\n", - "Mild intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "Intrauterine growth retardation->Mild intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Moderate intrauterine growth retardation\n", - "\n", - "Moderate intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "Intrauterine growth retardation->Moderate intrauterine growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Mild postnatal growth retardation\n", - "\n", - "Mild postnatal growth retardation\n", - "\n", - "\n", - "\n", - "Postnatal growth retardation->Mild postnatal growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Severe postnatal growth retardation\n", - "\n", - "Severe postnatal growth retardation\n", - "\n", - "\n", - "\n", - "Postnatal growth retardation->Severe postnatal growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "Moderate postnatal growth retardation\n", - "\n", - "Moderate postnatal growth retardation\n", - "\n", - "\n", - "\n", - "Postnatal growth retardation->Moderate postnatal growth retardation\n", - "\n", - "\n", - "\n", - "\n", - "\n" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "outputs": [], "source": [ "# Select HPO root\n", "root = hpo.search_one(iri=\"*HP_0000118\") # Phenotypic abnormality\n", @@ -1538,7 +487,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "venv (3.12.13)", "language": "python", "name": "python3" }, @@ -1552,7 +501,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.0" + "version": "3.12.13" } }, "nbformat": 4, From 0047c99633cd0dd414ef58cc7dda92860f64d777 Mon Sep 17 00:00:00 2001 From: Zeynep Caysar Date: Tue, 17 Mar 2026 16:59:04 +0100 Subject: [PATCH 3/3] load phenotype.hpoa dataset and analysis, update requirements.txt --- ontologies/hpoa_overview.ipynb | 191 +++++++++++++++++++++++ ontologies/model/load_models_to_local.py | 1 + requirements.txt | 10 ++ 3 files changed, 202 insertions(+) create mode 100644 ontologies/hpoa_overview.ipynb diff --git a/ontologies/hpoa_overview.ipynb b/ontologies/hpoa_overview.ipynb new file mode 100644 index 0000000..99acc1b --- /dev/null +++ b/ontologies/hpoa_overview.ipynb @@ -0,0 +1,191 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0", + "metadata": {}, + "source": [ + "# HPOA Overview\n", + "\n", + "(phenotype.hpoa) – Disease–Phenotype Annotations\n", + "\n", + "This dataset contains curated associations between diseases and phenotypes.\n", + "\n", + "- Diseases are identified using external databases:\n", + " - OMIM (e.g., OMIM:154700)\n", + " - ORPHANET (e.g., ORPHA:558)\n", + "\n", + "- Phenotypes are represented using HPO terms:\n", + " - Example: HP:0001250 (Seizures)\n", + "\n", + "Each row represents one association between a disease and a phenotype, along with metadata such as evidence and frequency.\n", + "\n", + "## Validation and Comparison with HOOM\n", + "\n", + "HPOA can be used as a reference dataset to validate disease–phenotype relationships derived from HOOM.\n", + "\n", + "While HOOM integrates HPO and ORDO into a unified ontology, the underlying associations may differ in:\n", + "- coverage (missing or additional links)\n", + "- representation (ontology relations vs. flat annotations)\n", + "- update frequency\n", + "\n", + "By comparing HOOM-derived links with HPOA annotations, we can:\n", + "- verify that key associations are preserved\n", + "- identify discrepancies or gaps\n", + "- better understand the impact of using an integrated ontology vs. a curated annotation file\n", + "\n", + "## Summary\n", + "- This dataset provides direct disease → phenotype associations.\n", + "- It is the primary source of links between:\n", + " - OMIM / ORPHA diseases\n", + " - HPO phenotypes\n", + "\n", + "- Unlike HPO or ORDO:\n", + " - This is NOT an ontology\n", + " - It is a flat annotation table\n", + "\n", + "- It can be used to:\n", + " 1. Build disease–phenotype edges\n", + " 2. Map diseases to ORDO\n", + " 3. Support similarity and prediction tasks\n", + " 4. Validate disease–phenotype relationships derived from HOOM\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "1", + "metadata": {}, + "outputs": [], + "source": [ + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "print(\"Loading phenotype.hpoa...\")\n", + "hpoa = pd.read_csv(\n", + " \"model/phenotype.hpoa.owl\",\n", + " sep=\"\\t\",\n", + " comment=\"#\",\n", + " header=None\n", + ")\n", + "\n", + "print(\"File loaded.\")\n", + "\n", + "# Check shape\n", + "print(f\"Rows: {hpoa.shape[0]}\")\n", + "print(f\"Columns: {hpoa.shape[1]}\")\n", + "\n", + "# Official column names for phenotype.hpoa\n", + "hpoa.columns = [\n", + " \"database_id\", # Disease identifier (OMIM or ORPHA)\n", + " \"disease_name\",\n", + " \"qualifier\",\n", + " \"hpo_id\",\n", + " \"reference\",\n", + " \"evidence\",\n", + " \"onset\",\n", + " \"frequency\",\n", + " \"sex\",\n", + " \"modifier\",\n", + " \"aspect\",\n", + " \"biocuration\"\n", + "]\n", + "\n", + "print(\"\\nPreview:\")\n", + "print(hpoa.head())\n", + "\n", + "# Basic counts\n", + "print(\"\\nBasic statistics\")\n", + "print(f\"Unique diseases: {hpoa['database_id'].nunique()}\")\n", + "print(f\"Unique HPO terms: {hpoa['hpo_id'].nunique()}\")\n", + "print(f\"Unique evidence codes: {hpoa['evidence'].nunique()}\")\n", + "\n", + "# Disease source counts\n", + "source_counts = hpoa[\"database_id\"].str.split(\":\").str[0].value_counts()\n", + "print(\"\\nDisease source prefixes:\") # OMIM: Mendelian diseases or ORPHA: rare diseases (linked to ORDO)\n", + "print(source_counts)\n", + "\n", + "# Number of HPO annotations per disease\n", + "ann_per_disease = hpoa.groupby(\"database_id\")[\"hpo_id\"].count()\n", + "print(f\"\\nAverage annotations per disease: {ann_per_disease.mean():.2f}\")\n", + "print(f\"Max annotations for one disease: {ann_per_disease.max()}\")\n", + "\n", + "# Plot distribution of annotations per disease\n", + "plt.figure(figsize=(8, 5))\n", + "plt.hist(ann_per_disease, bins=50, color=\"skyblue\", edgecolor=\"black\")\n", + "plt.title(\"Distribution of HPO Annotations per Disease\")\n", + "plt.xlabel(\"Number of HPO annotations\")\n", + "plt.ylabel(\"Number of diseases\")\n", + "plt.show()\n", + "\n", + "# Top diseases with most phenotype annotations\n", + "print(\"\\nTop 10 diseases with most HPO annotations:\")\n", + "print(ann_per_disease.sort_values(ascending=False).head(10))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2", + "metadata": {}, + "outputs": [], + "source": [ + "def print_hpoa_disease(disease_id, df):\n", + " rows = df[df[\"database_id\"] == disease_id]\n", + " \n", + " if rows.empty:\n", + " print(f\"Disease '{disease_id}' not found.\")\n", + " return\n", + " \n", + " print(\"\\n==============================\")\n", + " print(\"HPOA DISEASE OVERVIEW\")\n", + " print(\"==============================\")\n", + " print(f\"Disease ID: {disease_id}\")\n", + " print(f\"Disease name: {rows['disease_name'].iloc[0]}\")\n", + " print(f\"Number of phenotype annotations: {len(rows)}\")\n", + " \n", + " print(\"\\nPhenotypes:\")\n", + " for hp in rows[\"hpo_id\"].head(20):\n", + " print(f\" - {hp}\")\n", + " if len(rows) > 20:\n", + " print(f\" ... ({len(rows)} total)\")\n", + " \n", + " print(\"\\nEvidence codes:\") # Evidence codes indicate how reliable an association is (e.g., clinical observation vs. inferred).\n", + " print(rows[\"evidence\"].value_counts())\n", + " print(\"==============================\\n\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3", + "metadata": {}, + "outputs": [], + "source": [ + "print_hpoa_disease(\"OMIM:154700\", hpoa)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "venv (3.12.13)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.13" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/ontologies/model/load_models_to_local.py b/ontologies/model/load_models_to_local.py index 96f82df..babe490 100644 --- a/ontologies/model/load_models_to_local.py +++ b/ontologies/model/load_models_to_local.py @@ -42,6 +42,7 @@ def main(): "mondo_rare": "https://purl.obolibrary.org/obo/mondo/subsets/mondo-rare.owl", "ordo": "https://www.orphadata.com/data/ontologies/ordo/last_version/ORDO_en_4.8.owl", "hoom": "https://data.bioontology.org/ontologies/HOOM/submissions/13/download?apikey=8b5b7825-538d-40e0-9e9e-5ab9274a9aeb", + "phenotype.hpoa": "https://github.com/obophenotype/human-phenotype-ontology/releases/download/v2023-10-09/phenotype.hpoa" } for name, url in urls.items(): diff --git a/requirements.txt b/requirements.txt index f8b93d4..99e0214 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ appnope==0.1.4 asttokens==3.0.1 +attrs==25.4.0 certifi==2026.2.25 charset-normalizer==3.4.5 comm==0.2.3 @@ -8,6 +9,7 @@ cycler==0.12.1 debugpy==1.8.20 decorator==5.2.1 executing==2.2.1 +fastjsonschema==2.21.2 fonttools==4.62.0 graphviz==0.21 idna==3.11 @@ -17,17 +19,22 @@ ipython_pygments_lexers==1.1.1 jedi==0.19.2 Jinja2==3.1.6 jsonpickle==4.1.1 +jsonschema==4.26.0 +jsonschema-specifications==2025.9.1 jupyter_client==8.8.0 jupyter_core==5.9.1 kiwisolver==1.5.0 MarkupSafe==3.0.3 matplotlib==3.10.8 matplotlib-inline==0.2.1 +nbformat==5.10.4 +nbstripout==0.9.1 nest-asyncio==1.6.0 networkx==3.6.1 numpy==2.4.3 owlready2==0.50 packaging==26.0 +pandas==3.0.1 parso==0.8.6 pexpect==4.9.0 pillow==12.1.1 @@ -41,10 +48,13 @@ pyparsing==3.3.2 python-dateutil==2.9.0.post0 pyvis==0.3.2 pyzmq==27.1.0 +referencing==0.37.0 requests==2.32.5 +rpds-py==0.30.0 six==1.17.0 stack-data==0.6.3 tornado==6.5.5 traitlets==5.14.3 +typing_extensions==4.15.0 urllib3==2.6.3 wcwidth==0.6.0