pyobo 0.11.1__py3-none-any.whl → 0.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pyobo/.DS_Store +0 -0
- pyobo/__init__.py +95 -20
- pyobo/__main__.py +0 -0
- pyobo/api/__init__.py +81 -10
- pyobo/api/alts.py +52 -42
- pyobo/api/combine.py +39 -0
- pyobo/api/edges.py +68 -0
- pyobo/api/hierarchy.py +231 -203
- pyobo/api/metadata.py +14 -19
- pyobo/api/names.py +207 -127
- pyobo/api/properties.py +117 -113
- pyobo/api/relations.py +68 -94
- pyobo/api/species.py +24 -21
- pyobo/api/typedefs.py +11 -11
- pyobo/api/utils.py +66 -13
- pyobo/api/xrefs.py +108 -114
- pyobo/cli/__init__.py +0 -0
- pyobo/cli/cli.py +35 -50
- pyobo/cli/database.py +183 -161
- pyobo/{xrefdb/xrefs_pipeline.py → cli/database_utils.py} +54 -73
- pyobo/cli/lookup.py +163 -195
- pyobo/cli/utils.py +19 -6
- pyobo/constants.py +102 -3
- pyobo/getters.py +196 -118
- pyobo/gilda_utils.py +79 -200
- pyobo/identifier_utils/__init__.py +41 -0
- pyobo/identifier_utils/api.py +296 -0
- pyobo/identifier_utils/model.py +130 -0
- pyobo/identifier_utils/preprocessing.json +812 -0
- pyobo/identifier_utils/preprocessing.py +61 -0
- pyobo/identifier_utils/relations/__init__.py +8 -0
- pyobo/identifier_utils/relations/api.py +162 -0
- pyobo/identifier_utils/relations/data.json +5824 -0
- pyobo/identifier_utils/relations/data_owl.json +57 -0
- pyobo/identifier_utils/relations/data_rdf.json +1 -0
- pyobo/identifier_utils/relations/data_rdfs.json +7 -0
- pyobo/mocks.py +9 -6
- pyobo/ner/__init__.py +9 -0
- pyobo/ner/api.py +72 -0
- pyobo/ner/normalizer.py +33 -0
- pyobo/obographs.py +43 -39
- pyobo/plugins.py +5 -4
- pyobo/py.typed +0 -0
- pyobo/reader.py +1358 -395
- pyobo/reader_utils.py +155 -0
- pyobo/resource_utils.py +42 -22
- pyobo/resources/__init__.py +0 -0
- pyobo/resources/goc.py +75 -0
- pyobo/resources/goc.tsv +188 -0
- pyobo/resources/ncbitaxon.py +4 -5
- pyobo/resources/ncbitaxon.tsv.gz +0 -0
- pyobo/resources/ro.py +3 -2
- pyobo/resources/ro.tsv +0 -0
- pyobo/resources/so.py +0 -0
- pyobo/resources/so.tsv +0 -0
- pyobo/sources/README.md +12 -8
- pyobo/sources/__init__.py +52 -29
- pyobo/sources/agrovoc.py +0 -0
- pyobo/sources/antibodyregistry.py +11 -12
- pyobo/sources/bigg/__init__.py +13 -0
- pyobo/sources/bigg/bigg_compartment.py +81 -0
- pyobo/sources/bigg/bigg_metabolite.py +229 -0
- pyobo/sources/bigg/bigg_model.py +46 -0
- pyobo/sources/bigg/bigg_reaction.py +77 -0
- pyobo/sources/biogrid.py +1 -2
- pyobo/sources/ccle.py +7 -12
- pyobo/sources/cgnc.py +0 -5
- pyobo/sources/chebi.py +1 -1
- pyobo/sources/chembl/__init__.py +9 -0
- pyobo/sources/{chembl.py → chembl/chembl_compound.py} +13 -25
- pyobo/sources/chembl/chembl_target.py +160 -0
- pyobo/sources/civic_gene.py +55 -15
- pyobo/sources/clinicaltrials.py +160 -0
- pyobo/sources/complexportal.py +24 -24
- pyobo/sources/conso.py +14 -22
- pyobo/sources/cpt.py +0 -0
- pyobo/sources/credit.py +1 -9
- pyobo/sources/cvx.py +27 -5
- pyobo/sources/depmap.py +9 -12
- pyobo/sources/dictybase_gene.py +2 -7
- pyobo/sources/drugbank/__init__.py +9 -0
- pyobo/sources/{drugbank.py → drugbank/drugbank.py} +11 -16
- pyobo/sources/{drugbank_salt.py → drugbank/drugbank_salt.py} +3 -8
- pyobo/sources/drugcentral.py +17 -13
- pyobo/sources/expasy.py +31 -34
- pyobo/sources/famplex.py +13 -18
- pyobo/sources/flybase.py +3 -8
- pyobo/sources/gard.py +62 -0
- pyobo/sources/geonames/__init__.py +9 -0
- pyobo/sources/geonames/features.py +28 -0
- pyobo/sources/{geonames.py → geonames/geonames.py} +87 -26
- pyobo/sources/geonames/utils.py +115 -0
- pyobo/sources/gmt_utils.py +6 -7
- pyobo/sources/go.py +20 -13
- pyobo/sources/gtdb.py +154 -0
- pyobo/sources/gwascentral/__init__.py +9 -0
- pyobo/sources/{gwascentral_phenotype.py → gwascentral/gwascentral_phenotype.py} +5 -7
- pyobo/sources/{gwascentral_study.py → gwascentral/gwascentral_study.py} +1 -7
- pyobo/sources/hgnc/__init__.py +9 -0
- pyobo/sources/{hgnc.py → hgnc/hgnc.py} +56 -70
- pyobo/sources/{hgncgenefamily.py → hgnc/hgncgenefamily.py} +8 -18
- pyobo/sources/icd/__init__.py +9 -0
- pyobo/sources/{icd10.py → icd/icd10.py} +35 -37
- pyobo/sources/icd/icd11.py +148 -0
- pyobo/sources/{icd_utils.py → icd/icd_utils.py} +66 -20
- pyobo/sources/interpro.py +4 -9
- pyobo/sources/itis.py +0 -5
- pyobo/sources/kegg/__init__.py +0 -0
- pyobo/sources/kegg/api.py +16 -38
- pyobo/sources/kegg/genes.py +9 -20
- pyobo/sources/kegg/genome.py +1 -7
- pyobo/sources/kegg/pathway.py +9 -21
- pyobo/sources/mesh.py +58 -24
- pyobo/sources/mgi.py +3 -10
- pyobo/sources/mirbase/__init__.py +11 -0
- pyobo/sources/{mirbase.py → mirbase/mirbase.py} +8 -11
- pyobo/sources/{mirbase_constants.py → mirbase/mirbase_constants.py} +0 -0
- pyobo/sources/{mirbase_family.py → mirbase/mirbase_family.py} +4 -8
- pyobo/sources/{mirbase_mature.py → mirbase/mirbase_mature.py} +3 -7
- pyobo/sources/msigdb.py +74 -39
- pyobo/sources/ncbi/__init__.py +9 -0
- pyobo/sources/ncbi/ncbi_gc.py +162 -0
- pyobo/sources/{ncbigene.py → ncbi/ncbigene.py} +18 -19
- pyobo/sources/nih_reporter.py +60 -0
- pyobo/sources/nlm/__init__.py +9 -0
- pyobo/sources/nlm/nlm_catalog.py +48 -0
- pyobo/sources/nlm/nlm_publisher.py +36 -0
- pyobo/sources/nlm/utils.py +116 -0
- pyobo/sources/npass.py +6 -8
- pyobo/sources/omim_ps.py +10 -3
- pyobo/sources/pathbank.py +4 -8
- pyobo/sources/pfam/__init__.py +9 -0
- pyobo/sources/{pfam.py → pfam/pfam.py} +3 -8
- pyobo/sources/{pfam_clan.py → pfam/pfam_clan.py} +2 -7
- pyobo/sources/pharmgkb/__init__.py +15 -0
- pyobo/sources/pharmgkb/pharmgkb_chemical.py +89 -0
- pyobo/sources/pharmgkb/pharmgkb_disease.py +77 -0
- pyobo/sources/pharmgkb/pharmgkb_gene.py +108 -0
- pyobo/sources/pharmgkb/pharmgkb_pathway.py +63 -0
- pyobo/sources/pharmgkb/pharmgkb_variant.py +84 -0
- pyobo/sources/pharmgkb/utils.py +86 -0
- pyobo/sources/pid.py +1 -6
- pyobo/sources/pombase.py +6 -10
- pyobo/sources/pubchem.py +4 -9
- pyobo/sources/reactome.py +5 -11
- pyobo/sources/rgd.py +11 -16
- pyobo/sources/rhea.py +37 -36
- pyobo/sources/ror.py +69 -42
- pyobo/sources/selventa/__init__.py +0 -0
- pyobo/sources/selventa/schem.py +4 -7
- pyobo/sources/selventa/scomp.py +1 -6
- pyobo/sources/selventa/sdis.py +4 -7
- pyobo/sources/selventa/sfam.py +1 -6
- pyobo/sources/sgd.py +6 -11
- pyobo/sources/signor/__init__.py +7 -0
- pyobo/sources/signor/download.py +41 -0
- pyobo/sources/signor/signor_complexes.py +105 -0
- pyobo/sources/slm.py +12 -15
- pyobo/sources/umls/__init__.py +7 -1
- pyobo/sources/umls/__main__.py +0 -0
- pyobo/sources/umls/get_synonym_types.py +20 -4
- pyobo/sources/umls/sty.py +57 -0
- pyobo/sources/umls/synonym_types.tsv +1 -1
- pyobo/sources/umls/umls.py +18 -22
- pyobo/sources/unimod.py +46 -0
- pyobo/sources/uniprot/__init__.py +1 -1
- pyobo/sources/uniprot/uniprot.py +40 -32
- pyobo/sources/uniprot/uniprot_ptm.py +4 -34
- pyobo/sources/utils.py +3 -2
- pyobo/sources/wikipathways.py +7 -10
- pyobo/sources/zfin.py +5 -10
- pyobo/ssg/__init__.py +12 -16
- pyobo/ssg/base.html +0 -0
- pyobo/ssg/index.html +26 -13
- pyobo/ssg/term.html +12 -2
- pyobo/ssg/typedef.html +0 -0
- pyobo/struct/__init__.py +54 -8
- pyobo/struct/functional/__init__.py +1 -0
- pyobo/struct/functional/dsl.py +2572 -0
- pyobo/struct/functional/macros.py +423 -0
- pyobo/struct/functional/obo_to_functional.py +385 -0
- pyobo/struct/functional/ontology.py +270 -0
- pyobo/struct/functional/utils.py +112 -0
- pyobo/struct/reference.py +331 -136
- pyobo/struct/struct.py +1413 -643
- pyobo/struct/struct_utils.py +1078 -0
- pyobo/struct/typedef.py +162 -210
- pyobo/struct/utils.py +12 -5
- pyobo/struct/vocabulary.py +138 -0
- pyobo/utils/__init__.py +0 -0
- pyobo/utils/cache.py +13 -11
- pyobo/utils/io.py +17 -31
- pyobo/utils/iter.py +5 -5
- pyobo/utils/misc.py +41 -53
- pyobo/utils/ndex_utils.py +0 -0
- pyobo/utils/path.py +76 -70
- pyobo/version.py +3 -3
- {pyobo-0.11.1.dist-info → pyobo-0.12.0.dist-info}/METADATA +224 -225
- pyobo-0.12.0.dist-info/RECORD +202 -0
- pyobo-0.12.0.dist-info/WHEEL +4 -0
- {pyobo-0.11.1.dist-info → pyobo-0.12.0.dist-info}/entry_points.txt +1 -0
- {pyobo-0.11.1.dist-info → pyobo-0.12.0.dist-info/licenses}/LICENSE +0 -0
- pyobo/apps/__init__.py +0 -3
- pyobo/apps/cli.py +0 -24
- pyobo/apps/gilda/__init__.py +0 -3
- pyobo/apps/gilda/__main__.py +0 -8
- pyobo/apps/gilda/app.py +0 -48
- pyobo/apps/gilda/cli.py +0 -36
- pyobo/apps/gilda/templates/base.html +0 -33
- pyobo/apps/gilda/templates/home.html +0 -11
- pyobo/apps/gilda/templates/matches.html +0 -32
- pyobo/apps/mapper/__init__.py +0 -3
- pyobo/apps/mapper/__main__.py +0 -11
- pyobo/apps/mapper/cli.py +0 -37
- pyobo/apps/mapper/mapper.py +0 -187
- pyobo/apps/mapper/templates/base.html +0 -35
- pyobo/apps/mapper/templates/mapper_home.html +0 -64
- pyobo/aws.py +0 -162
- pyobo/cli/aws.py +0 -47
- pyobo/identifier_utils.py +0 -142
- pyobo/normalizer.py +0 -232
- pyobo/registries/__init__.py +0 -16
- pyobo/registries/metaregistry.json +0 -507
- pyobo/registries/metaregistry.py +0 -135
- pyobo/sources/icd11.py +0 -105
- pyobo/xrefdb/__init__.py +0 -1
- pyobo/xrefdb/canonicalizer.py +0 -214
- pyobo/xrefdb/priority.py +0 -59
- pyobo/xrefdb/sources/__init__.py +0 -60
- pyobo/xrefdb/sources/biomappings.py +0 -36
- pyobo/xrefdb/sources/cbms2019.py +0 -91
- pyobo/xrefdb/sources/chembl.py +0 -83
- pyobo/xrefdb/sources/compath.py +0 -82
- pyobo/xrefdb/sources/famplex.py +0 -64
- pyobo/xrefdb/sources/gilda.py +0 -50
- pyobo/xrefdb/sources/intact.py +0 -113
- pyobo/xrefdb/sources/ncit.py +0 -133
- pyobo/xrefdb/sources/pubchem.py +0 -27
- pyobo/xrefdb/sources/wikidata.py +0 -116
- pyobo-0.11.1.dist-info/RECORD +0 -173
- pyobo-0.11.1.dist-info/WHEEL +0 -5
- pyobo-0.11.1.dist-info/top_level.txt +0 -1
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"""Reusable configuration."""
|
|
2
|
+
|
|
3
|
+
from typing import TypeVar
|
|
4
|
+
|
|
5
|
+
import curies
|
|
6
|
+
from pydantic import BaseModel, Field
|
|
7
|
+
|
|
8
|
+
__all__ = ["Blacklist", "Rewrites", "Rules"]
|
|
9
|
+
|
|
10
|
+
X = TypeVar("X", bound=curies.Reference)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class Blacklist(BaseModel):
|
|
14
|
+
"""A model for prefix and full blacklists."""
|
|
15
|
+
|
|
16
|
+
full: list[str]
|
|
17
|
+
resource_full: dict[str, list[str]]
|
|
18
|
+
prefix: list[str]
|
|
19
|
+
resource_prefix: dict[str, list[str]]
|
|
20
|
+
suffix: list[str]
|
|
21
|
+
|
|
22
|
+
def _sort(self) -> None:
|
|
23
|
+
self.full.sort()
|
|
24
|
+
self.prefix.sort()
|
|
25
|
+
self.suffix.sort()
|
|
26
|
+
for v in self.resource_full.values():
|
|
27
|
+
v.sort()
|
|
28
|
+
for v in self.resource_prefix.values():
|
|
29
|
+
v.sort()
|
|
30
|
+
|
|
31
|
+
def str_has_blacklisted_prefix(
|
|
32
|
+
self, str_or_curie_or_uri: str, *, ontology_prefix: str | None = None
|
|
33
|
+
) -> bool:
|
|
34
|
+
"""Check if the CURIE string has a blacklisted prefix."""
|
|
35
|
+
if ontology_prefix:
|
|
36
|
+
prefixes: list[str] = self.resource_prefix.get(ontology_prefix, [])
|
|
37
|
+
if prefixes and any(str_or_curie_or_uri.startswith(prefix) for prefix in prefixes):
|
|
38
|
+
return True
|
|
39
|
+
return any(str_or_curie_or_uri.startswith(prefix) for prefix in self.prefix)
|
|
40
|
+
|
|
41
|
+
def str_has_blacklisted_suffix(self, str_or_curie_or_uri: str) -> bool:
|
|
42
|
+
"""Check if the CURIE string has a blacklisted suffix."""
|
|
43
|
+
return any(str_or_curie_or_uri.endswith(suffix) for suffix in self.suffix)
|
|
44
|
+
|
|
45
|
+
def str_is_blacklisted_full(
|
|
46
|
+
self, str_or_curie_or_uri: str, *, ontology_prefix: str | None = None
|
|
47
|
+
) -> bool:
|
|
48
|
+
"""Check if the full CURIE string is blacklisted."""
|
|
49
|
+
if ontology_prefix and str_or_curie_or_uri in self.resource_full.get(
|
|
50
|
+
ontology_prefix, set()
|
|
51
|
+
):
|
|
52
|
+
return True
|
|
53
|
+
return str_or_curie_or_uri in self.full
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class Rewrites(BaseModel):
|
|
57
|
+
"""A model for prefix and full rewrites."""
|
|
58
|
+
|
|
59
|
+
full: dict[str, str] = Field(..., description="Global remappings for an entire string")
|
|
60
|
+
resource_full: dict[str, dict[str, str]] = Field(
|
|
61
|
+
..., description="Resource-keyed remappings for an entire string"
|
|
62
|
+
)
|
|
63
|
+
prefix: dict[str, str] = Field(..., description="Global remappings of just the prefix")
|
|
64
|
+
resource_prefix: dict[str, dict[str, str]] = Field(
|
|
65
|
+
..., description="Resource-keyed remappings for just a prefix"
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
def remap_full(
|
|
69
|
+
self, str_or_curie_or_uri: str, cls: type[X], *, ontology_prefix: str | None = None
|
|
70
|
+
) -> X | None:
|
|
71
|
+
"""Remap the string if possible otherwise return it."""
|
|
72
|
+
if ontology_prefix:
|
|
73
|
+
resource_rewrites: dict[str, str] = self.resource_full.get(ontology_prefix, {})
|
|
74
|
+
if resource_rewrites and str_or_curie_or_uri in resource_rewrites:
|
|
75
|
+
return cls.from_curie(resource_rewrites[str_or_curie_or_uri])
|
|
76
|
+
|
|
77
|
+
if str_or_curie_or_uri in self.full:
|
|
78
|
+
return cls.from_curie(self.full[str_or_curie_or_uri])
|
|
79
|
+
|
|
80
|
+
return None
|
|
81
|
+
|
|
82
|
+
def remap_prefix(self, str_or_curie_or_uri: str, ontology_prefix: str | None = None) -> str:
|
|
83
|
+
"""Remap a prefix."""
|
|
84
|
+
if ontology_prefix is not None:
|
|
85
|
+
for old_prefix, new_prefix in self.resource_prefix.get(ontology_prefix, {}).items():
|
|
86
|
+
if str_or_curie_or_uri.startswith(old_prefix):
|
|
87
|
+
return new_prefix + str_or_curie_or_uri[len(old_prefix) :]
|
|
88
|
+
for old_prefix, new_prefix in self.prefix.items():
|
|
89
|
+
if str_or_curie_or_uri.startswith(old_prefix):
|
|
90
|
+
return new_prefix + str_or_curie_or_uri[len(old_prefix) :]
|
|
91
|
+
return str_or_curie_or_uri
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class Rules(BaseModel):
|
|
95
|
+
"""A model for blacklists and rewrites."""
|
|
96
|
+
|
|
97
|
+
blacklists: Blacklist
|
|
98
|
+
rewrites: Rewrites
|
|
99
|
+
|
|
100
|
+
def str_has_blacklisted_prefix(
|
|
101
|
+
self, str_or_curie_or_uri: str, *, ontology_prefix: str | None = None
|
|
102
|
+
) -> bool:
|
|
103
|
+
"""Check if the CURIE string has a blacklisted prefix."""
|
|
104
|
+
return self.blacklists.str_has_blacklisted_prefix(
|
|
105
|
+
str_or_curie_or_uri, ontology_prefix=ontology_prefix
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
def str_has_blacklisted_suffix(self, str_or_curie_or_uri: str) -> bool:
|
|
109
|
+
"""Check if the CURIE string has a blacklisted suffix."""
|
|
110
|
+
return self.blacklists.str_has_blacklisted_suffix(str_or_curie_or_uri)
|
|
111
|
+
|
|
112
|
+
def str_is_blacklisted_full(
|
|
113
|
+
self, str_or_curie_or_uri: str, *, ontology_prefix: str | None = None
|
|
114
|
+
) -> bool:
|
|
115
|
+
"""Check if the full CURIE string is blacklisted."""
|
|
116
|
+
return self.blacklists.str_is_blacklisted_full(
|
|
117
|
+
str_or_curie_or_uri, ontology_prefix=ontology_prefix
|
|
118
|
+
)
|
|
119
|
+
|
|
120
|
+
def remap_full(
|
|
121
|
+
self, str_or_curie_or_uri: str, cls: type[X], *, ontology_prefix: str | None = None
|
|
122
|
+
) -> X | None:
|
|
123
|
+
"""Remap the string if possible otherwise return it."""
|
|
124
|
+
return self.rewrites.remap_full(
|
|
125
|
+
str_or_curie_or_uri, cls=cls, ontology_prefix=ontology_prefix
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
def remap_prefix(self, str_or_curie_or_uri: str, ontology_prefix: str | None = None) -> str:
|
|
129
|
+
"""Remap a prefix."""
|
|
130
|
+
return self.rewrites.remap_prefix(str_or_curie_or_uri, ontology_prefix=ontology_prefix)
|