pyobo 0.10.5__py3-none-any.whl → 0.10.7__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/__init__.py +1 -0
- pyobo/api/__init__.py +1 -0
- pyobo/api/names.py +21 -0
- pyobo/gilda_utils.py +54 -47
- pyobo/identifier_utils.py +1 -1
- pyobo/obographs.py +12 -4
- pyobo/reader.py +17 -14
- pyobo/sources/__init__.py +4 -0
- pyobo/sources/cgnc.py +2 -1
- pyobo/sources/chembl.py +2 -1
- pyobo/sources/complexportal.py +11 -0
- pyobo/sources/depmap.py +2 -0
- pyobo/sources/drugcentral.py +2 -1
- pyobo/sources/geonames.py +239 -0
- pyobo/sources/hgnc.py +32 -1
- pyobo/sources/mgi.py +3 -1
- pyobo/sources/mirbase.py +2 -0
- pyobo/sources/mirbase_family.py +5 -2
- pyobo/sources/npass.py +4 -2
- pyobo/sources/pombase.py +1 -1
- pyobo/sources/ror.py +163 -0
- pyobo/sources/sgd.py +2 -5
- pyobo/sources/slm.py +6 -6
- pyobo/sources/umls/get_synonym_types.py +36 -0
- pyobo/sources/umls/synonym_types.tsv +243 -242
- pyobo/sources/umls/umls.py +3 -7
- pyobo/sources/uniprot/uniprot.py +5 -5
- pyobo/sources/zfin.py +2 -1
- pyobo/struct/reference.py +17 -2
- pyobo/struct/struct.py +73 -19
- pyobo/struct/typedef.py +30 -7
- pyobo/version.py +1 -1
- {pyobo-0.10.5.dist-info → pyobo-0.10.7.dist-info}/METADATA +2 -2
- {pyobo-0.10.5.dist-info → pyobo-0.10.7.dist-info}/RECORD +38 -35
- {pyobo-0.10.5.dist-info → pyobo-0.10.7.dist-info}/WHEEL +1 -1
- {pyobo-0.10.5.dist-info → pyobo-0.10.7.dist-info}/LICENSE +0 -0
- {pyobo-0.10.5.dist-info → pyobo-0.10.7.dist-info}/entry_points.txt +0 -0
- {pyobo-0.10.5.dist-info → pyobo-0.10.7.dist-info}/top_level.txt +0 -0
pyobo/struct/struct.py
CHANGED
|
@@ -47,6 +47,7 @@ from .typedef import (
|
|
|
47
47
|
exact_match,
|
|
48
48
|
from_species,
|
|
49
49
|
get_reference_tuple,
|
|
50
|
+
has_ontology_root_term,
|
|
50
51
|
has_part,
|
|
51
52
|
is_a,
|
|
52
53
|
orthologous,
|
|
@@ -108,7 +109,7 @@ class Synonym:
|
|
|
108
109
|
def _fp(self) -> str:
|
|
109
110
|
x = f'"{self._escape(self.name)}" {self.specificity}'
|
|
110
111
|
if self.type and self.type.pair != DEFAULT_SYNONYM_TYPE.pair:
|
|
111
|
-
x = f"{x} {self.type.
|
|
112
|
+
x = f"{x} {self.type.preferred_curie}"
|
|
112
113
|
return f"{x} [{comma_separate(self.provenance)}]"
|
|
113
114
|
|
|
114
115
|
@staticmethod
|
|
@@ -125,7 +126,7 @@ class SynonymTypeDef(Referenced):
|
|
|
125
126
|
|
|
126
127
|
def to_obo(self) -> str:
|
|
127
128
|
"""Serialize to OBO."""
|
|
128
|
-
rv = f'synonymtypedef: {self.
|
|
129
|
+
rv = f'synonymtypedef: {self.preferred_curie} "{self.name}"'
|
|
129
130
|
if self.specificity:
|
|
130
131
|
rv = f"{rv} {self.specificity}"
|
|
131
132
|
return rv
|
|
@@ -157,6 +158,11 @@ class SynonymTypeDef(Referenced):
|
|
|
157
158
|
DEFAULT_SYNONYM_TYPE = SynonymTypeDef(
|
|
158
159
|
reference=Reference(prefix="oboInOwl", identifier="SynonymType", name="Synonym"),
|
|
159
160
|
)
|
|
161
|
+
abbreviation = SynonymTypeDef(
|
|
162
|
+
reference=Reference(prefix="OMO", identifier="0003000", name="abbreviation")
|
|
163
|
+
)
|
|
164
|
+
acronym = SynonymTypeDef(reference=Reference(prefix="omo", identifier="0003012", name="acronym"))
|
|
165
|
+
|
|
160
166
|
|
|
161
167
|
ReferenceHint = Union[Reference, "Term", Tuple[str, str], str]
|
|
162
168
|
|
|
@@ -216,6 +222,8 @@ class Term(Referenced):
|
|
|
216
222
|
#: An annotation for obsolescence. By default, is None, but this means that it is not obsolete.
|
|
217
223
|
is_obsolete: Optional[bool] = None
|
|
218
224
|
|
|
225
|
+
type: Literal["Term", "Instance"] = "Term"
|
|
226
|
+
|
|
219
227
|
def __hash__(self): # noqa: D105
|
|
220
228
|
return hash((self.__class__, self.prefix, self.identifier))
|
|
221
229
|
|
|
@@ -226,11 +234,13 @@ class Term(Referenced):
|
|
|
226
234
|
identifier: str,
|
|
227
235
|
name: Optional[str] = None,
|
|
228
236
|
definition: Optional[str] = None,
|
|
237
|
+
**kwargs,
|
|
229
238
|
) -> "Term":
|
|
230
239
|
"""Create a term from a reference."""
|
|
231
240
|
return cls(
|
|
232
241
|
reference=Reference(prefix=prefix, identifier=identifier, name=name),
|
|
233
242
|
definition=definition,
|
|
243
|
+
**kwargs,
|
|
234
244
|
)
|
|
235
245
|
|
|
236
246
|
@classmethod
|
|
@@ -260,11 +270,17 @@ class Term(Referenced):
|
|
|
260
270
|
self.provenance.append(_ensure_ref(reference))
|
|
261
271
|
|
|
262
272
|
def append_synonym(
|
|
263
|
-
self,
|
|
273
|
+
self,
|
|
274
|
+
synonym: Union[str, Synonym],
|
|
275
|
+
*,
|
|
276
|
+
type: Optional[SynonymTypeDef] = None,
|
|
277
|
+
specificity: Optional[SynonymSpecificity] = None,
|
|
264
278
|
) -> None:
|
|
265
279
|
"""Add a synonym."""
|
|
266
280
|
if isinstance(synonym, str):
|
|
267
|
-
synonym = Synonym(
|
|
281
|
+
synonym = Synonym(
|
|
282
|
+
synonym, type=type or DEFAULT_SYNONYM_TYPE, specificity=specificity or "EXACT"
|
|
283
|
+
)
|
|
268
284
|
self.synonyms.append(synonym)
|
|
269
285
|
|
|
270
286
|
def append_alt(self, alt: Union[str, Reference]) -> None:
|
|
@@ -322,7 +338,7 @@ class Term(Referenced):
|
|
|
322
338
|
"""Get relationships from the given type."""
|
|
323
339
|
return self.relationships[typedef]
|
|
324
340
|
|
|
325
|
-
def append_exact_match(self, reference):
|
|
341
|
+
def append_exact_match(self, reference: ReferenceHint):
|
|
326
342
|
"""Append an exact match, also adding an xref."""
|
|
327
343
|
reference = _ensure_ref(reference)
|
|
328
344
|
self.append_relationship(exact_match, reference)
|
|
@@ -363,12 +379,14 @@ class Term(Referenced):
|
|
|
363
379
|
raise ValueError("can not extend a collection that includes a null reference")
|
|
364
380
|
self.relationships[typedef].extend(references)
|
|
365
381
|
|
|
366
|
-
def append_property(
|
|
382
|
+
def append_property(
|
|
383
|
+
self, prop: Union[str, Reference, Referenced], value: Union[str, Reference, Referenced]
|
|
384
|
+
) -> None:
|
|
367
385
|
"""Append a property."""
|
|
368
|
-
if isinstance(prop,
|
|
369
|
-
prop = prop.
|
|
370
|
-
if isinstance(value, Reference):
|
|
371
|
-
value = value.
|
|
386
|
+
if isinstance(prop, (Reference, Referenced)):
|
|
387
|
+
prop = prop.preferred_curie
|
|
388
|
+
if isinstance(value, (Reference, Referenced)):
|
|
389
|
+
value = value.preferred_curie
|
|
372
390
|
self.properties[prop].append(value)
|
|
373
391
|
|
|
374
392
|
def _definition_fp(self) -> str:
|
|
@@ -387,10 +405,12 @@ class Term(Referenced):
|
|
|
387
405
|
for value in values:
|
|
388
406
|
yield prop, value
|
|
389
407
|
|
|
390
|
-
def iterate_obo_lines(self) -> Iterable[str]:
|
|
408
|
+
def iterate_obo_lines(self, *, ontology, typedefs) -> Iterable[str]:
|
|
391
409
|
"""Iterate over the lines to write in an OBO file."""
|
|
392
|
-
yield "\n[
|
|
393
|
-
yield f"id: {self.
|
|
410
|
+
yield f"\n[{self.type}]"
|
|
411
|
+
yield f"id: {self.preferred_curie}"
|
|
412
|
+
if self.is_obsolete:
|
|
413
|
+
yield "is_obsolete: true"
|
|
394
414
|
if self.name:
|
|
395
415
|
yield f"name: {obo_escape_slim(self.name)}"
|
|
396
416
|
if self.namespace and self.namespace != "?":
|
|
@@ -403,14 +423,23 @@ class Term(Referenced):
|
|
|
403
423
|
yield f"def: {self._definition_fp()}"
|
|
404
424
|
|
|
405
425
|
for xref in sorted(self.xrefs, key=attrgetter("prefix", "identifier")):
|
|
406
|
-
yield f"xref: {xref}"
|
|
426
|
+
yield f"xref: {xref}" # __str__ bakes in the ! name
|
|
407
427
|
|
|
428
|
+
parent_tag = "is_a" if self.type == "Term" else "instance_of"
|
|
408
429
|
for parent in sorted(self.parents, key=attrgetter("prefix", "identifier")):
|
|
409
|
-
yield f"
|
|
430
|
+
yield f"{parent_tag}: {parent}" # __str__ bakes in the ! name
|
|
410
431
|
|
|
411
432
|
for typedef, references in sorted(self.relationships.items(), key=_sort_relations):
|
|
433
|
+
if (not typedefs or typedef not in typedefs) and (
|
|
434
|
+
ontology,
|
|
435
|
+
typedef.curie,
|
|
436
|
+
) not in _TYPEDEF_WARNINGS:
|
|
437
|
+
logger.warning(f"[{ontology}] typedef not defined in OBO: {typedef.curie}")
|
|
438
|
+
_TYPEDEF_WARNINGS.add((ontology, typedef.curie))
|
|
439
|
+
|
|
440
|
+
typedef_preferred_curie = typedef.preferred_curie
|
|
412
441
|
for reference in sorted(references, key=attrgetter("prefix", "identifier")):
|
|
413
|
-
s = f"relationship: {
|
|
442
|
+
s = f"relationship: {typedef_preferred_curie} {reference.preferred_curie}"
|
|
414
443
|
if typedef.name or reference.name:
|
|
415
444
|
s += " !"
|
|
416
445
|
if typedef.name:
|
|
@@ -420,6 +449,7 @@ class Term(Referenced):
|
|
|
420
449
|
yield s
|
|
421
450
|
|
|
422
451
|
for prop, value in sorted(self.iterate_properties(), key=_sort_properties):
|
|
452
|
+
# TODO deal with typedefs for properties
|
|
423
453
|
yield f'property_value: {prop} "{value}" xsd:string' # TODO deal with types later
|
|
424
454
|
|
|
425
455
|
for synonym in sorted(self.synonyms, key=attrgetter("name")):
|
|
@@ -430,6 +460,10 @@ class Term(Referenced):
|
|
|
430
460
|
return s.replace("\n", "\\n").replace('"', '\\"')
|
|
431
461
|
|
|
432
462
|
|
|
463
|
+
#: A set of warnings, used to make sure we don't show the same one over and over
|
|
464
|
+
_TYPEDEF_WARNINGS: Set[Tuple[str, str]] = set()
|
|
465
|
+
|
|
466
|
+
|
|
433
467
|
def _sort_relations(r):
|
|
434
468
|
typedef, _references = r
|
|
435
469
|
return typedef.reference.name or typedef.reference.identifier
|
|
@@ -632,6 +666,8 @@ class Obo:
|
|
|
632
666
|
yield f"idspace: {prefix} {url}"
|
|
633
667
|
|
|
634
668
|
for synonym_typedef in sorted((self.synonym_typedefs or []), key=attrgetter("curie")):
|
|
669
|
+
if synonym_typedef.curie == DEFAULT_SYNONYM_TYPE.curie:
|
|
670
|
+
continue
|
|
635
671
|
yield synonym_typedef.to_obo()
|
|
636
672
|
|
|
637
673
|
yield f"ontology: {self.ontology}"
|
|
@@ -639,15 +675,23 @@ class Obo:
|
|
|
639
675
|
if self.name is None:
|
|
640
676
|
raise ValueError("ontology is missing name")
|
|
641
677
|
yield f'property_value: http://purl.org/dc/elements/1.1/title "{self.name}" xsd:string'
|
|
678
|
+
license_spdx_id = bioregistry.get_license(self.ontology)
|
|
679
|
+
if license_spdx_id:
|
|
680
|
+
# TODO add SPDX to idspaces and use as a CURIE?
|
|
681
|
+
yield f'property_value: http://purl.org/dc/terms/license "{license_spdx_id}" xsd:string'
|
|
682
|
+
description = bioregistry.get_description(self.ontology)
|
|
683
|
+
if description:
|
|
684
|
+
description = obo_escape_slim(description.strip())
|
|
685
|
+
yield f'property_value: http://purl.org/dc/elements/1.1/description "{description}" xsd:string'
|
|
642
686
|
|
|
643
687
|
for root_term in self.root_terms or []:
|
|
644
|
-
yield f"property_value:
|
|
688
|
+
yield f"property_value: {has_ontology_root_term.preferred_curie} {root_term.preferred_curie}"
|
|
645
689
|
|
|
646
690
|
for typedef in sorted(self.typedefs or [], key=attrgetter("curie")):
|
|
647
691
|
yield from typedef.iterate_obo_lines()
|
|
648
692
|
|
|
649
693
|
for term in self:
|
|
650
|
-
yield from term.iterate_obo_lines()
|
|
694
|
+
yield from term.iterate_obo_lines(ontology=self.ontology, typedefs=self.typedefs)
|
|
651
695
|
|
|
652
696
|
def write_obo(
|
|
653
697
|
self, file: Union[None, str, TextIO, Path] = None, use_tqdm: bool = False
|
|
@@ -992,6 +1036,16 @@ class Obo:
|
|
|
992
1036
|
"""Get a mapping from identifiers to definitions."""
|
|
993
1037
|
return dict(self.iterate_id_definition(use_tqdm=use_tqdm))
|
|
994
1038
|
|
|
1039
|
+
def get_obsolete(self, *, use_tqdm: bool = False) -> Set[str]:
|
|
1040
|
+
"""Get the set of obsolete identifiers."""
|
|
1041
|
+
return {
|
|
1042
|
+
term.identifier
|
|
1043
|
+
for term in self._iter_terms(
|
|
1044
|
+
use_tqdm=use_tqdm, desc=f"[{self.ontology}] getting obsolete"
|
|
1045
|
+
)
|
|
1046
|
+
if term.identifier and term.is_obsolete
|
|
1047
|
+
}
|
|
1048
|
+
|
|
995
1049
|
############
|
|
996
1050
|
# TYPEDEFS #
|
|
997
1051
|
############
|
|
@@ -1416,4 +1470,4 @@ def _convert_synonym_typedefs(synonym_typedefs: Optional[Iterable[SynonymTypeDef
|
|
|
1416
1470
|
|
|
1417
1471
|
|
|
1418
1472
|
def _convert_synonym_typedef(synonym_typedef: SynonymTypeDef) -> str:
|
|
1419
|
-
return f'{synonym_typedef.
|
|
1473
|
+
return f'{synonym_typedef.preferred_curie} "{synonym_typedef.name}"'
|
pyobo/struct/typedef.py
CHANGED
|
@@ -40,6 +40,9 @@ __all__ = [
|
|
|
40
40
|
"enables",
|
|
41
41
|
"participates_in",
|
|
42
42
|
"has_participant",
|
|
43
|
+
"exact_match",
|
|
44
|
+
"has_dbxref",
|
|
45
|
+
# Properties
|
|
43
46
|
"has_inchi",
|
|
44
47
|
"has_smiles",
|
|
45
48
|
]
|
|
@@ -47,7 +50,10 @@ __all__ = [
|
|
|
47
50
|
|
|
48
51
|
@dataclass
|
|
49
52
|
class TypeDef(Referenced):
|
|
50
|
-
"""A type definition in OBO.
|
|
53
|
+
"""A type definition in OBO.
|
|
54
|
+
|
|
55
|
+
See the subsection of https://owlcollab.github.io/oboformat/doc/GO.format.obo-1_4.html#S.2.2.
|
|
56
|
+
"""
|
|
51
57
|
|
|
52
58
|
reference: Reference
|
|
53
59
|
comment: Optional[str] = None
|
|
@@ -75,7 +81,7 @@ class TypeDef(Referenced):
|
|
|
75
81
|
def iterate_obo_lines(self) -> Iterable[str]:
|
|
76
82
|
"""Iterate over the lines to write in an OBO file."""
|
|
77
83
|
yield "\n[Typedef]"
|
|
78
|
-
yield f"id: {self.reference.
|
|
84
|
+
yield f"id: {self.reference.preferred_curie}"
|
|
79
85
|
if self.name:
|
|
80
86
|
yield f"name: {self.reference.name}"
|
|
81
87
|
if self.definition:
|
|
@@ -94,7 +100,7 @@ class TypeDef(Referenced):
|
|
|
94
100
|
yield f"comment: {self.comment}"
|
|
95
101
|
|
|
96
102
|
for xref in self.xrefs:
|
|
97
|
-
yield f"xref: {xref}"
|
|
103
|
+
yield f"xref: {xref.preferred_curie}"
|
|
98
104
|
|
|
99
105
|
if self.is_transitive is not None:
|
|
100
106
|
yield f'is_transitive: {"true" if self.is_transitive else "false"}'
|
|
@@ -102,9 +108,11 @@ class TypeDef(Referenced):
|
|
|
102
108
|
if self.is_symmetric is not None:
|
|
103
109
|
yield f'is_symmetric: {"true" if self.is_symmetric else "false"}'
|
|
104
110
|
if self.holds_over_chain:
|
|
105
|
-
_chain = " ".join(link.
|
|
111
|
+
_chain = " ".join(link.preferred_curie for link in self.holds_over_chain)
|
|
106
112
|
_names = " / ".join(link.name or "_" for link in self.holds_over_chain)
|
|
107
113
|
yield f"holds_over_chain: {_chain} ! {_names}"
|
|
114
|
+
if self.inverse:
|
|
115
|
+
yield f"inverse_of: {self.inverse}"
|
|
108
116
|
|
|
109
117
|
@classmethod
|
|
110
118
|
def from_triple(cls, prefix: str, identifier: str, name: Optional[str] = None) -> "TypeDef":
|
|
@@ -261,9 +269,24 @@ has_salt = TypeDef(
|
|
|
261
269
|
reference=Reference(prefix="debio", identifier="0000006", name="has salt"),
|
|
262
270
|
)
|
|
263
271
|
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
272
|
+
term_replaced_by = TypeDef.from_triple(
|
|
273
|
+
prefix=IAO_PREFIX, identifier="0100001", name="term replaced by"
|
|
274
|
+
)
|
|
275
|
+
example_of_usage = TypeDef.from_triple(
|
|
276
|
+
prefix=IAO_PREFIX, identifier="0000112", name="example of usage"
|
|
277
|
+
)
|
|
278
|
+
alternative_term = TypeDef.from_triple(
|
|
279
|
+
prefix=IAO_PREFIX, identifier="0000118", name="alternative term"
|
|
280
|
+
)
|
|
281
|
+
has_ontology_root_term = TypeDef.from_triple(
|
|
282
|
+
prefix=IAO_PREFIX, identifier="0000700", name="has ontology root term"
|
|
283
|
+
)
|
|
284
|
+
definition_source = TypeDef.from_triple(
|
|
285
|
+
prefix=IAO_PREFIX, identifier="0000119", name="definition source"
|
|
286
|
+
)
|
|
287
|
+
has_dbxref = TypeDef.from_curie("oboInOwl:hasDbXref", name="has database cross-reference")
|
|
288
|
+
|
|
289
|
+
editor_note = TypeDef.from_triple(prefix=IAO_PREFIX, identifier="0000116", name="editor note")
|
|
267
290
|
|
|
268
291
|
is_immediately_transformed_from = TypeDef.from_triple(
|
|
269
292
|
prefix=SIO_PREFIX, identifier="000658", name="is immediately transformed from"
|
pyobo/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyobo
|
|
3
|
-
Version: 0.10.
|
|
3
|
+
Version: 0.10.7
|
|
4
4
|
Summary: Handling and writing OBO
|
|
5
5
|
Home-page: https://github.com/pyobo/pyobo
|
|
6
6
|
Download-URL: https://github.com/pyobo/pyobo/releases
|
|
@@ -49,7 +49,7 @@ Requires-Dist: class-resolver
|
|
|
49
49
|
Requires-Dist: psycopg2-binary
|
|
50
50
|
Requires-Dist: drugbank-downloader
|
|
51
51
|
Requires-Dist: chembl-downloader
|
|
52
|
-
Requires-Dist: umls-downloader
|
|
52
|
+
Requires-Dist: umls-downloader >=0.1.2
|
|
53
53
|
Requires-Dist: typing-extensions
|
|
54
54
|
Provides-Extra: agrovoc
|
|
55
55
|
Requires-Dist: rdflib ; extra == 'agrovoc'
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
pyobo/__init__.py,sha256=
|
|
1
|
+
pyobo/__init__.py,sha256=mZ96iZ-5ucxe2eLBi0xuSKaa2ZfeInaSR5Ajc_NkvUo,1862
|
|
2
2
|
pyobo/__main__.py,sha256=cQjBabQ2wlFKcv54PFdt0SgPXNeb3oWneuOHaBgHx1Q,108
|
|
3
3
|
pyobo/aws.py,sha256=EUXsN_sQEOWOV2oZXrVrkO8R6Zo_JJHGeGzzWWgpvzo,5948
|
|
4
4
|
pyobo/constants.py,sha256=gj8xSUmCO0rU-eGXHOW7Vix3SAHl50cLAM3HXuoAFt4,2200
|
|
5
5
|
pyobo/getters.py,sha256=PFKV03izOK8wIU9CpZVRKgu5x-Mqnl39Kzo_bVPs8cs,15528
|
|
6
|
-
pyobo/gilda_utils.py,sha256=
|
|
7
|
-
pyobo/identifier_utils.py,sha256=
|
|
6
|
+
pyobo/gilda_utils.py,sha256=XNgtk41hp1gMJjlmthMp9SQ0gLrVrjWZ4AUC9-lR4bU,6850
|
|
7
|
+
pyobo/identifier_utils.py,sha256=y4eFbJJQGoGe0HKRqQoUc_3tani22W_K4z7OZFL6Z0E,3659
|
|
8
8
|
pyobo/mocks.py,sha256=R-4W3Rm5NarIHfNjxurbvBYsLHXt6jmDb6THMUt6K1w,2432
|
|
9
9
|
pyobo/normalizer.py,sha256=OHME2CDQSZYSbqmP-L_-4nxete9W9mtAjUzXVs1hnjU,8293
|
|
10
|
-
pyobo/obographs.py,sha256=
|
|
10
|
+
pyobo/obographs.py,sha256=JKE0a7e-gmxqdJoeX2zb_xQ6Tv5PAe60YhnIpAvrrYg,3758
|
|
11
11
|
pyobo/plugins.py,sha256=dXWGoFuQktNeQUWSJlPz2a7FeLysggc9ry6auEZdw98,1227
|
|
12
|
-
pyobo/reader.py,sha256=
|
|
12
|
+
pyobo/reader.py,sha256=3VTWQMmA-AHi3RdA2jb48d2deXO-lYKqXbcMa9Qhi_4,21271
|
|
13
13
|
pyobo/resource_utils.py,sha256=JBcJRihZhNwp78-qWZPrzSCGoYfyOjzBwMkfmOkO_no,4289
|
|
14
|
-
pyobo/version.py,sha256=
|
|
15
|
-
pyobo/api/__init__.py,sha256=
|
|
14
|
+
pyobo/version.py,sha256=4zWbRnfTzmpe4izKe0mVCjyI8gxa0fCIboUcmzf12Tg,977
|
|
15
|
+
pyobo/api/__init__.py,sha256=Hq8p5uPW8fFYG2KfLqUsHhtLkTPqE4TqItGkedZzvXM,1326
|
|
16
16
|
pyobo/api/alts.py,sha256=xmAb-gGQCJ9MbaFvoNK6E-V0B3TV9hxulkfbkHIvOso,2617
|
|
17
17
|
pyobo/api/hierarchy.py,sha256=TBZs6SqG1wBP3026D7_bsznH-PAXeM2t1Onwb6_10R4,9010
|
|
18
18
|
pyobo/api/metadata.py,sha256=62E7j0ZW3vYK2Rh-R7NCMKnChbYjZwPjVDoaE1AsCOc,1070
|
|
19
|
-
pyobo/api/names.py,sha256=
|
|
19
|
+
pyobo/api/names.py,sha256=A5HprOfdt7twF2LfjdQQaIj3FNj4_GD7MZ7CrKllY5M,7559
|
|
20
20
|
pyobo/api/properties.py,sha256=PTCYsYmma3cym-dYY44p2NVGD7Z1dKZdC1otcfUflqg,7342
|
|
21
21
|
pyobo/api/relations.py,sha256=VEQCQjPamehyGaL-wFzUYH9OeVq9pVzj70sl9K3ttKw,5996
|
|
22
22
|
pyobo/api/species.py,sha256=xRPRoD6n1wcDaqlC_tHLw3rKMWa4razWsSPNa228g_4,2181
|
|
@@ -52,31 +52,32 @@ pyobo/resources/ncbitaxon.py,sha256=kyJDMGm8qIpIpckN6NSGovCBDacG1qGYTIpvJ--HXhM,
|
|
|
52
52
|
pyobo/resources/ncbitaxon.tsv.gz,sha256=43zHjnVt62TA4_lV58X-FCPdMDfLg1B1PvZSr_Xy9hY,22981954
|
|
53
53
|
pyobo/resources/ro.py,sha256=_CYD90vftMZvu8Rj6H9kOiw6wRBbs1LWmCl-HToxMIg,1484
|
|
54
54
|
pyobo/resources/ro.tsv,sha256=YvlBLPAKy2w4IheYzO9ox1Yg6WkHdMVzMQTikIlECog,26586
|
|
55
|
-
pyobo/sources/__init__.py,sha256=
|
|
55
|
+
pyobo/sources/__init__.py,sha256=vWzTP4kraQulrA4h2NTAhsjouehsEj0hQBwpqLypXSs,3666
|
|
56
56
|
pyobo/sources/agrovoc.py,sha256=J425AyyOVAeqeyN5MhmAR9OtJom41GDvKArfyz1iIU8,795
|
|
57
57
|
pyobo/sources/antibodyregistry.py,sha256=5i2qRhGgyi11Ke9xrHU1NRFxD3xMCnHQWWKh9fQCXDs,3178
|
|
58
58
|
pyobo/sources/biogrid.py,sha256=Rr5gSLmOK95YPm2cYcFbGLDm3LWNckLvlarmbSIP-5M,3290
|
|
59
59
|
pyobo/sources/ccle.py,sha256=KqqVokOq0HYE980plNa3987O1ixLkpcC0j9rYoQIM70,2963
|
|
60
|
-
pyobo/sources/cgnc.py,sha256=
|
|
60
|
+
pyobo/sources/cgnc.py,sha256=5epG5LK9RWMAUp2pL7rvd-5A-QPloqCNjw1MxHn6x-c,2308
|
|
61
61
|
pyobo/sources/chebi.py,sha256=YSxLIV90P-AhQCq9q0AKzWwBgr_BgnxScUW-5AjY2DA,1198
|
|
62
|
-
pyobo/sources/chembl.py,sha256=
|
|
63
|
-
pyobo/sources/complexportal.py,sha256=
|
|
62
|
+
pyobo/sources/chembl.py,sha256=MG_bTilUwhhkeuTA3owLn1gro1QicMyGGfcd-48NGgE,2296
|
|
63
|
+
pyobo/sources/complexportal.py,sha256=nhEaUzw4riuN31OLiwpGffj66YMCeLigekblTWGk3nk,6022
|
|
64
64
|
pyobo/sources/conso.py,sha256=ZLQ_T5EgrcuX9q6kCBKCwfGzAEVxgN6xADl-LKzJtbk,2460
|
|
65
65
|
pyobo/sources/cpt.py,sha256=x8P15D9UX5Fwf6bmeVsU1DAFJvZ22rxVPy5ur-GUk_Q,1482
|
|
66
66
|
pyobo/sources/cvx.py,sha256=Jo9b2S7lGfY8YyVIyoBLbOBn47LiUA3IcMFOD4L2j_k,2195
|
|
67
|
-
pyobo/sources/depmap.py,sha256=
|
|
67
|
+
pyobo/sources/depmap.py,sha256=VuZduDgCduiAHPLwPDXgWpxhMSOZCC4UsxFdj7hNkYQ,3656
|
|
68
68
|
pyobo/sources/dictybase_gene.py,sha256=EgWBwUZ83ev7x5Lp_nUkgSq2zumkDjJ7_13m3f6kJz0,2564
|
|
69
69
|
pyobo/sources/drugbank.py,sha256=pb2IdVQF4FqDvefwRdqlDV5j6pR9R1b3rGxHC-GSWb4,11028
|
|
70
70
|
pyobo/sources/drugbank_salt.py,sha256=hx16G41mP2KXT4fsAQRCRkJMGn-z5cafs-bwm4wMtwo,1783
|
|
71
|
-
pyobo/sources/drugcentral.py,sha256=
|
|
71
|
+
pyobo/sources/drugcentral.py,sha256=05mGolBIyKCxAYzpH9LY_ZQrTVnizup2JUiWi2wW9OI,3587
|
|
72
72
|
pyobo/sources/expasy.py,sha256=h8RcFtRd4wHBDVHC7tK8C1dT2M0dCknhfoWao7DLOx4,9507
|
|
73
73
|
pyobo/sources/famplex.py,sha256=O5-pUBsT-GMedAAoTkZDnpNdWDFIf4NnZwXSv7qXWaA,5784
|
|
74
74
|
pyobo/sources/flybase.py,sha256=0-BCNsp-L-CgGPN9VdJec6-8e4-fJuzaZAZiNra3ZUQ,5768
|
|
75
|
+
pyobo/sources/geonames.py,sha256=XpSc-_6653MrjunVJhqbHHLtkT8kmbJZzfRuF6DoWU8,7929
|
|
75
76
|
pyobo/sources/gmt_utils.py,sha256=NAWyUZ1p1HcO8RPL9mEEcL9KoaBDPuU-tbyG2QLb98k,1401
|
|
76
77
|
pyobo/sources/go.py,sha256=IJul9eAXxKifZiWKJL1Dl9PFDFdoPMQ0ZVydzhnRtX0,1275
|
|
77
78
|
pyobo/sources/gwascentral_phenotype.py,sha256=dCzyw_jbmhol69Li0g2ocMQJRqjoV2fZM_pno6i7xyA,1889
|
|
78
79
|
pyobo/sources/gwascentral_study.py,sha256=_YH9TRWsCOHjOrJ2pAqQ7fi_HmF1WbMmTUj5iqWDUwY,2812
|
|
79
|
-
pyobo/sources/hgnc.py,sha256=
|
|
80
|
+
pyobo/sources/hgnc.py,sha256=kVxVIv4LIy_H_rvVQbwvj3Jn6KmLwpk-XRn5jkpnjN4,15951
|
|
80
81
|
pyobo/sources/hgncgenefamily.py,sha256=o7gCI5raXkCMr8ONfAZpRW7PtsZ8lkRC4T1kEjTxBn4,3645
|
|
81
82
|
pyobo/sources/icd10.py,sha256=KhenR1U8LvZQF97mRZIoSEE_daKcJ2hTJ41BQU7SNuM,2286
|
|
82
83
|
pyobo/sources/icd11.py,sha256=04nLt-Lr64hAroOLH4OP-iNbuIjBk-mYcg-Ib34zgMM,2834
|
|
@@ -84,28 +85,29 @@ pyobo/sources/icd_utils.py,sha256=c1Xkk9YAyKQ-vvnPud5GKq5ygZVbd1j0NFSml3RjQZ0,31
|
|
|
84
85
|
pyobo/sources/interpro.py,sha256=sWla5FDOkzA8elzeNHXOMD0nEVIbNK7jg4UZ0Zp7BfI,4934
|
|
85
86
|
pyobo/sources/itis.py,sha256=LXS4MTL7OMmdfo-ypoF75UJkePw7VnHDrgq10RF_VUk,2967
|
|
86
87
|
pyobo/sources/mesh.py,sha256=2vpfF_85fQqdOORha0ekZJ4gifAV1HDNyo5y6arSmjE,11103
|
|
87
|
-
pyobo/sources/mgi.py,sha256=
|
|
88
|
-
pyobo/sources/mirbase.py,sha256=
|
|
88
|
+
pyobo/sources/mgi.py,sha256=c0CiiH_LolAFdHPNu1lpLeAzHq20wVLyOrLRTkLYxhY,5766
|
|
89
|
+
pyobo/sources/mirbase.py,sha256=NMqZfT7CbbetqCV-KdGjHJmz2uM5QvdF_M1BxKi1ZCw,6349
|
|
89
90
|
pyobo/sources/mirbase_constants.py,sha256=X7KhJDp1saGrdBwUR9fQSWwebzns5f-mEF4qWSETs2k,2023
|
|
90
|
-
pyobo/sources/mirbase_family.py,sha256=
|
|
91
|
+
pyobo/sources/mirbase_family.py,sha256=Yj3oXaeBWDxcmBKnvOl0q_7nzlye5EXhSJPWlV3YpT8,2167
|
|
91
92
|
pyobo/sources/mirbase_mature.py,sha256=nvWcQVDMBucPu6v5DLFb_W_9fz_J_Id7HZrilkUhaFI,1504
|
|
92
93
|
pyobo/sources/msigdb.py,sha256=YKgFyPgYKdYQtu22P69IVyLeBsLfgNyaNOl7q0Sy8IU,5019
|
|
93
94
|
pyobo/sources/ncbigene.py,sha256=FXGwSrnPSQREiF2k3qtZvRBEiung3bbVb-NAJv33uHU,4890
|
|
94
|
-
pyobo/sources/npass.py,sha256=
|
|
95
|
+
pyobo/sources/npass.py,sha256=t8TDdxpfvvXYo8VczT4ngoSspPAdPJuLKigvHZ9OHrE,2805
|
|
95
96
|
pyobo/sources/pathbank.py,sha256=yhdS4BCbGxQf0o3HCGzL2cYRY7zyvHvDzzSBkkezoog,4989
|
|
96
97
|
pyobo/sources/pfam.py,sha256=aHXdXmoG6xyNkScHft_xYe4J2DzRr22EinyfjpmwEj4,1846
|
|
97
98
|
pyobo/sources/pfam_clan.py,sha256=hjJ0UUEcrNoaQVWbXZ_EaTWFo4iB9VG9Sp6pcO90gxY,1340
|
|
98
99
|
pyobo/sources/pid.py,sha256=ZEbiYpbZL9_aOCEJWw0I3H5f7Q2RhQuNy5PUZfs0orU,4570
|
|
99
|
-
pyobo/sources/pombase.py,sha256=
|
|
100
|
+
pyobo/sources/pombase.py,sha256=nRMxk2FuQZv6KnL8LBxqZbVtvynvneLe39i5V3dYAtw,3601
|
|
100
101
|
pyobo/sources/pubchem.py,sha256=arIX53mvCWRghLJkeh9iTPUU_lQJ8SSTm-pOK8KBqbE,5289
|
|
101
102
|
pyobo/sources/reactome.py,sha256=H-hMMrbf2mElOLDu_hYZgurYLYTZvrQ7E1dyvaWKvSM,5084
|
|
102
103
|
pyobo/sources/rgd.py,sha256=CbtDDIrBQ7ZA0GK6BcorxYBeaJazo3D1gMot588cA0E,5397
|
|
103
104
|
pyobo/sources/rhea.py,sha256=YZBFB6JLzHv6_bnCH5XZruJpwUaFaiH206oxE0THr0M,4109
|
|
104
|
-
pyobo/sources/
|
|
105
|
-
pyobo/sources/
|
|
105
|
+
pyobo/sources/ror.py,sha256=g4UxcEYJ4RW_imqna3T6GnAxRp058L7MJFDmZjstYdo,6123
|
|
106
|
+
pyobo/sources/sgd.py,sha256=DOcRxEJGrHEOsaIiWat2x9ER2HnfnU3l8lqr3IktblA,2150
|
|
107
|
+
pyobo/sources/slm.py,sha256=ai_Zp0tqBIanMZ7q7b5x6w9KdTTCEqA4PhX0ToaF594,3804
|
|
106
108
|
pyobo/sources/utils.py,sha256=tmCGXGxHVrYkS5E1-k2SZqL8H4Tv8dFrkoIEJ0xzVmQ,1119
|
|
107
109
|
pyobo/sources/wikipathways.py,sha256=ZNi3lGQ4HbJIBpIq3IMvjiYuvWPuqPysjs8TB6kMxu4,2726
|
|
108
|
-
pyobo/sources/zfin.py,sha256=
|
|
110
|
+
pyobo/sources/zfin.py,sha256=qB251aocDsZeHCE4i9wIZuWTfpv3lYuzEz5zK1zvgGE,4996
|
|
109
111
|
pyobo/sources/kegg/__init__.py,sha256=g0Ui2giVNV_y8LYWJEz-1TIcp_NY8YWDuwHORw4RmKk,244
|
|
110
112
|
pyobo/sources/kegg/api.py,sha256=CBTO72PIfLh6ZczDrPBDtnxEkuXN9_DCgXqQo6CNwQQ,4721
|
|
111
113
|
pyobo/sources/kegg/genes.py,sha256=i0OOtso4bU1bz9UVckvsMGQ8DvJnQDhOSoHqv1wmqPc,3705
|
|
@@ -118,10 +120,11 @@ pyobo/sources/selventa/sdis.py,sha256=5LRPNHJonDZ2aojg6juTsBNbGKv55k8dtFex9LHYDd
|
|
|
118
120
|
pyobo/sources/selventa/sfam.py,sha256=F9HzH_OZucofsAkOkvinyoiUmnw3_0pBMB7pgU9fSZg,1620
|
|
119
121
|
pyobo/sources/umls/__init__.py,sha256=L49nPxoXFtFHwzP327cEOTr1oJrKAz7_nS2tahajpnY,104
|
|
120
122
|
pyobo/sources/umls/__main__.py,sha256=mz2UqO02rnA68XM3420Nev4yocBn20QFSqU3E0oqNx8,133
|
|
121
|
-
pyobo/sources/umls/
|
|
122
|
-
pyobo/sources/umls/
|
|
123
|
+
pyobo/sources/umls/get_synonym_types.py,sha256=5u1ZEl8gp_StuQxrasvHK4S0DyVWdgp_rLzo3aFOALI,1111
|
|
124
|
+
pyobo/sources/umls/synonym_types.tsv,sha256=z--ngeAqA_Kk8ft2YD8qOU_XUxhnTxF0OhL8jRd5xqo,8551
|
|
125
|
+
pyobo/sources/umls/umls.py,sha256=nCeUPTJyKKs7K5Yft2ZSgVXaC6sCau0387AVzDXzXk0,3730
|
|
123
126
|
pyobo/sources/uniprot/__init__.py,sha256=dsL0BvfMn3O_swtNhzQpjJUlP56NUBCcjSYdFvRlwmI,225
|
|
124
|
-
pyobo/sources/uniprot/uniprot.py,sha256=
|
|
127
|
+
pyobo/sources/uniprot/uniprot.py,sha256=tJqSubCTMBfFkIRQxXqzVGlS7PTCrA9c_0mofjAFmj8,2557
|
|
125
128
|
pyobo/sources/uniprot/uniprot_ptm.py,sha256=ze1cf0_kkqslhS-lXa7EdfasV4reUDp6niJat6yymT8,3551
|
|
126
129
|
pyobo/ssg/__init__.py,sha256=Q5vYmk1LZwriShmA3TcYZ1Z1yiyjTWItcGxep5Fi2pw,5390
|
|
127
130
|
pyobo/ssg/base.html,sha256=_vldUCa-gL2YTNY6GgAuxNT3TgaED585vF_q7TrrjYs,2844
|
|
@@ -129,9 +132,9 @@ pyobo/ssg/index.html,sha256=zDGkwIQBtbpnhCYALXQ0vr7qsVmAqDtbwOyPqU3hZ8s,3993
|
|
|
129
132
|
pyobo/ssg/term.html,sha256=QU6piGOq4dq8zlNhJvLFxqFjhVQyWlkiG31I0Sg5frg,3559
|
|
130
133
|
pyobo/ssg/typedef.html,sha256=KrdqzB6xjt689bG33D26AL-11JrvNuEkoxNNI-EG-Tg,2038
|
|
131
134
|
pyobo/struct/__init__.py,sha256=imJ-ffEGBI8f_kSbmDC-VQMCZksLxoHh7OjwvF4chwM,653
|
|
132
|
-
pyobo/struct/reference.py,sha256=
|
|
133
|
-
pyobo/struct/struct.py,sha256=
|
|
134
|
-
pyobo/struct/typedef.py,sha256=
|
|
135
|
+
pyobo/struct/reference.py,sha256=U2qHIANj_0XhSxh7UBaXUiOXWtVjtyIBeDQ03heWuxA,5712
|
|
136
|
+
pyobo/struct/struct.py,sha256=_azCiXAQwRObLpZMPrX0BJWm3Xscx-WKrEvUOOJQyxA,54085
|
|
137
|
+
pyobo/struct/typedef.py,sha256=pkowFqTdJrrg61Du86i2JGERnMHerFoQSx690HO2DS4,12268
|
|
135
138
|
pyobo/struct/utils.py,sha256=-XHuCETp7jPNhjHCW72gikaKoaiTPTNhDK5BZYyJsVw,815
|
|
136
139
|
pyobo/utils/__init__.py,sha256=wXtcjcasWRBtJdTSMCC3jT8yFG8ZkQC-Xdh9lLiQDAo,42
|
|
137
140
|
pyobo/utils/cache.py,sha256=bmuEE0DyppY6szNEzkS1tLLKfsLIrHQFhp0P-q94KFs,2677
|
|
@@ -156,9 +159,9 @@ pyobo/xrefdb/sources/intact.py,sha256=F0z6WrOwI79aZSuM5MsvQwzqoyzh9J0UuB4Mseoj9X
|
|
|
156
159
|
pyobo/xrefdb/sources/ncit.py,sha256=unoIKJqdcfitTc6pU9P1SxJ1w8ax0iDjvEOlqe64nCY,3745
|
|
157
160
|
pyobo/xrefdb/sources/pubchem.py,sha256=GaqgqtSV-T_P-900nL3alPx_ZB36MlmnEepOnZMONA4,780
|
|
158
161
|
pyobo/xrefdb/sources/wikidata.py,sha256=ODi87EMsE3pJKkZTmaOgjbxsHFgqROGsZ6r0w2gbHC8,3351
|
|
159
|
-
pyobo-0.10.
|
|
160
|
-
pyobo-0.10.
|
|
161
|
-
pyobo-0.10.
|
|
162
|
-
pyobo-0.10.
|
|
163
|
-
pyobo-0.10.
|
|
164
|
-
pyobo-0.10.
|
|
162
|
+
pyobo-0.10.7.dist-info/LICENSE,sha256=GRbxxtZEWtZiFGDENk1gntCQK4HEJYYbylEJEwpSLao,1076
|
|
163
|
+
pyobo-0.10.7.dist-info/METADATA,sha256=zIGpoqFqNW8k0hloMp_GTs6LcS4F0NAnxVgyhj4aiLM,20045
|
|
164
|
+
pyobo-0.10.7.dist-info/WHEEL,sha256=Xo9-1PvkuimrydujYJAjF7pCkriuXBpUPEjma1nZyJ0,92
|
|
165
|
+
pyobo-0.10.7.dist-info/entry_points.txt,sha256=Du5V6qw_T917Z5ZoMhLTTJoolK7kkVuUWkdE7aJWea0,669
|
|
166
|
+
pyobo-0.10.7.dist-info/top_level.txt,sha256=oVdkT-pbiGoSdGSQplXFuP1KQGJNf4GdRC65jn6y9t0,6
|
|
167
|
+
pyobo-0.10.7.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|