pyobo 0.10.11__py3-none-any.whl → 0.10.12__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/sources/ror.py CHANGED
@@ -1,34 +1,40 @@
1
1
  """Convert the Research Organization Registry (ROR) into an ontology."""
2
2
 
3
+ from __future__ import annotations
4
+
3
5
  import json
4
6
  import zipfile
5
- from typing import Iterable
7
+ from typing import Any, Iterable
6
8
 
7
9
  import bioregistry
8
10
  import zenodo_client
9
11
  from tqdm.auto import tqdm
10
12
 
11
- from pyobo.struct import Obo, Reference, Term, TypeDef
13
+ from pyobo.struct import Obo, Reference, Term
12
14
  from pyobo.struct.struct import acronym
15
+ from pyobo.struct.typedef import (
16
+ has_homepage,
17
+ has_part,
18
+ has_predecessor,
19
+ has_successor,
20
+ located_in,
21
+ part_of,
22
+ see_also,
23
+ )
13
24
 
14
25
  PREFIX = "ror"
15
26
  ROR_ZENODO_RECORD_ID = "10086202"
16
27
 
17
28
  # Constants
18
29
  ORG_CLASS = Reference(prefix="OBI", identifier="0000245")
19
- LOCATED_IN = Reference(prefix="RO", identifier="0001025")
20
- PART_OF = Reference(prefix="BFO", identifier="0000050")
21
- HAS_PART = Reference(prefix="BFO", identifier="0000051")
22
- SUCCESSOR = Reference(prefix="BFO", identifier="0000063")
23
- PREDECESSOR = Reference(prefix="BFO", identifier="0000062")
24
30
 
25
31
  RMAP = {
26
- "Related": TypeDef.from_triple("rdfs", "seeAlso"),
27
- "Child": TypeDef(HAS_PART),
28
- "Parent": TypeDef(PART_OF),
29
- "Predecessor": TypeDef(PREDECESSOR),
30
- "Successor": TypeDef(SUCCESSOR),
31
- "Located in": TypeDef(LOCATED_IN),
32
+ "Related": see_also,
33
+ "Child": has_part,
34
+ "Parent": part_of,
35
+ "Predecessor": has_predecessor,
36
+ "Successor": has_successor,
37
+ "Located in": located_in,
32
38
  }
33
39
  NAME_REMAPPING = {
34
40
  "'s-Hertogenbosch": "Den Bosch", # SMH Netherlands, why u gotta be like this
@@ -43,16 +49,16 @@ class RORGetter(Obo):
43
49
  """An ontology representation of the ROR."""
44
50
 
45
51
  ontology = bioregistry_key = PREFIX
46
- typedefs = list(RMAP.values())
52
+ typedefs = [has_homepage, *RMAP.values()]
47
53
  synonym_typedefs = [acronym]
48
54
  idspaces = {
49
55
  "ror": "https://ror.org/",
50
56
  "geonames": "https://www.geonames.org/",
51
- "envo": "http://purl.obolibrary.org/obo/ENVO_",
52
- "bfo": "http://purl.obolibrary.org/obo/BFO_",
53
- "ro": "http://purl.obolibrary.org/obo/RO_",
54
- "obi": "http://purl.obolibrary.org/obo/OBI_",
55
- "omo": "http://purl.obolibrary.org/obo/OMO_",
57
+ "ENVO": "http://purl.obolibrary.org/obo/ENVO_",
58
+ "BFO": "http://purl.obolibrary.org/obo/BFO_",
59
+ "RO": "http://purl.obolibrary.org/obo/RO_",
60
+ "OBI": "http://purl.obolibrary.org/obo/OBI_",
61
+ "OMO": "http://purl.obolibrary.org/obo/OMO_",
56
62
  "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
57
63
  }
58
64
 
@@ -65,6 +71,18 @@ class RORGetter(Obo):
65
71
  return iterate_ror_terms(force=force)
66
72
 
67
73
 
74
+ ROR_ORGANIZATION_TYPE_TO_OBI = {
75
+ "Education": ...,
76
+ "Facility": ...,
77
+ "Company": ...,
78
+ "Government": ...,
79
+ "Healthcare": ...,
80
+ "Other": ...,
81
+ "Archive": ...,
82
+ }
83
+ _MISSED_ORG_TYPES: set[str] = set()
84
+
85
+
68
86
  def iterate_ror_terms(*, force: bool = False) -> Iterable[Term]:
69
87
  """Iterate over terms in ROR."""
70
88
  version, source_uri, records = get_latest(force=force)
@@ -74,10 +92,23 @@ def iterate_ror_terms(*, force: bool = False) -> Iterable[Term]:
74
92
  name = record["name"]
75
93
  name = NAME_REMAPPING.get(name, name)
76
94
 
95
+ organization_types = record.get("types", [])
96
+ description = f"{organization_types[0]} in {record['country']['country_name']}"
97
+ if established := record["established"]:
98
+ description += f" established in {established}"
99
+
77
100
  term = Term(
78
- reference=Reference(prefix=PREFIX, identifier=identifier, name=name), type="Instance"
101
+ reference=Reference(prefix=PREFIX, identifier=identifier, name=name),
102
+ type="Instance",
103
+ definition=description,
79
104
  )
80
105
  term.append_parent(ORG_CLASS)
106
+ # TODO replace term.append_parent(ORG_CLASS) with:
107
+ # for organization_type in organization_types:
108
+ # term.append_parent(ORG_PARENTS[organization_type])
109
+
110
+ for link in record.get("links", []):
111
+ term.append_property(has_homepage, link)
81
112
 
82
113
  if name.startswith("The "):
83
114
  term.append_synonym(name.removeprefix("The "))
@@ -159,5 +190,20 @@ def get_latest(*, force: bool = False):
159
190
  raise FileNotFoundError
160
191
 
161
192
 
193
+ def get_ror_to_country_geonames(**kwargs: Any) -> dict[str, str]:
194
+ """Get a mapping of ROR ids to GeoNames IDs for countries."""
195
+ from pyobo.sources.geonames import get_city_to_country
196
+
197
+ city_to_country = get_city_to_country()
198
+ rv = {}
199
+ for term in iterate_ror_terms(**kwargs):
200
+ city_geonames_reference = term.get_relationship(located_in)
201
+ if city_geonames_reference is None:
202
+ continue
203
+ if city_geonames_reference.identifier in city_to_country:
204
+ rv[term.identifier] = city_to_country[city_geonames_reference.identifier]
205
+ return rv
206
+
207
+
162
208
  if __name__ == "__main__":
163
- RORGetter().write_default(write_obo=True, force=True)
209
+ RORGetter(force=True).write_default(write_obo=True, force=True)
@@ -6,10 +6,10 @@ from operator import attrgetter
6
6
  from pathlib import Path
7
7
  from typing import Iterable, List, Optional, cast
8
8
 
9
- import bioversions
10
9
  from tqdm.auto import tqdm
11
10
 
12
11
  from pyobo import Obo, Reference
12
+ from pyobo.api.utils import get_version
13
13
  from pyobo.constants import RAW_MODULE
14
14
  from pyobo.identifier_utils import standardize_ec
15
15
  from pyobo.struct import Term, derives_from, enables, from_species, participates_in
@@ -166,7 +166,7 @@ def _parse_go(go_terms) -> List[Reference]:
166
166
  def ensure(version: Optional[str] = None, force: bool = False) -> Path:
167
167
  """Ensure the reviewed uniprot names are available."""
168
168
  if version is None:
169
- version = bioversions.get_version("uniprot")
169
+ version = get_version("uniprot")
170
170
  return RAW_MODULE.ensure(
171
171
  PREFIX,
172
172
  version,
pyobo/struct/struct.py CHANGED
@@ -56,6 +56,7 @@ from .typedef import (
56
56
  term_replaced_by,
57
57
  )
58
58
  from .utils import comma_separate, obo_escape_slim
59
+ from ..api.utils import get_version
59
60
  from ..constants import (
60
61
  DATE_FORMAT,
61
62
  NCBITAXON_PREFIX,
@@ -77,6 +78,8 @@ __all__ = [
77
78
  "Term",
78
79
  "Obo",
79
80
  "make_ad_hoc_ontology",
81
+ "abbreviation",
82
+ "acronym",
80
83
  ]
81
84
 
82
85
  logger = logging.getLogger(__name__)
@@ -583,10 +586,8 @@ class Obo:
583
586
 
584
587
  def _get_version(self) -> Optional[str]:
585
588
  if self.bioversions_key:
586
- import bioversions
587
-
588
589
  try:
589
- return bioversions.get_version(self.bioversions_key)
590
+ return get_version(self.bioversions_key)
590
591
  except KeyError:
591
592
  logger.warning(f"[{self.bioversions_key}] bioversions doesn't list this resource ")
592
593
  except IOError:
pyobo/struct/typedef.py CHANGED
@@ -42,9 +42,13 @@ __all__ = [
42
42
  "has_participant",
43
43
  "exact_match",
44
44
  "has_dbxref",
45
+ "located_in",
46
+ "has_successor",
47
+ "has_predecessor",
45
48
  # Properties
46
49
  "has_inchi",
47
50
  "has_smiles",
51
+ "has_homepage",
48
52
  ]
49
53
 
50
54
 
@@ -323,6 +327,9 @@ enabled_by = TypeDef(reference=_enabled_by_reference, inverse=_enables_reference
323
327
  has_input = TypeDef.from_triple(prefix=RO_PREFIX, identifier="0002233", name="has input")
324
328
  has_output = TypeDef.from_triple(prefix=RO_PREFIX, identifier="0002234", name="has output")
325
329
 
330
+ has_successor = TypeDef.from_triple(prefix="BFO", identifier="0000063", name="has successor")
331
+ has_predecessor = TypeDef.from_triple(prefix="BFO", identifier="0000062", name="has predecessor")
332
+
326
333
  """ChEBI"""
327
334
 
328
335
  is_conjugate_base_of = TypeDef(
@@ -355,6 +362,9 @@ has_inchi = TypeDef(
355
362
  reference=Reference(prefix="debio", identifier="0000020", name="has InChI"),
356
363
  )
357
364
 
365
+ has_homepage = TypeDef(
366
+ reference=Reference(prefix="foaf", identifier="homepage", name="homepage"), is_metadata_tag=True
367
+ )
358
368
 
359
369
  default_typedefs: Dict[Tuple[str, str], TypeDef] = {
360
370
  v.pair: v for k, v in locals().items() if isinstance(v, TypeDef)
pyobo/utils/path.py CHANGED
@@ -25,7 +25,7 @@ __all__ = [
25
25
 
26
26
  logger = logging.getLogger(__name__)
27
27
 
28
- VersionHint = Union[None, str, Callable[[], str]]
28
+ VersionHint = Union[None, str, Callable[[], Optional[str]]]
29
29
 
30
30
  requests_ftp.monkeypatch_session()
31
31
 
@@ -46,6 +46,7 @@ def prefix_directory_join(
46
46
  logger.info("[%s] got version %s", prefix, version)
47
47
  elif not isinstance(version, str):
48
48
  raise TypeError(f"Invalid type: {version} ({type(version)})")
49
+ assert version is not None
49
50
  version = cleanup_version(version, prefix=prefix)
50
51
  if version is not None and "/" in version:
51
52
  raise ValueError(f"[{prefix}] Can not have slash in version: {version}")
pyobo/version.py CHANGED
@@ -14,7 +14,7 @@ __all__ = [
14
14
  "get_git_hash",
15
15
  ]
16
16
 
17
- VERSION = "0.10.11"
17
+ VERSION = "0.10.12"
18
18
 
19
19
 
20
20
  def get_git_hash() -> str:
@@ -7,7 +7,7 @@ from functools import lru_cache
7
7
  from typing import Callable, Iterable, Mapping, Optional
8
8
 
9
9
  import pandas as pd
10
- from pkg_resources import iter_entry_points
10
+ from class_resolver import FunctionResolver
11
11
  from tqdm.auto import tqdm
12
12
 
13
13
  __all__ = [
@@ -19,10 +19,13 @@ __all__ = [
19
19
 
20
20
  logger = logging.getLogger(__name__)
21
21
 
22
+ XrefGetter = Callable[[], pd.DataFrame]
23
+
22
24
 
23
25
  @lru_cache()
24
- def _get_xref_plugins() -> Mapping[str, Callable[[], pd.DataFrame]]:
25
- return {entry.name: entry.load() for entry in iter_entry_points(group="pyobo.xrefs")}
26
+ def _get_xref_plugins() -> Mapping[str, XrefGetter]:
27
+ resolver: FunctionResolver[XrefGetter] = FunctionResolver.from_entrypoint("pyobo.xrefs")
28
+ return resolver.lookup_dict
26
29
 
27
30
 
28
31
  def has_xref_plugin(prefix: str) -> bool:
@@ -4,9 +4,9 @@
4
4
 
5
5
  from typing import Optional
6
6
 
7
- import bioversions
8
7
  import pandas as pd
9
8
 
9
+ from pyobo.api.utils import get_version
10
10
  from pyobo.constants import (
11
11
  PROVENANCE,
12
12
  SOURCE_ID,
@@ -26,7 +26,7 @@ def get_chembl_compound_equivalences_raw(
26
26
  ) -> pd.DataFrame:
27
27
  """Get the chemical representations raw dataframe."""
28
28
  if version is None:
29
- version = bioversions.get_version("chembl")
29
+ version = get_version("chembl")
30
30
 
31
31
  base_url = f"ftp://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/chembl_{version}"
32
32
  url = f"{base_url}/chembl_{version}_chemreps.txt.gz"
@@ -36,7 +36,7 @@ def get_chembl_compound_equivalences_raw(
36
36
  def get_chembl_compound_equivalences(version: Optional[str] = None) -> pd.DataFrame:
37
37
  """Get ChEMBL chemical equivalences."""
38
38
  if version is None:
39
- version = bioversions.get_version("chembl")
39
+ version = get_version("chembl")
40
40
 
41
41
  df = get_chembl_compound_equivalences_raw(version=version)
42
42
  rows = []
@@ -55,7 +55,7 @@ def get_chembl_compound_equivalences(version: Optional[str] = None) -> pd.DataFr
55
55
  def get_chembl_protein_equivalences(version: Optional[str] = None) -> pd.DataFrame:
56
56
  """Get ChEMBL protein equivalences."""
57
57
  if version is None:
58
- version = bioversions.get_version("chembl")
58
+ version = get_version("chembl")
59
59
 
60
60
  url = f"ftp://ftp.ebi.ac.uk/pub/databases/chembl/ChEMBLdb/releases/chembl_{version}/chembl_uniprot_mapping.txt"
61
61
  df = ensure_df(
@@ -75,7 +75,7 @@ def get_chembl_protein_equivalences(version: Optional[str] = None) -> pd.DataFra
75
75
  def get_chembl_xrefs_df(version: Optional[str] = None) -> pd.DataFrame:
76
76
  """Get all ChEBML equivalences."""
77
77
  if version is None:
78
- version = bioversions.get_version("chembl")
78
+ version = get_version("chembl")
79
79
 
80
80
  return pd.concat(
81
81
  [
@@ -4,9 +4,9 @@
4
4
 
5
5
  from typing import Optional
6
6
 
7
- import bioversions
8
7
  import pandas as pd
9
8
 
9
+ from ...api.utils import get_version
10
10
  from ...constants import XREF_COLUMNS
11
11
  from ...sources.pubchem import _get_pubchem_extras_url, get_pubchem_id_to_mesh_id
12
12
 
@@ -18,7 +18,8 @@ __all__ = [
18
18
  def get_pubchem_mesh_df(version: Optional[str] = None) -> pd.DataFrame:
19
19
  """Get PubChem Compound-MeSH xrefs."""
20
20
  if version is None:
21
- version = bioversions.get_version("pubchem")
21
+ version = get_version("pubchem")
22
+ assert version is not None
22
23
  cid_mesh_url = _get_pubchem_extras_url(version, "CID-MeSH")
23
24
  return pd.DataFrame(
24
25
  [
@@ -81,11 +81,18 @@ def iter_wikidata_mappings(
81
81
  json.dump(rows, file, indent=2)
82
82
 
83
83
  for row in rows:
84
- wikidata_id = row["wikidata_id"]["value"][len("http://wikidata.org/entity/") :]
84
+ wikidata_id = _removeprefix(row["wikidata_id"]["value"], "http://www.wikidata.org/entity/")
85
+ wikidata_id = _removeprefix(wikidata_id, "http://wikidata.org/entity/")
85
86
  entity_id = row["id"]["value"]
86
87
  yield wikidata_id, entity_id
87
88
 
88
89
 
90
+ def _removeprefix(s, prefix):
91
+ if s.startswith(prefix):
92
+ return s[len(prefix) :]
93
+ return s
94
+
95
+
89
96
  HEADERS = {
90
97
  "User-Agent": f"pyobo/{get_version()}",
91
98
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pyobo
3
- Version: 0.10.11
3
+ Version: 0.10.12
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
@@ -19,16 +19,16 @@ Classifier: Intended Audience :: Science/Research
19
19
  Classifier: License :: OSI Approved :: MIT License
20
20
  Classifier: Operating System :: OS Independent
21
21
  Classifier: Programming Language :: Python
22
+ Classifier: Programming Language :: Python :: 3.12
22
23
  Classifier: Programming Language :: Python :: 3.11
23
24
  Classifier: Programming Language :: Python :: 3.10
24
25
  Classifier: Programming Language :: Python :: 3.9
25
- Classifier: Programming Language :: Python :: 3.8
26
26
  Classifier: Programming Language :: Python :: 3 :: Only
27
27
  Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
28
28
  Classifier: Topic :: Scientific/Engineering :: Chemistry
29
- Requires-Python: >=3.8
29
+ Requires-Python: >=3.9
30
30
  License-File: LICENSE
31
- Requires-Dist: obonet >=0.3.0
31
+ Requires-Dist: obonet>=0.3.0
32
32
  Requires-Dist: click
33
33
  Requires-Dist: tqdm
34
34
  Requires-Dist: pyyaml
@@ -36,37 +36,37 @@ Requires-Dist: pandas
36
36
  Requires-Dist: requests
37
37
  Requires-Dist: protmapper
38
38
  Requires-Dist: more-itertools
39
- Requires-Dist: more-click >=0.0.2
39
+ Requires-Dist: more-click>=0.0.2
40
40
  Requires-Dist: humanize
41
41
  Requires-Dist: tabulate
42
42
  Requires-Dist: cachier
43
- Requires-Dist: pystow >=0.2.7
44
- Requires-Dist: bioversions >=0.5.202
45
- Requires-Dist: bioregistry >=0.10.20
46
- Requires-Dist: bioontologies >=0.4.0
47
- Requires-Dist: zenodo-client >=0.0.5
43
+ Requires-Dist: pystow>=0.2.7
44
+ Requires-Dist: bioversions>=0.5.202
45
+ Requires-Dist: bioregistry>=0.10.20
46
+ Requires-Dist: bioontologies>=0.4.0
47
+ Requires-Dist: zenodo-client>=0.0.5
48
48
  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 >=0.1.3
52
+ Requires-Dist: umls-downloader>=0.1.3
53
53
  Requires-Dist: typing-extensions
54
54
  Provides-Extra: agrovoc
55
- Requires-Dist: rdflib ; extra == 'agrovoc'
55
+ Requires-Dist: rdflib; extra == "agrovoc"
56
56
  Provides-Extra: docs
57
- Requires-Dist: sphinx ; extra == 'docs'
58
- Requires-Dist: sphinx-rtd-theme ; extra == 'docs'
59
- Requires-Dist: sphinx-click ; extra == 'docs'
60
- Requires-Dist: sphinx-automodapi ; extra == 'docs'
57
+ Requires-Dist: sphinx<8.0; extra == "docs"
58
+ Requires-Dist: sphinx-rtd-theme; extra == "docs"
59
+ Requires-Dist: sphinx-click; extra == "docs"
60
+ Requires-Dist: sphinx-automodapi; extra == "docs"
61
61
  Provides-Extra: tests
62
- Requires-Dist: coverage ; extra == 'tests'
63
- Requires-Dist: pytest ; extra == 'tests'
62
+ Requires-Dist: coverage; extra == "tests"
63
+ Requires-Dist: pytest; extra == "tests"
64
64
  Provides-Extra: web
65
- Requires-Dist: flask ; extra == 'web'
66
- Requires-Dist: bootstrap-flask ; extra == 'web'
67
- Requires-Dist: flask-admin ; extra == 'web'
68
- Requires-Dist: flasgger ; extra == 'web'
69
- Requires-Dist: psutil ; extra == 'web'
65
+ Requires-Dist: flask; extra == "web"
66
+ Requires-Dist: bootstrap-flask; extra == "web"
67
+ Requires-Dist: flask-admin; extra == "web"
68
+ Requires-Dist: flasgger; extra == "web"
69
+ Requires-Dist: psutil; extra == "web"
70
70
 
71
71
  PyOBO
72
72
  =====
@@ -1,27 +1,27 @@
1
1
  pyobo/__init__.py,sha256=mZ96iZ-5ucxe2eLBi0xuSKaa2ZfeInaSR5Ajc_NkvUo,1862
2
2
  pyobo/__main__.py,sha256=cQjBabQ2wlFKcv54PFdt0SgPXNeb3oWneuOHaBgHx1Q,108
3
3
  pyobo/aws.py,sha256=oSy4qqHlCpuSyGhDeslrPtc_N0JDhRoGKWjw8RBmyNE,5976
4
- pyobo/constants.py,sha256=JULsofZ3GfSlpnPjJdvCxRfmt07E1niavoyM0bHOvlw,1937
4
+ pyobo/constants.py,sha256=khE82G0qbKjyBSSSKnJSQFZDmn1Rhn06quKg9XbZzZ4,3047
5
5
  pyobo/getters.py,sha256=37e7pcTqU-uVjx_XctT9pJMn7zaazsNfcyWoe7KMHi0,15565
6
- pyobo/gilda_utils.py,sha256=9rzlOkmq2MFac2sJ7b-XHS6UTSTiOM_rRk_xzt-uJiI,7582
7
- pyobo/identifier_utils.py,sha256=y4eFbJJQGoGe0HKRqQoUc_3tani22W_K4z7OZFL6Z0E,3659
6
+ pyobo/gilda_utils.py,sha256=cUv1WaZtzvu6Eb33ua4XShXXYcoD5StoEhNn3WcXN9c,8180
7
+ pyobo/identifier_utils.py,sha256=Ivjai_uBk2Qodo1y6RTej4FjqT6lSGnZxgwRNnt-zPk,4484
8
8
  pyobo/mocks.py,sha256=R-4W3Rm5NarIHfNjxurbvBYsLHXt6jmDb6THMUt6K1w,2432
9
9
  pyobo/normalizer.py,sha256=OHME2CDQSZYSbqmP-L_-4nxete9W9mtAjUzXVs1hnjU,8293
10
10
  pyobo/obographs.py,sha256=JKE0a7e-gmxqdJoeX2zb_xQ6Tv5PAe60YhnIpAvrrYg,3758
11
11
  pyobo/plugins.py,sha256=dXWGoFuQktNeQUWSJlPz2a7FeLysggc9ry6auEZdw98,1227
12
- pyobo/reader.py,sha256=3VTWQMmA-AHi3RdA2jb48d2deXO-lYKqXbcMa9Qhi_4,21271
12
+ pyobo/reader.py,sha256=sCC8RCUysmyVQRy8g_YJHLswr0BzQhxUJMMhe350l9A,21272
13
13
  pyobo/resource_utils.py,sha256=JBcJRihZhNwp78-qWZPrzSCGoYfyOjzBwMkfmOkO_no,4289
14
- pyobo/version.py,sha256=OKbCUY54AAMe_6iaT4e3cdZTp9yasFFcVcJUg7pWxIg,978
14
+ pyobo/version.py,sha256=-M7dCNE1QohvaQ27gU5nWrB8AJHFKX5mla7gvx3HugI,978
15
15
  pyobo/api/__init__.py,sha256=Hq8p5uPW8fFYG2KfLqUsHhtLkTPqE4TqItGkedZzvXM,1326
16
16
  pyobo/api/alts.py,sha256=fa516S9uWVgMIXR5KbYu70KFpvfOD7Not2iEYFB8C_4,2844
17
17
  pyobo/api/hierarchy.py,sha256=o69jARrh9UXbzLsnXjW8Rs0kfQahvc22BlwcE7nAnFI,9527
18
18
  pyobo/api/metadata.py,sha256=py8Pv_Mmy31itziRaucWibGvWF6vOhF4Ofj1kFMk_vQ,1148
19
- pyobo/api/names.py,sha256=wXb677El7RRPVtpthrdKw-zUQJnbrBLgsgKGvPG6KVI,7789
19
+ pyobo/api/names.py,sha256=qf_YjV631lyXezSyd3vW43kxP_Z1rSdU_VH3S2BZ8ZA,8405
20
20
  pyobo/api/properties.py,sha256=BKqUgN8nTpYrc0fROdaGGkptELgjbGT6TC_N2X8FIQM,7813
21
21
  pyobo/api/relations.py,sha256=oAjslceGPLPUDT4keOJQCFBt_BXOqhCgSYZ2d-IjO34,6217
22
22
  pyobo/api/species.py,sha256=RvTrC39yskueQyAplbcmqjHnL-t3QqggjBJcs5swgVU,2249
23
23
  pyobo/api/typedefs.py,sha256=Vb1wvWDWLZu-FchYFs03wMEzS3RUPUsLxvyPNlHBcYE,1157
24
- pyobo/api/utils.py,sha256=jxisiISIUtoW_SfNa3eOVTkEYP5ygYHaFTDibmMO7UE,1059
24
+ pyobo/api/utils.py,sha256=cpYzdGiFmgWJB5PeelyIfFyDdUflmmAS2h_M65SGztc,1245
25
25
  pyobo/api/xrefs.py,sha256=oy5ZSoeEpcJfjDfSCBwUx3LJEykqbpBwNrMhfhiyYlY,6020
26
26
  pyobo/apps/__init__.py,sha256=iACi86TkTiGxwneGmfaudZOIEqZ45YjPXng7XjPE38Y,72
27
27
  pyobo/apps/cli.py,sha256=gnXBAaESw1T1BvgMpTv-0P26hM2vKCAXPy0SOskgUwU,335
@@ -42,7 +42,7 @@ pyobo/cli/__init__.py,sha256=ReL2NlPx_GEljszzkjIKKAK6BC3KAuHli9pFU1YmgXQ,96
42
42
  pyobo/cli/aws.py,sha256=ySuCV9JkOjelXLhcIgeHWReFSLh2n5zvGddNsfM1B8o,989
43
43
  pyobo/cli/cli.py,sha256=0Vibj_1LnkI8pfkK8U7r5eSRspR9VkH2OH4DwcHzA2M,3616
44
44
  pyobo/cli/database.py,sha256=5MCAbMClxYpPxZ83GilcsjjNs3zPjM7rHjqsBPfDGRM,10106
45
- pyobo/cli/lookup.py,sha256=AEGRg8cEqeXb7VENh9MfCFTNgb53Mz-k5uH-nW-mv9I,10126
45
+ pyobo/cli/lookup.py,sha256=1tjSaEaMxntGNxoe4tm8Gs2dQjFDTAH3oyrC_1xIrco,10160
46
46
  pyobo/cli/utils.py,sha256=n8HVfJMEai0_4hDntbQPDZpqqZIPMNX_-kZ2cCyakss,1370
47
47
  pyobo/registries/__init__.py,sha256=P4UmjPFFYkQ_YrXcM5NMT9VF45pHLBqavcmZ7jPwpNQ,417
48
48
  pyobo/registries/metaregistry.json,sha256=ssjWlc3fqQBw0V4wwVZBeW-4Y_B_RkIEc0ooOFeiKJQ,12865
@@ -52,10 +52,10 @@ 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=uG7If-_xo4GfuvQ43yVQFBDUjYMGwmm5o3vyAm0Qqow,3783
55
+ pyobo/sources/__init__.py,sha256=Fxsxq4ahr5wJbqR6-v9W-Rp1bjbcsr81q6RMq6eCMq0,3836
56
56
  pyobo/sources/agrovoc.py,sha256=J425AyyOVAeqeyN5MhmAR9OtJom41GDvKArfyz1iIU8,795
57
- pyobo/sources/antibodyregistry.py,sha256=x4GlWjqg8bMqYrKzAkWHLM7UfaOrYnaVhh3i06QZMEA,3323
58
- pyobo/sources/biogrid.py,sha256=0nHZXeJEDWuAlxsAY7fvAeccKQZ5lL-xwbhbL_dStO8,3328
57
+ pyobo/sources/antibodyregistry.py,sha256=bA84wQBInOqAKGA7YZI3pq4vIqSx2rWuIOUuTwrpdmQ,3332
58
+ pyobo/sources/biogrid.py,sha256=fqKE6oRC_dgHuKLPZf6cnadg-cCOejaexDjGdoVQmrs,3325
59
59
  pyobo/sources/ccle.py,sha256=RwsrFTVOUAySvS2helFbSNAsmiCX3Zs8PiZUeRoGA0I,3023
60
60
  pyobo/sources/cgnc.py,sha256=hCjFv05_aS2_Mn5Qb9VGLKGcOY87rEXZ6jH7r6WgUeg,2336
61
61
  pyobo/sources/chebi.py,sha256=7t5CaykOWXMQ9JRW8x1g_gsZhygCdjR2MGRYTFLEiTs,1230
@@ -64,6 +64,7 @@ pyobo/sources/civic_gene.py,sha256=SUwlb1PXwVVB-XQanyI7tRbPMGaDNiB-CXNry_idAZY,1
64
64
  pyobo/sources/complexportal.py,sha256=nhEaUzw4riuN31OLiwpGffj66YMCeLigekblTWGk3nk,6022
65
65
  pyobo/sources/conso.py,sha256=ZLQ_T5EgrcuX9q6kCBKCwfGzAEVxgN6xADl-LKzJtbk,2460
66
66
  pyobo/sources/cpt.py,sha256=x8P15D9UX5Fwf6bmeVsU1DAFJvZ22rxVPy5ur-GUk_Q,1482
67
+ pyobo/sources/credit.py,sha256=UD_QYfSBvWOejsLaN28WpN2ci_aozPHI7mf1Wbk0uwE,2008
67
68
  pyobo/sources/cvx.py,sha256=FZAghQxkefWsxT1nTTUb56NgteRbAmawpOo3IdAfPAQ,2836
68
69
  pyobo/sources/depmap.py,sha256=VuZduDgCduiAHPLwPDXgWpxhMSOZCC4UsxFdj7hNkYQ,3656
69
70
  pyobo/sources/dictybase_gene.py,sha256=EgWBwUZ83ev7x5Lp_nUkgSq2zumkDjJ7_13m3f6kJz0,2564
@@ -73,38 +74,38 @@ pyobo/sources/drugcentral.py,sha256=05mGolBIyKCxAYzpH9LY_ZQrTVnizup2JUiWi2wW9OI,
73
74
  pyobo/sources/expasy.py,sha256=Ul6DFtHKw3fU1ec93c9f29kXxod2Rn-jPWOYl1xrRa8,10051
74
75
  pyobo/sources/famplex.py,sha256=bn3WaJdrDf9BxsG9vnnnnGOwCrnrJ-vTMxOnxgrtUb4,5816
75
76
  pyobo/sources/flybase.py,sha256=0-BCNsp-L-CgGPN9VdJec6-8e4-fJuzaZAZiNra3ZUQ,5768
76
- pyobo/sources/geonames.py,sha256=XpSc-_6653MrjunVJhqbHHLtkT8kmbJZzfRuF6DoWU8,7929
77
+ pyobo/sources/geonames.py,sha256=SU5i1_UWjnCKLz4yWKZThSJp5dqJdNXj9VL-wWUeiNg,8554
77
78
  pyobo/sources/gmt_utils.py,sha256=NAWyUZ1p1HcO8RPL9mEEcL9KoaBDPuU-tbyG2QLb98k,1401
78
79
  pyobo/sources/go.py,sha256=IJul9eAXxKifZiWKJL1Dl9PFDFdoPMQ0ZVydzhnRtX0,1275
79
80
  pyobo/sources/gwascentral_phenotype.py,sha256=dCzyw_jbmhol69Li0g2ocMQJRqjoV2fZM_pno6i7xyA,1889
80
81
  pyobo/sources/gwascentral_study.py,sha256=_YH9TRWsCOHjOrJ2pAqQ7fi_HmF1WbMmTUj5iqWDUwY,2812
81
- pyobo/sources/hgnc.py,sha256=kVxVIv4LIy_H_rvVQbwvj3Jn6KmLwpk-XRn5jkpnjN4,15951
82
+ pyobo/sources/hgnc.py,sha256=VDiHNbGms3xUyAPjRvkFxGfzR7Jdi2CG5HEtKzM1EGA,15960
82
83
  pyobo/sources/hgncgenefamily.py,sha256=o7gCI5raXkCMr8ONfAZpRW7PtsZ8lkRC4T1kEjTxBn4,3645
83
84
  pyobo/sources/icd10.py,sha256=KhenR1U8LvZQF97mRZIoSEE_daKcJ2hTJ41BQU7SNuM,2286
84
85
  pyobo/sources/icd11.py,sha256=04nLt-Lr64hAroOLH4OP-iNbuIjBk-mYcg-Ib34zgMM,2834
85
86
  pyobo/sources/icd_utils.py,sha256=c1Xkk9YAyKQ-vvnPud5GKq5ygZVbd1j0NFSml3RjQZ0,3155
86
87
  pyobo/sources/interpro.py,sha256=sWla5FDOkzA8elzeNHXOMD0nEVIbNK7jg4UZ0Zp7BfI,4934
87
88
  pyobo/sources/itis.py,sha256=LXS4MTL7OMmdfo-ypoF75UJkePw7VnHDrgq10RF_VUk,2967
88
- pyobo/sources/mesh.py,sha256=5Nr96acPBWmBhWnB-j3xMQFK3cyBIjRXdvpvMOOH4P4,12128
89
+ pyobo/sources/mesh.py,sha256=bERu2apELBxM4DVA-ViuJZzNfaL0dvrNZfPRQFWyPAA,12163
89
90
  pyobo/sources/mgi.py,sha256=c0CiiH_LolAFdHPNu1lpLeAzHq20wVLyOrLRTkLYxhY,5766
90
91
  pyobo/sources/mirbase.py,sha256=NMqZfT7CbbetqCV-KdGjHJmz2uM5QvdF_M1BxKi1ZCw,6349
91
92
  pyobo/sources/mirbase_constants.py,sha256=X7KhJDp1saGrdBwUR9fQSWwebzns5f-mEF4qWSETs2k,2023
92
93
  pyobo/sources/mirbase_family.py,sha256=Yj3oXaeBWDxcmBKnvOl0q_7nzlye5EXhSJPWlV3YpT8,2167
93
94
  pyobo/sources/mirbase_mature.py,sha256=nvWcQVDMBucPu6v5DLFb_W_9fz_J_Id7HZrilkUhaFI,1504
94
- pyobo/sources/msigdb.py,sha256=YKgFyPgYKdYQtu22P69IVyLeBsLfgNyaNOl7q0Sy8IU,5019
95
+ pyobo/sources/msigdb.py,sha256=o5thqA4-4GzUE3PUIEad-iznYh6NNLKqkSXCbea_rZM,5021
95
96
  pyobo/sources/ncbigene.py,sha256=qipZEaaXop289vRro_NS8BB0_t-c738lJItWSjzD7PI,5055
96
- pyobo/sources/npass.py,sha256=t8TDdxpfvvXYo8VczT4ngoSspPAdPJuLKigvHZ9OHrE,2805
97
+ pyobo/sources/npass.py,sha256=AnZTNCsV4JD5tPCenoU4RyBxnEmVk_tA_4rbni99KcY,2814
97
98
  pyobo/sources/omim_ps.py,sha256=uULW_1gmYIE66O85GdLCGbdmsi9qxcS7tZziOny0wc0,1020
98
99
  pyobo/sources/pathbank.py,sha256=yhdS4BCbGxQf0o3HCGzL2cYRY7zyvHvDzzSBkkezoog,4989
99
100
  pyobo/sources/pfam.py,sha256=aHXdXmoG6xyNkScHft_xYe4J2DzRr22EinyfjpmwEj4,1846
100
101
  pyobo/sources/pfam_clan.py,sha256=hjJ0UUEcrNoaQVWbXZ_EaTWFo4iB9VG9Sp6pcO90gxY,1340
101
102
  pyobo/sources/pid.py,sha256=ZEbiYpbZL9_aOCEJWw0I3H5f7Q2RhQuNy5PUZfs0orU,4570
102
103
  pyobo/sources/pombase.py,sha256=nRMxk2FuQZv6KnL8LBxqZbVtvynvneLe39i5V3dYAtw,3601
103
- pyobo/sources/pubchem.py,sha256=arIX53mvCWRghLJkeh9iTPUU_lQJ8SSTm-pOK8KBqbE,5289
104
+ pyobo/sources/pubchem.py,sha256=ZnbRh1hCSAVawfVCNSy43kvIBXslq4lX8OlArnbo5sE,5282
104
105
  pyobo/sources/reactome.py,sha256=H-hMMrbf2mElOLDu_hYZgurYLYTZvrQ7E1dyvaWKvSM,5084
105
- pyobo/sources/rgd.py,sha256=CbtDDIrBQ7ZA0GK6BcorxYBeaJazo3D1gMot588cA0E,5397
106
- pyobo/sources/rhea.py,sha256=vfmDFo11LdxuIfo3LZ7n5X942IjO-U9iX4l-CGTMjb0,7772
107
- pyobo/sources/ror.py,sha256=g4UxcEYJ4RW_imqna3T6GnAxRp058L7MJFDmZjstYdo,6123
106
+ pyobo/sources/rgd.py,sha256=v-4xH5w2C58J_hRI5V8Eof7EiTPofVlIwFA-3c2jyhg,5397
107
+ pyobo/sources/rhea.py,sha256=nt2j7LMiuKM7zaVflSUoWNj7J8EnsRVfigFK9XXuNRg,7781
108
+ pyobo/sources/ror.py,sha256=Omu5DYStYoUyenEfNOwsQZbmZTZQZ0DvToXrT3pLFYc,7364
108
109
  pyobo/sources/sgd.py,sha256=DOcRxEJGrHEOsaIiWat2x9ER2HnfnU3l8lqr3IktblA,2150
109
110
  pyobo/sources/slm.py,sha256=ai_Zp0tqBIanMZ7q7b5x6w9KdTTCEqA4PhX0ToaF594,3804
110
111
  pyobo/sources/utils.py,sha256=tmCGXGxHVrYkS5E1-k2SZqL8H4Tv8dFrkoIEJ0xzVmQ,1119
@@ -126,7 +127,7 @@ pyobo/sources/umls/get_synonym_types.py,sha256=5u1ZEl8gp_StuQxrasvHK4S0DyVWdgp_r
126
127
  pyobo/sources/umls/synonym_types.tsv,sha256=z--ngeAqA_Kk8ft2YD8qOU_XUxhnTxF0OhL8jRd5xqo,8551
127
128
  pyobo/sources/umls/umls.py,sha256=C3UXVd1iSlj5TC6Ib1T1oDIyJ4pIveNeGPK8ORkRtG4,4318
128
129
  pyobo/sources/uniprot/__init__.py,sha256=dsL0BvfMn3O_swtNhzQpjJUlP56NUBCcjSYdFvRlwmI,225
129
- pyobo/sources/uniprot/uniprot.py,sha256=WVSxy6cDPYu5S69_V5_dzRdsU6aSVm-rFXvmEcuk8eI,6105
130
+ pyobo/sources/uniprot/uniprot.py,sha256=FNfLttMPFnYL8DECoa1I6j4qAxg6nRo_VzLqFYkDOYM,6114
130
131
  pyobo/sources/uniprot/uniprot_ptm.py,sha256=ze1cf0_kkqslhS-lXa7EdfasV4reUDp6niJat6yymT8,3551
131
132
  pyobo/ssg/__init__.py,sha256=Q5vYmk1LZwriShmA3TcYZ1Z1yiyjTWItcGxep5Fi2pw,5390
132
133
  pyobo/ssg/base.html,sha256=_vldUCa-gL2YTNY6GgAuxNT3TgaED585vF_q7TrrjYs,2844
@@ -135,8 +136,8 @@ pyobo/ssg/term.html,sha256=QU6piGOq4dq8zlNhJvLFxqFjhVQyWlkiG31I0Sg5frg,3559
135
136
  pyobo/ssg/typedef.html,sha256=KrdqzB6xjt689bG33D26AL-11JrvNuEkoxNNI-EG-Tg,2038
136
137
  pyobo/struct/__init__.py,sha256=F5iav-0rnkLrldDxDPVeDt4zd1tXYBKICoKODJBk_kQ,671
137
138
  pyobo/struct/reference.py,sha256=U2qHIANj_0XhSxh7UBaXUiOXWtVjtyIBeDQ03heWuxA,5712
138
- pyobo/struct/struct.py,sha256=bkZv5H_sZFaWQr3cXA5F6JQbqg_OtVfMBV4mS10aHKk,54398
139
- pyobo/struct/typedef.py,sha256=spRRFWV-lV7yOU6HHnxAAFA-4ap6bm3l27KV-bmdLlc,13498
139
+ pyobo/struct/struct.py,sha256=oSEocxLlb4o51-qPhYu8Mi74S4w1FfaEDR8332wW124,54425
140
+ pyobo/struct/typedef.py,sha256=IbYBL_FpTQqlZBsC8tq-DqD_mfGvfUaJz02gMIjtPO0,13900
140
141
  pyobo/struct/utils.py,sha256=-XHuCETp7jPNhjHCW72gikaKoaiTPTNhDK5BZYyJsVw,815
141
142
  pyobo/utils/__init__.py,sha256=wXtcjcasWRBtJdTSMCC3jT8yFG8ZkQC-Xdh9lLiQDAo,42
142
143
  pyobo/utils/cache.py,sha256=bmuEE0DyppY6szNEzkS1tLLKfsLIrHQFhp0P-q94KFs,2677
@@ -144,26 +145,25 @@ pyobo/utils/io.py,sha256=GiOittPhSJKc-acmj6h3DGSvLnPDntRIiUhjuCEUwj8,4756
144
145
  pyobo/utils/iter.py,sha256=VyISqr04Pg2xLSLJhypUuZnh7WzxVmpp3MsASCuL8Tk,1475
145
146
  pyobo/utils/misc.py,sha256=WfvJ_AGge8plp9IIlAGiahPxoCiWAow4t_-ncr7AjwY,2857
146
147
  pyobo/utils/ndex_utils.py,sha256=gxmGfR_O-ZMOsBil_YFSn99x_Fvatg7O8s9iZp4Iy10,2351
147
- pyobo/utils/path.py,sha256=-IVv_0H4Q790-ymmLdOlFgFSDuDubh9jZpPtDQzf-hI,3931
148
+ pyobo/utils/path.py,sha256=ZNJ3aOZT9xqyk8NSQ1jZLtTB5goFPlquVYAwvuGEkVQ,3972
148
149
  pyobo/xrefdb/__init__.py,sha256=0W6AuvghFHQ1zY-Dq26z8V_MRC9xL39aWqLb-JbU8T8,74
149
- pyobo/xrefdb/bengo.py,sha256=DUhvdWvjNg2rfa99x3pfkonKERmylbt06u5GLlTZ10Q,1312
150
150
  pyobo/xrefdb/canonicalizer.py,sha256=gtwOoOMmBSCnXrlGfAyuryhT16F87I9HAOd2wi0O7I0,7421
151
151
  pyobo/xrefdb/priority.py,sha256=QfaKJ4U_6d1JlVZX_vM1s6T35bdc1-PiQH3--WTLAK0,1203
152
152
  pyobo/xrefdb/xrefs_pipeline.py,sha256=I0zsukpuOBIBIM2vh4K3A0UuaI6l56qt3is8NAzYTaU,6219
153
- pyobo/xrefdb/sources/__init__.py,sha256=2eRNhpQJsPN4vTwFrk2j8RK34P6GSh7_tWIRoPJrpGI,1587
153
+ pyobo/xrefdb/sources/__init__.py,sha256=uM3g-OyOCsz7dINGcBkcqBs4lYwogTQhX3BZj1Bz5zo,1647
154
154
  pyobo/xrefdb/sources/biomappings.py,sha256=110puNUl0CbIBXFovEpMeW25QsnIetteWPmCCQ00s3Q,919
155
155
  pyobo/xrefdb/sources/cbms2019.py,sha256=neUfZsmLEi0kNKaOHtMCpnCyvcc4VD1KX88ldhLjYoo,2843
156
- pyobo/xrefdb/sources/chembl.py,sha256=cYjZwwS8NXsunjeHxGziUvZomMw9qdwUkCjxX0GvQKc,2662
156
+ pyobo/xrefdb/sources/chembl.py,sha256=NyxfELxPE2uB0UPBzs27DcRFun7Wu9ZWy1bNsIX2bS0,2635
157
157
  pyobo/xrefdb/sources/compath.py,sha256=IS6kgkVTYQHgy3gm6GhrHkfUStfjd0z5W_w8KrWb5Rs,2334
158
158
  pyobo/xrefdb/sources/famplex.py,sha256=pAbfFjRs_tPuxTJWJqvPT5p3ZKIqtgT0xqn2GizJ3-4,1833
159
159
  pyobo/xrefdb/sources/gilda.py,sha256=aYMFXMbDKB-_HqPMzEIUhvz6YahJiuyAcNgo2KfFalk,1070
160
160
  pyobo/xrefdb/sources/intact.py,sha256=F0z6WrOwI79aZSuM5MsvQwzqoyzh9J0UuB4Mseoj9X8,2966
161
161
  pyobo/xrefdb/sources/ncit.py,sha256=unoIKJqdcfitTc6pU9P1SxJ1w8ax0iDjvEOlqe64nCY,3745
162
- pyobo/xrefdb/sources/pubchem.py,sha256=GaqgqtSV-T_P-900nL3alPx_ZB36MlmnEepOnZMONA4,780
163
- pyobo/xrefdb/sources/wikidata.py,sha256=bOI2zUkkLbmXvOMJZmVWq1xKlMCuL_3l1NVsaoJr1x4,3387
164
- pyobo-0.10.11.dist-info/LICENSE,sha256=GRbxxtZEWtZiFGDENk1gntCQK4HEJYYbylEJEwpSLao,1076
165
- pyobo-0.10.11.dist-info/METADATA,sha256=rSYHdngGuda1C3fkDGxwpYfljYY_kFx4VZV0eZoQbF8,20046
166
- pyobo-0.10.11.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
167
- pyobo-0.10.11.dist-info/entry_points.txt,sha256=Du5V6qw_T917Z5ZoMhLTTJoolK7kkVuUWkdE7aJWea0,669
168
- pyobo-0.10.11.dist-info/top_level.txt,sha256=oVdkT-pbiGoSdGSQplXFuP1KQGJNf4GdRC65jn6y9t0,6
169
- pyobo-0.10.11.dist-info/RECORD,,
162
+ pyobo/xrefdb/sources/pubchem.py,sha256=m6I_zYUGDe27EKhyNvjMSy1hpRcUURc7fuTxiTy8xlg,821
163
+ pyobo/xrefdb/sources/wikidata.py,sha256=vrrbOBIIQimrghzishZ6yyE1L_ARgJDCoAogqfuUYDY,3585
164
+ pyobo-0.10.12.dist-info/LICENSE,sha256=GRbxxtZEWtZiFGDENk1gntCQK4HEJYYbylEJEwpSLao,1076
165
+ pyobo-0.10.12.dist-info/METADATA,sha256=WNna9-0XS_htOC_zl7-jLF05KGsjmau8rwTnUoLqQ-8,20031
166
+ pyobo-0.10.12.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
167
+ pyobo-0.10.12.dist-info/entry_points.txt,sha256=Du5V6qw_T917Z5ZoMhLTTJoolK7kkVuUWkdE7aJWea0,669
168
+ pyobo-0.10.12.dist-info/top_level.txt,sha256=oVdkT-pbiGoSdGSQplXFuP1KQGJNf4GdRC65jn6y9t0,6
169
+ pyobo-0.10.12.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: bdist_wheel (0.43.0)
2
+ Generator: setuptools (75.1.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5