From a52eed54ff5fe918b17cfca6cdf16498477d2411 Mon Sep 17 00:00:00 2001 From: Chris Mungall Date: Mon, 15 Apr 2024 17:04:51 -0700 Subject: [PATCH] Adding definition validation functionality (#738) * Adding definition validation functionality * handle whole-ontology case * add missing * validate synonyms --- docs/howtos/use-llms.rst | 50 +- docs/packages/interfaces/validator.rst | 28 +- docs/packages/utilities.rst | 3 +- notebooks/Commands/ValidateDefinitions.ipynb | 681 ++++ notebooks/Commands/ValidateMappings.ipynb | 2 +- .../input/validate-definition-conf.yaml | 1 + .../Commands/input/validate-defs-test.obo | 2796 ++++++++++++++++ poetry.lock | 2181 ++++++------- pyproject.toml | 5 +- src/oaklib/cli.py | 186 +- .../obo_graph_to_obo_format_converter.py | 59 +- src/oaklib/datamodels/ontology_metadata.py | 2809 +++++------------ src/oaklib/datamodels/ontology_metadata.yaml | 29 +- src/oaklib/datamodels/validation_datamodel.py | 702 ++-- .../datamodels/validation_datamodel.yaml | 21 +- .../implementations/llm_implementation.py | 102 +- .../simpleobo/simple_obo_implementation.py | 37 +- .../simpleobo/simple_obo_parser.py | 18 + src/oaklib/interfaces/obograph_interface.py | 23 + src/oaklib/interfaces/validator_interface.py | 203 +- src/oaklib/io/streaming_obo_writer.py | 56 +- .../utilities/publication_utils/__init__.py | 0 .../publication_utils/doi_wrapper.py | 142 + .../publication_utils/pubdb_wrapper.py | 36 + .../publication_utils/pubmed_wrapper.py | 167 + .../validation/definition_ontology_rule.py | 122 +- .../utilities/validation/rule_runner.py | 4 +- tests/test_implementations/__init__.py | 10 +- tests/test_implementations/test_pronto.py | 4 +- tests/test_implementations/test_simple_obo.py | 2 +- tests/test_utilities/test_pubdb_wrapper.py | 13 + .../test_definition_ontology_rules.py | 23 +- 32 files changed, 6548 insertions(+), 3967 deletions(-) create mode 100644 notebooks/Commands/ValidateDefinitions.ipynb create mode 100644 notebooks/Commands/input/validate-definition-conf.yaml create mode 100644 notebooks/Commands/input/validate-defs-test.obo create mode 100644 src/oaklib/utilities/publication_utils/__init__.py create mode 100644 src/oaklib/utilities/publication_utils/doi_wrapper.py create mode 100644 src/oaklib/utilities/publication_utils/pubdb_wrapper.py create mode 100644 src/oaklib/utilities/publication_utils/pubmed_wrapper.py create mode 100644 tests/test_utilities/test_pubdb_wrapper.py diff --git a/docs/howtos/use-llms.rst b/docs/howtos/use-llms.rst index c08950829..b8da74186 100644 --- a/docs/howtos/use-llms.rst +++ b/docs/howtos/use-llms.rst @@ -115,9 +115,51 @@ Suggesting Definitions finger toe \ --style-hints "write definitions in formal genus-differentia form" +Validating Definitions +~~~~~~~~~~~~~~~~~~~~~~ + +The LLM adapter currently interprets ``validate-definitions`` as comparing the specified definition +against the abstracts of papers cited in the definition provenance, or by comparing the definition +against the database objects that are cited as definition provenance. + +Here is an example of validating definitions for GO terms: + +.. code-block:: bash + + runoak --stacktrace -i llm:sqlite:obo:go validate-definitions \ + i^GO: -o out.jsonl -O jsonl + +The semsql version of GO has other ontologies merged in, so the ``i^GO:`` query only validates +against actual GO terms. + +You can also pass in a configuration object. +This should conform to the `Validation Data Model `_ + +For example, this configuration yaml provides a specific prompt and also a URL for +documentation aimed at ontology developers. + +.. code-block:: yaml + + prompt_info: Please also use the following GO guidelines + documentation_objects: + - https://wiki.geneontology.org/Guidelines_for_GO_textual_definitions + +All specified URLs are downloaded and converted to text and included in the prompt. + +The configuration yaml is passed in as follows: + +.. code-block:: bash + + + runoak --stacktrace -i llm:{claude-3-opus}:sqlite:obo:go validate-definitions \ + -C src/oaklib/conf/go-definition-validation-llm-config.yaml i^GO: -O yaml + Validating Mappings ~~~~~~~~~~~~~~~~~~~ +The LLM adapter validates mappings by looking up info on the mapped entity and +comparing it with the main entity. + .. code-block:: bash runoak --stacktrace -i llm:{gpt-4}:sqlite:obo:go validate-mappings \ @@ -165,8 +207,14 @@ as a developer, then you can do this: This will install the plugin in the same environment as OAK. -TODO: instructions for non-developers. +If you need to update this: + +.. code-block:: bash + cd ontology-access-kit + poetry run llm install -U llm-gemini + +TODO: instructions for non-developers. Mixtral via Ollama and LiteLLM ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/docs/packages/interfaces/validator.rst b/docs/packages/interfaces/validator.rst index 2bacd5568..9b1ba11fc 100644 --- a/docs/packages/interfaces/validator.rst +++ b/docs/packages/interfaces/validator.rst @@ -3,13 +3,24 @@ Validator Interface -------------------- -.. warning :: +The Validator Interface provides access to a number of different validation operations over ontologies. - Currently the main validator methods are only implemented for :ref:`SqlDatabaseImplementation` +The notion of validation in OAK is intentionally very flexible, and may encompass: -The validate method is configured using a *metadata schema*. The default one used is: + * *Schema* validation, for example, checking definitions are strings and have 0..1 cardinality. + * *Logical* validation, using a reasoner. + * *Lexical* validation, for example, ensuring there are no spelling errors + * *Stylistic* validation, against a style guide + * *Content* validation, checking the content of the ontology against domain knowledge or other ontologies. -- `Ontology Metadata `_ +Different adapters may implement different portions of this. + +Schema Validation +~~~~~~~~~~~~~~~~~ + +The core validate method is configured using a *metadata schema*. The default one used is: + +- `Ontology Metadata `_ This is specified using LinkML which provides an expressive way to state constraints on metadata elements, such as :ref:`AnnotationProperty` assertions in ontologies. For example, this schema states that definition @@ -19,6 +30,15 @@ Different projects may wish to configure this - it is possible to pass in a diff For more details see `this howto guide `_ +.. warning:: + + Currently only implemented for :ref`sql_implementation` + +LLM-based validation +~~~~~~~~~~~~~~~~~~~~ + +See :ref:`use_llms` + .. currentmodule:: oaklib.interfaces.validator_interface diff --git a/docs/packages/utilities.rst b/docs/packages/utilities.rst index dafcc23da..306ed28e4 100644 --- a/docs/packages/utilities.rst +++ b/docs/packages/utilities.rst @@ -17,5 +17,6 @@ being turned into :ref:`interfaces`. lexical.lexical_indexer subsets.slimmer_utils apikey_manager - taxon/taxon_constraint_utils + taxon.taxon_constraint_utils table_filler + diff --git a/notebooks/Commands/ValidateDefinitions.ipynb b/notebooks/Commands/ValidateDefinitions.ipynb new file mode 100644 index 000000000..ee56f95d7 --- /dev/null +++ b/notebooks/Commands/ValidateDefinitions.ipynb @@ -0,0 +1,681 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0a28b88d-4deb-4d0a-a110-f27adf077e23", + "metadata": {}, + "source": [ + "# OAK validate-definitions command\n", + "\n", + "This notebook is intended as a supplement to the [main OAK CLI docs](https://incatools.github.io/ontology-access-kit/cli.html).\n", + "\n", + "This notebook provides examples for the `validate-definitions` command.\n", + "This forms part of a suite of *validate* commands.\n", + " \n", + "## Help Option\n", + "\n", + "You can get help on any OAK command using `--help`" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "c223f678-f82f-4b06-8e19-1a5b7323e571", + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-15T00:50:27.966036Z", + "start_time": "2024-04-15T00:50:25.530846Z" + } + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Usage: runoak validate-definitions [OPTIONS] [TERMS]...\r\n", + "\r\n", + " Checks presence and structure of text definitions.\r\n", + "\r\n", + " To run:\r\n", + "\r\n", + " runoak validate-definitions -i db/uberon.db -o results.tsv\r\n", + "\r\n", + " By default this will apply basic text mining of text definitions to check\r\n", + " against machine actionable OBO text definition guideline rules. This can\r\n", + " result in an initial lag - to skip this, and ONLY perform checks for\r\n", + " *presence* of definitions, use --skip-text-annotation:\r\n", + "\r\n", + " Example: -------\r\n", + "\r\n", + " runoak validate-definitions -i db/uberon.db --skip-text-annotation\r\n", + "\r\n", + " Like most OAK commands, this accepts lists of terms or term queries as\r\n", + " arguments. You can pass in a CURIE list to selectively validate individual\r\n", + " classes\r\n", + "\r\n", + " Example: -------\r\n", + "\r\n", + " runoak validate-definitions -i db/cl.db CL:0002053\r\n", + "\r\n", + " Only on CL identifiers:\r\n", + "\r\n", + " runoak validate-definitions -i db/cl.db i^CL:\r\n", + "\r\n", + " Only on neuron hierarchy:\r\n", + "\r\n", + " runoak validate-definitions -i db/cl.db .desc//p=i neuron\r\n", + "\r\n", + " Output format:\r\n", + "\r\n", + " This command emits objects conforming to the OAK validation datamodel. See\r\n", + " https://incatools.github.io/ontology-access-kit/datamodels for more on OAK\r\n", + " datamodels.\r\n", + "\r\n", + " The default serialization of the datamodel is CSV.\r\n", + "\r\n", + " Notes: -----\r\n", + "\r\n", + " This command is largely redundant with the validate command, but is useful\r\n", + " for targeted validation focused solely on definitions\r\n", + "\r\n", + "Options:\r\n", + " --skip-text-annotation / --no-skip-text-annotation\r\n", + " If true, do not parse text annotations\r\n", + " [default: no-skip-text-annotation]\r\n", + " -C, --configuration-file TEXT Path to a configuration file. This is\r\n", + " typically a YAML file, but may be a JSON\r\n", + " file\r\n", + " --adapter-mapping TEXT Multiple prefix=selector pairs, e.g.\r\n", + " --adapter-mapping uberon=db/uberon.db\r\n", + " -O, --output-type TEXT Desired output type\r\n", + " -o, --output FILENAME Output file, e.g. obo file\r\n", + " --help Show this message and exit.\r\n" + ] + } + ], + "source": [ + "!runoak validate-definitions --help" + ] + }, + { + "cell_type": "markdown", + "id": "01f38163-db22-4c51-ae46-10e8b8e6d53c", + "metadata": {}, + "source": [ + "## Example: Validation over Test Ontology\n", + "\n", + "To illustrate this command we will use a deliberately altered version of a subset of GO.\n", + "\n", + "We will query the subset that are descendants of cellular process using the query `.desc//p=i \"cellular_component\"`" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "c9b86e52-87a7-449c-baac-81981e7ce632", + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-15T00:50:30.655424Z", + "start_time": "2024-04-15T00:50:27.968820Z" + } + }, + "outputs": [], + "source": [ + "!runoak --stacktrace -i simpleobo:input/validate-defs-test.obo validate-definitions -C input/validate-definition-conf.yaml .desc//p=i \"cellular_component\" -o output/validate-definitions.output.tsv" + ] + }, + { + "cell_type": "markdown", + "source": [ + "The output is a TSV file with a summary of the issues found.\n", + "\n", + "We can load this into a pandas dataframe for further analysis. This also has the advantage of\n", + "displaying tables nicely in Jupyter notebooks such as this one.\n", + "\n", + "If you were actually using this on the command line you may prefer to use your own TSV processing tools,\n", + "or to simply load into google sheets." + ], + "metadata": { + "collapsed": false + }, + "id": "27c1668fc8d1a8de" + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "5fc9b15d-cc81-400a-8660-f92491baa120", + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-15T00:50:30.953116Z", + "start_time": "2024-04-15T00:50:30.658190Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label \\\n0 oaklib.om:DCC#Any GO:0005634 nucleus \n1 oaklib.om:DCC#S3 GO:0043227 membrane-bounded organelle \n2 oaklib.om:DCC#S11 GO:0043227 membrane-bounded organelle \n3 oaklib.om:DCC#Any GO:0110165 cellular anatomical entity \n4 oaklib.om:DCC#S3 GO:0099568 cytoplasmic region \n5 oaklib.om:DCC#S1 GO:0005737 cytoplasm \n6 oaklib.om:DCC#S3 GO:0043229 intracellular organelle \n7 oaklib.om:DCC#S11 GO:0043229 intracellular organelle \n8 oaklib.om:DCC#S11 GO:0043229 intracellular organelle \n9 oaklib.om:DCC#Any GO:0005886 plasma membrane \n10 oaklib.om:DCC#Any GO:0098590 plasma membrane region \n11 oaklib.om:DCC#S3 GO:9999998 fake term for testing pmid type \n12 oaklib.om:DCC#S1 GO:0005773 vacuole \n13 oaklib.om:DCC#S3 GO:9999999 fake term for testing retraction \n14 oaklib.om:DCC#S3 GO:0031975 envelope \n15 oaklib.om:DCC#S3 GO:0005575 cellular_component \n16 oaklib.om:DCC#S11 GO:0031090 organelle membrane \n17 oaklib.om:DCC#Any GO:0034357 photosynthetic membrane \n18 oaklib.om:DCC#S11 GO:0031965 nuclear membrane \n19 oaklib.om:DCC#S11 GO:0005938 cell cortex \n20 oaklib.om:DCC#S11 GO:0005938 cell cortex \n21 oaklib.om:DCC#S0 GO:0012505 endomembrane system \n22 oaklib.om:DCC#S7 GO:0009579 thylakoid \n23 oaklib.om:DCC#S3 GO:0031967 organelle envelope \n24 oaklib.om:DCC#S3 GO:0043226 organelle \n25 oaklib.om:DCC#S3 GO:0071944 cell periphery \n26 oaklib.om:DCC#S3 GO:0043231 intracellular membrane-bounded organelle \n27 oaklib.om:DCC#S11 GO:0043231 intracellular membrane-bounded organelle \n28 oaklib.om:DCC#S11 GO:0043231 intracellular membrane-bounded organelle \n29 oaklib.om:DCC#S3 GO:0016020 membrane \n30 oaklib.om:DCC#S3 GO:0099738 cell cortex region \n31 oaklib.om:DCC#S11 GO:0099738 cell cortex region \n32 oaklib.om:DCC#Any GO:0005635 nuclear envelope \n33 oaklib.om:DCC#S3 GO:0005622 intracellular anatomical structure \n34 oaklib.om:DCC#S20.1 GO:9999998 fake term for testing pmid type \n35 oaklib.om:DCC#S20.2 GO:9999999 fake term for testing retraction \n\n severity instantiates predicate object \\\n0 INFO NaN IAO:0000115 NaN \n1 WARNING NaN IAO:0000115 NaN \n2 NaN NaN IAO:0000115 NaN \n3 INFO NaN IAO:0000115 NaN \n4 WARNING NaN IAO:0000115 NaN \n5 NaN NaN IAO:0000115 NaN \n6 WARNING NaN IAO:0000115 NaN \n7 NaN NaN IAO:0000115 NaN \n8 NaN NaN IAO:0000115 NaN \n9 INFO NaN IAO:0000115 NaN \n10 INFO NaN IAO:0000115 NaN \n11 WARNING NaN IAO:0000115 NaN \n12 NaN NaN IAO:0000115 NaN \n13 WARNING NaN IAO:0000115 NaN \n14 WARNING NaN IAO:0000115 NaN \n15 WARNING NaN IAO:0000115 NaN \n16 NaN NaN IAO:0000115 NaN \n17 INFO NaN IAO:0000115 NaN \n18 NaN NaN IAO:0000115 NaN \n19 NaN NaN IAO:0000115 NaN \n20 NaN NaN IAO:0000115 NaN \n21 ERROR NaN IAO:0000115 NaN \n22 NaN NaN IAO:0000115 NaN \n23 WARNING NaN IAO:0000115 NaN \n24 WARNING NaN IAO:0000115 NaN \n25 WARNING NaN IAO:0000115 NaN \n26 WARNING NaN IAO:0000115 NaN \n27 NaN NaN IAO:0000115 NaN \n28 NaN NaN IAO:0000115 NaN \n29 WARNING NaN IAO:0000115 NaN \n30 NaN NaN IAO:0000115 NaN \n31 NaN NaN IAO:0000115 NaN \n32 INFO NaN IAO:0000115 NaN \n33 WARNING NaN IAO:0000115 NaN \n34 ERROR NaN IAO:0000115 PMID:9999999999999 \n35 ERROR NaN IAO:0000115 PMID:19717156 \n\n object_str source \\\n0 A membrane-bounded organelle of eukaryotic cel... NaN \n1 Organized structure of distinctive morphology ... NaN \n2 NaN NaN \n3 A part of a cellular organism that is either a... NaN \n4 Any (proper) part of the cytoplasm of a single... NaN \n5 NaN NaN \n6 Organized structure of distinctive morphology ... NaN \n7 NaN NaN \n8 NaN NaN \n9 The membrane surrounding a cell that separates... NaN \n10 A membrane that is a (regional) part of the pl... NaN \n11 fake definition to test retracted typo in refe... NaN \n12 NaN NaN \n13 fake definition to test retracted reference NaN \n14 A multilayered structure surrounding all or pa... NaN \n15 A location, relative to cellular compartments ... NaN \n16 is one of the two lipid bilayers of an organel... NaN \n17 A membrane enriched in complexes formed of rea... NaN \n18 envelope NaN \n19 region of a cell NaN \n20 lies just beneath the plasma membrane and ofte... NaN \n21 NaN NaN \n22 The structure in a plant cell that is known as... NaN \n23 A double membrane structure enclosing an organ... NaN \n24 Organized structure of distinctive morphology ... NaN \n25 The part of a cell encompassing the cell corte... NaN \n26 Organized structure of distinctive morphology ... NaN \n27 NaN NaN \n28 NaN NaN \n29 A lipid bilayer along with all the proteins an... NaN \n30 complete extent of cell cortex NaN \n31 underlies some some region of the plasma membrane NaN \n32 A double lipid bilayer that is part of the nuc... NaN \n33 A component of a cell contained within (but no... NaN \n34 NaN NaN \n35 NaN NaN \n\n info \n0 No problems with definition \n1 Cannot parse genus and differentia \n2 Logical definition element not found in text: ... \n3 No problems with definition \n4 Cannot parse genus and differentia \n5 Definiendum should not appear at the start \n6 Cannot parse genus and differentia \n7 Logical definition element not found in text: ... \n8 Logical definition element not found in text: ... \n9 No problems with definition \n10 No problems with definition \n11 Cannot parse genus and differentia \n12 Definiendum should not appear at the start \n13 Cannot parse genus and differentia \n14 Cannot parse genus and differentia \n15 Cannot parse genus and differentia \n16 Logical definition element not found in text: ... \n17 No problems with definition \n18 Logical definition element not found in text: ... \n19 Logical definition element not found in text: ... \n20 Logical definition element not found in text: ... \n21 Missing text definition \n22 Circular, thylakoid (GO:0009579 in definition \n23 Cannot parse genus and differentia \n24 Cannot parse genus and differentia \n25 Cannot parse genus and differentia \n26 Cannot parse genus and differentia \n27 Logical definition element not found in text: ... \n28 Logical definition element not found in text: ... \n29 Cannot parse genus and differentia \n30 Did not match whole text: cell cortex < comple... \n31 Wrong position, 'cell cortex' not in 'underlie... \n32 No problems with definition \n33 Cannot parse genus and differentia \n34 publication not found: PMID:9999999999999 \n35 publication is retracted: A role for plasma tr... ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelseverityinstantiatespredicateobjectobject_strsourceinfo
0oaklib.om:DCC#AnyGO:0005634nucleusINFONaNIAO:0000115NaNA membrane-bounded organelle of eukaryotic cel...NaNNo problems with definition
1oaklib.om:DCC#S3GO:0043227membrane-bounded organelleWARNINGNaNIAO:0000115NaNOrganized structure of distinctive morphology ...NaNCannot parse genus and differentia
2oaklib.om:DCC#S11GO:0043227membrane-bounded organelleNaNNaNIAO:0000115NaNNaNNaNLogical definition element not found in text: ...
3oaklib.om:DCC#AnyGO:0110165cellular anatomical entityINFONaNIAO:0000115NaNA part of a cellular organism that is either a...NaNNo problems with definition
4oaklib.om:DCC#S3GO:0099568cytoplasmic regionWARNINGNaNIAO:0000115NaNAny (proper) part of the cytoplasm of a single...NaNCannot parse genus and differentia
5oaklib.om:DCC#S1GO:0005737cytoplasmNaNNaNIAO:0000115NaNNaNNaNDefiniendum should not appear at the start
6oaklib.om:DCC#S3GO:0043229intracellular organelleWARNINGNaNIAO:0000115NaNOrganized structure of distinctive morphology ...NaNCannot parse genus and differentia
7oaklib.om:DCC#S11GO:0043229intracellular organelleNaNNaNIAO:0000115NaNNaNNaNLogical definition element not found in text: ...
8oaklib.om:DCC#S11GO:0043229intracellular organelleNaNNaNIAO:0000115NaNNaNNaNLogical definition element not found in text: ...
9oaklib.om:DCC#AnyGO:0005886plasma membraneINFONaNIAO:0000115NaNThe membrane surrounding a cell that separates...NaNNo problems with definition
10oaklib.om:DCC#AnyGO:0098590plasma membrane regionINFONaNIAO:0000115NaNA membrane that is a (regional) part of the pl...NaNNo problems with definition
11oaklib.om:DCC#S3GO:9999998fake term for testing pmid typeWARNINGNaNIAO:0000115NaNfake definition to test retracted typo in refe...NaNCannot parse genus and differentia
12oaklib.om:DCC#S1GO:0005773vacuoleNaNNaNIAO:0000115NaNNaNNaNDefiniendum should not appear at the start
13oaklib.om:DCC#S3GO:9999999fake term for testing retractionWARNINGNaNIAO:0000115NaNfake definition to test retracted referenceNaNCannot parse genus and differentia
14oaklib.om:DCC#S3GO:0031975envelopeWARNINGNaNIAO:0000115NaNA multilayered structure surrounding all or pa...NaNCannot parse genus and differentia
15oaklib.om:DCC#S3GO:0005575cellular_componentWARNINGNaNIAO:0000115NaNA location, relative to cellular compartments ...NaNCannot parse genus and differentia
16oaklib.om:DCC#S11GO:0031090organelle membraneNaNNaNIAO:0000115NaNis one of the two lipid bilayers of an organel...NaNLogical definition element not found in text: ...
17oaklib.om:DCC#AnyGO:0034357photosynthetic membraneINFONaNIAO:0000115NaNA membrane enriched in complexes formed of rea...NaNNo problems with definition
18oaklib.om:DCC#S11GO:0031965nuclear membraneNaNNaNIAO:0000115NaNenvelopeNaNLogical definition element not found in text: ...
19oaklib.om:DCC#S11GO:0005938cell cortexNaNNaNIAO:0000115NaNregion of a cellNaNLogical definition element not found in text: ...
20oaklib.om:DCC#S11GO:0005938cell cortexNaNNaNIAO:0000115NaNlies just beneath the plasma membrane and ofte...NaNLogical definition element not found in text: ...
21oaklib.om:DCC#S0GO:0012505endomembrane systemERRORNaNIAO:0000115NaNNaNNaNMissing text definition
22oaklib.om:DCC#S7GO:0009579thylakoidNaNNaNIAO:0000115NaNThe structure in a plant cell that is known as...NaNCircular, thylakoid (GO:0009579 in definition
23oaklib.om:DCC#S3GO:0031967organelle envelopeWARNINGNaNIAO:0000115NaNA double membrane structure enclosing an organ...NaNCannot parse genus and differentia
24oaklib.om:DCC#S3GO:0043226organelleWARNINGNaNIAO:0000115NaNOrganized structure of distinctive morphology ...NaNCannot parse genus and differentia
25oaklib.om:DCC#S3GO:0071944cell peripheryWARNINGNaNIAO:0000115NaNThe part of a cell encompassing the cell corte...NaNCannot parse genus and differentia
26oaklib.om:DCC#S3GO:0043231intracellular membrane-bounded organelleWARNINGNaNIAO:0000115NaNOrganized structure of distinctive morphology ...NaNCannot parse genus and differentia
27oaklib.om:DCC#S11GO:0043231intracellular membrane-bounded organelleNaNNaNIAO:0000115NaNNaNNaNLogical definition element not found in text: ...
28oaklib.om:DCC#S11GO:0043231intracellular membrane-bounded organelleNaNNaNIAO:0000115NaNNaNNaNLogical definition element not found in text: ...
29oaklib.om:DCC#S3GO:0016020membraneWARNINGNaNIAO:0000115NaNA lipid bilayer along with all the proteins an...NaNCannot parse genus and differentia
30oaklib.om:DCC#S3GO:0099738cell cortex regionNaNNaNIAO:0000115NaNcomplete extent of cell cortexNaNDid not match whole text: cell cortex < comple...
31oaklib.om:DCC#S11GO:0099738cell cortex regionNaNNaNIAO:0000115NaNunderlies some some region of the plasma membraneNaNWrong position, 'cell cortex' not in 'underlie...
32oaklib.om:DCC#AnyGO:0005635nuclear envelopeINFONaNIAO:0000115NaNA double lipid bilayer that is part of the nuc...NaNNo problems with definition
33oaklib.om:DCC#S3GO:0005622intracellular anatomical structureWARNINGNaNIAO:0000115NaNA component of a cell contained within (but no...NaNCannot parse genus and differentia
34oaklib.om:DCC#S20.1GO:9999998fake term for testing pmid typeERRORNaNIAO:0000115PMID:9999999999999NaNNaNpublication not found: PMID:9999999999999
35oaklib.om:DCC#S20.2GO:9999999fake term for testing retractionERRORNaNIAO:0000115PMID:19717156NaNNaNpublication is retracted: A role for plasma tr...
\n
" + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "df = pd.read_csv(\"output/validate-definitions.output.tsv\", sep=\"\\t\")\n", + "df" + ] + }, + { + "cell_type": "markdown", + "id": "f4209133-fd5c-4ecd-a0c4-a5dc4cb8a57a", + "metadata": {}, + "source": [ + "The rows conform to ValidationResults in the [OAK ontology-metadata](https://w3id.org/oak/ontology-metadata/) data model.\n", + "\n", + "The values of the type field are from the [DefinitionConstraintComponent](https://w3id.org/oak/ontology-metadata/DefinitionConstraintComponent) enumeration.\n", + "\n", + "These themselves are modeled off of the taxonomy from Seppälä, Ruttenberg, and Smith, [Guidelines for writing definitions in ontologies](https://philpapers.org/archive/SEPGFW.pdf)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "421c556c-df3e-4281-914b-613e3d467036", + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-15T00:50:30.958784Z", + "start_time": "2024-04-15T00:50:30.954200Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": "array(['oaklib.om:DCC#Any', 'oaklib.om:DCC#S3', 'oaklib.om:DCC#S11',\n 'oaklib.om:DCC#S1', 'oaklib.om:DCC#S0', 'oaklib.om:DCC#S7',\n 'oaklib.om:DCC#S20.1', 'oaklib.om:DCC#S20.2'], dtype=object)" + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[\"type\"].unique()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aea2cfe0-70bf-4b76-89e2-2bfdbdd3a084", + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-15T00:50:30.966660Z", + "start_time": "2024-04-15T00:50:30.962252Z" + } + }, + "outputs": [ + { + "data": { + "text/plain": " type counts\n0 oaklib.om:DCC#Any 6\n1 oaklib.om:DCC#S0 1\n2 oaklib.om:DCC#S1 2\n3 oaklib.om:DCC#S11 10\n4 oaklib.om:DCC#S20.1 1\n5 oaklib.om:DCC#S20.2 1\n6 oaklib.om:DCC#S3 14\n7 oaklib.om:DCC#S7 1", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typecounts
0oaklib.om:DCC#Any6
1oaklib.om:DCC#S01
2oaklib.om:DCC#S12
3oaklib.om:DCC#S1110
4oaklib.om:DCC#S20.11
5oaklib.om:DCC#S20.21
6oaklib.om:DCC#S314
7oaklib.om:DCC#S71
\n
" + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(\"type\").size().reset_index(name='counts')" + ] + }, + { + "cell_type": "markdown", + "source": [ + "Next we'll filter out less informative columns" + ], + "metadata": { + "collapsed": false + }, + "id": "f28d70f482239b30" + }, + { + "cell_type": "code", + "execution_count": 6, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label \\\n0 oaklib.om:DCC#Any GO:0005634 nucleus \n1 oaklib.om:DCC#S3 GO:0043227 membrane-bounded organelle \n2 oaklib.om:DCC#S11 GO:0043227 membrane-bounded organelle \n3 oaklib.om:DCC#Any GO:0110165 cellular anatomical entity \n4 oaklib.om:DCC#S3 GO:0099568 cytoplasmic region \n5 oaklib.om:DCC#S1 GO:0005737 cytoplasm \n6 oaklib.om:DCC#S3 GO:0043229 intracellular organelle \n7 oaklib.om:DCC#S11 GO:0043229 intracellular organelle \n8 oaklib.om:DCC#S11 GO:0043229 intracellular organelle \n9 oaklib.om:DCC#Any GO:0005886 plasma membrane \n10 oaklib.om:DCC#Any GO:0098590 plasma membrane region \n11 oaklib.om:DCC#S3 GO:9999998 fake term for testing pmid type \n12 oaklib.om:DCC#S1 GO:0005773 vacuole \n13 oaklib.om:DCC#S3 GO:9999999 fake term for testing retraction \n14 oaklib.om:DCC#S3 GO:0031975 envelope \n15 oaklib.om:DCC#S3 GO:0005575 cellular_component \n16 oaklib.om:DCC#S11 GO:0031090 organelle membrane \n17 oaklib.om:DCC#Any GO:0034357 photosynthetic membrane \n18 oaklib.om:DCC#S11 GO:0031965 nuclear membrane \n19 oaklib.om:DCC#S11 GO:0005938 cell cortex \n20 oaklib.om:DCC#S11 GO:0005938 cell cortex \n21 oaklib.om:DCC#S0 GO:0012505 endomembrane system \n22 oaklib.om:DCC#S7 GO:0009579 thylakoid \n23 oaklib.om:DCC#S3 GO:0031967 organelle envelope \n24 oaklib.om:DCC#S3 GO:0043226 organelle \n25 oaklib.om:DCC#S3 GO:0071944 cell periphery \n26 oaklib.om:DCC#S3 GO:0043231 intracellular membrane-bounded organelle \n27 oaklib.om:DCC#S11 GO:0043231 intracellular membrane-bounded organelle \n28 oaklib.om:DCC#S11 GO:0043231 intracellular membrane-bounded organelle \n29 oaklib.om:DCC#S3 GO:0016020 membrane \n30 oaklib.om:DCC#S3 GO:0099738 cell cortex region \n31 oaklib.om:DCC#S11 GO:0099738 cell cortex region \n32 oaklib.om:DCC#Any GO:0005635 nuclear envelope \n33 oaklib.om:DCC#S3 GO:0005622 intracellular anatomical structure \n34 oaklib.om:DCC#S20.1 GO:9999998 fake term for testing pmid type \n35 oaklib.om:DCC#S20.2 GO:9999999 fake term for testing retraction \n\n object_str \\\n0 A membrane-bounded organelle of eukaryotic cel... \n1 Organized structure of distinctive morphology ... \n2 NaN \n3 A part of a cellular organism that is either a... \n4 Any (proper) part of the cytoplasm of a single... \n5 NaN \n6 Organized structure of distinctive morphology ... \n7 NaN \n8 NaN \n9 The membrane surrounding a cell that separates... \n10 A membrane that is a (regional) part of the pl... \n11 fake definition to test retracted typo in refe... \n12 NaN \n13 fake definition to test retracted reference \n14 A multilayered structure surrounding all or pa... \n15 A location, relative to cellular compartments ... \n16 is one of the two lipid bilayers of an organel... \n17 A membrane enriched in complexes formed of rea... \n18 envelope \n19 region of a cell \n20 lies just beneath the plasma membrane and ofte... \n21 NaN \n22 The structure in a plant cell that is known as... \n23 A double membrane structure enclosing an organ... \n24 Organized structure of distinctive morphology ... \n25 The part of a cell encompassing the cell corte... \n26 Organized structure of distinctive morphology ... \n27 NaN \n28 NaN \n29 A lipid bilayer along with all the proteins an... \n30 complete extent of cell cortex \n31 underlies some some region of the plasma membrane \n32 A double lipid bilayer that is part of the nuc... \n33 A component of a cell contained within (but no... \n34 NaN \n35 NaN \n\n info \n0 No problems with definition \n1 Cannot parse genus and differentia \n2 Logical definition element not found in text: ... \n3 No problems with definition \n4 Cannot parse genus and differentia \n5 Definiendum should not appear at the start \n6 Cannot parse genus and differentia \n7 Logical definition element not found in text: ... \n8 Logical definition element not found in text: ... \n9 No problems with definition \n10 No problems with definition \n11 Cannot parse genus and differentia \n12 Definiendum should not appear at the start \n13 Cannot parse genus and differentia \n14 Cannot parse genus and differentia \n15 Cannot parse genus and differentia \n16 Logical definition element not found in text: ... \n17 No problems with definition \n18 Logical definition element not found in text: ... \n19 Logical definition element not found in text: ... \n20 Logical definition element not found in text: ... \n21 Missing text definition \n22 Circular, thylakoid (GO:0009579 in definition \n23 Cannot parse genus and differentia \n24 Cannot parse genus and differentia \n25 Cannot parse genus and differentia \n26 Cannot parse genus and differentia \n27 Logical definition element not found in text: ... \n28 Logical definition element not found in text: ... \n29 Cannot parse genus and differentia \n30 Did not match whole text: cell cortex < comple... \n31 Wrong position, 'cell cortex' not in 'underlie... \n32 No problems with definition \n33 Cannot parse genus and differentia \n34 publication not found: PMID:9999999999999 \n35 publication is retracted: A role for plasma tr... ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
0oaklib.om:DCC#AnyGO:0005634nucleusA membrane-bounded organelle of eukaryotic cel...No problems with definition
1oaklib.om:DCC#S3GO:0043227membrane-bounded organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
2oaklib.om:DCC#S11GO:0043227membrane-bounded organelleNaNLogical definition element not found in text: ...
3oaklib.om:DCC#AnyGO:0110165cellular anatomical entityA part of a cellular organism that is either a...No problems with definition
4oaklib.om:DCC#S3GO:0099568cytoplasmic regionAny (proper) part of the cytoplasm of a single...Cannot parse genus and differentia
5oaklib.om:DCC#S1GO:0005737cytoplasmNaNDefiniendum should not appear at the start
6oaklib.om:DCC#S3GO:0043229intracellular organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
7oaklib.om:DCC#S11GO:0043229intracellular organelleNaNLogical definition element not found in text: ...
8oaklib.om:DCC#S11GO:0043229intracellular organelleNaNLogical definition element not found in text: ...
9oaklib.om:DCC#AnyGO:0005886plasma membraneThe membrane surrounding a cell that separates...No problems with definition
10oaklib.om:DCC#AnyGO:0098590plasma membrane regionA membrane that is a (regional) part of the pl...No problems with definition
11oaklib.om:DCC#S3GO:9999998fake term for testing pmid typefake definition to test retracted typo in refe...Cannot parse genus and differentia
12oaklib.om:DCC#S1GO:0005773vacuoleNaNDefiniendum should not appear at the start
13oaklib.om:DCC#S3GO:9999999fake term for testing retractionfake definition to test retracted referenceCannot parse genus and differentia
14oaklib.om:DCC#S3GO:0031975envelopeA multilayered structure surrounding all or pa...Cannot parse genus and differentia
15oaklib.om:DCC#S3GO:0005575cellular_componentA location, relative to cellular compartments ...Cannot parse genus and differentia
16oaklib.om:DCC#S11GO:0031090organelle membraneis one of the two lipid bilayers of an organel...Logical definition element not found in text: ...
17oaklib.om:DCC#AnyGO:0034357photosynthetic membraneA membrane enriched in complexes formed of rea...No problems with definition
18oaklib.om:DCC#S11GO:0031965nuclear membraneenvelopeLogical definition element not found in text: ...
19oaklib.om:DCC#S11GO:0005938cell cortexregion of a cellLogical definition element not found in text: ...
20oaklib.om:DCC#S11GO:0005938cell cortexlies just beneath the plasma membrane and ofte...Logical definition element not found in text: ...
21oaklib.om:DCC#S0GO:0012505endomembrane systemNaNMissing text definition
22oaklib.om:DCC#S7GO:0009579thylakoidThe structure in a plant cell that is known as...Circular, thylakoid (GO:0009579 in definition
23oaklib.om:DCC#S3GO:0031967organelle envelopeA double membrane structure enclosing an organ...Cannot parse genus and differentia
24oaklib.om:DCC#S3GO:0043226organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
25oaklib.om:DCC#S3GO:0071944cell peripheryThe part of a cell encompassing the cell corte...Cannot parse genus and differentia
26oaklib.om:DCC#S3GO:0043231intracellular membrane-bounded organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
27oaklib.om:DCC#S11GO:0043231intracellular membrane-bounded organelleNaNLogical definition element not found in text: ...
28oaklib.om:DCC#S11GO:0043231intracellular membrane-bounded organelleNaNLogical definition element not found in text: ...
29oaklib.om:DCC#S3GO:0016020membraneA lipid bilayer along with all the proteins an...Cannot parse genus and differentia
30oaklib.om:DCC#S3GO:0099738cell cortex regioncomplete extent of cell cortexDid not match whole text: cell cortex < comple...
31oaklib.om:DCC#S11GO:0099738cell cortex regionunderlies some some region of the plasma membraneWrong position, 'cell cortex' not in 'underlie...
32oaklib.om:DCC#AnyGO:0005635nuclear envelopeA double lipid bilayer that is part of the nuc...No problems with definition
33oaklib.om:DCC#S3GO:0005622intracellular anatomical structureA component of a cell contained within (but no...Cannot parse genus and differentia
34oaklib.om:DCC#S20.1GO:9999998fake term for testing pmid typeNaNpublication not found: PMID:9999999999999
35oaklib.om:DCC#S20.2GO:9999999fake term for testing retractionNaNpublication is retracted: A role for plasma tr...
\n
" + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = df[[\"type\", \"subject\", \"subject_label\", \"object_str\", \"info\"]]\n", + "df" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:50:30.994801Z", + "start_time": "2024-04-15T00:50:30.971926Z" + } + }, + "id": "c1df05dd32082e69" + }, + { + "cell_type": "markdown", + "source": [ + "## Missing Definitions\n", + "\n", + "This is the most trivial way to fail a definition check - not to include one. We can see all the missing definitions:\n" + ], + "metadata": { + "collapsed": false + }, + "id": "8ad6ef24d0daf11f" + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label object_str \\\n21 oaklib.om:DCC#S0 GO:0012505 endomembrane system NaN \n\n info \n21 Missing text definition ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
21oaklib.om:DCC#S0GO:0012505endomembrane systemNaNMissing text definition
\n
" + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"type\"] == \"oaklib.om:DCC#S0\"]\n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:50:31.048081Z", + "start_time": "2024-04-15T00:50:30.979466Z" + } + }, + "id": "381e7c7da587668e" + }, + { + "cell_type": "markdown", + "source": [ + "Of course, in the real ontology this term has a definition" + ], + "metadata": { + "collapsed": false + }, + "id": "f8844c7876451383" + }, + { + "cell_type": "markdown", + "source": [ + "## Non genus-differentia structure\n", + "\n", + "The OAK validate definitions command follows [SRS]( https://philpapers.org/archive/SEPGFW.pdf) and assumes good definitions follow genus-differentia structure.\n", + "\n", + "We can see the ones that fail this (S3):" + ], + "metadata": { + "collapsed": false + }, + "id": "c098cdf7a5665add" + }, + { + "cell_type": "code", + "execution_count": 8, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label \\\n1 oaklib.om:DCC#S3 GO:0043227 membrane-bounded organelle \n4 oaklib.om:DCC#S3 GO:0099568 cytoplasmic region \n6 oaklib.om:DCC#S3 GO:0043229 intracellular organelle \n11 oaklib.om:DCC#S3 GO:9999998 fake term for testing pmid type \n13 oaklib.om:DCC#S3 GO:9999999 fake term for testing retraction \n14 oaklib.om:DCC#S3 GO:0031975 envelope \n15 oaklib.om:DCC#S3 GO:0005575 cellular_component \n23 oaklib.om:DCC#S3 GO:0031967 organelle envelope \n24 oaklib.om:DCC#S3 GO:0043226 organelle \n25 oaklib.om:DCC#S3 GO:0071944 cell periphery \n26 oaklib.om:DCC#S3 GO:0043231 intracellular membrane-bounded organelle \n29 oaklib.om:DCC#S3 GO:0016020 membrane \n30 oaklib.om:DCC#S3 GO:0099738 cell cortex region \n33 oaklib.om:DCC#S3 GO:0005622 intracellular anatomical structure \n\n object_str \\\n1 Organized structure of distinctive morphology ... \n4 Any (proper) part of the cytoplasm of a single... \n6 Organized structure of distinctive morphology ... \n11 fake definition to test retracted typo in refe... \n13 fake definition to test retracted reference \n14 A multilayered structure surrounding all or pa... \n15 A location, relative to cellular compartments ... \n23 A double membrane structure enclosing an organ... \n24 Organized structure of distinctive morphology ... \n25 The part of a cell encompassing the cell corte... \n26 Organized structure of distinctive morphology ... \n29 A lipid bilayer along with all the proteins an... \n30 complete extent of cell cortex \n33 A component of a cell contained within (but no... \n\n info \n1 Cannot parse genus and differentia \n4 Cannot parse genus and differentia \n6 Cannot parse genus and differentia \n11 Cannot parse genus and differentia \n13 Cannot parse genus and differentia \n14 Cannot parse genus and differentia \n15 Cannot parse genus and differentia \n23 Cannot parse genus and differentia \n24 Cannot parse genus and differentia \n25 Cannot parse genus and differentia \n26 Cannot parse genus and differentia \n29 Cannot parse genus and differentia \n30 Did not match whole text: cell cortex < comple... \n33 Cannot parse genus and differentia ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
1oaklib.om:DCC#S3GO:0043227membrane-bounded organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
4oaklib.om:DCC#S3GO:0099568cytoplasmic regionAny (proper) part of the cytoplasm of a single...Cannot parse genus and differentia
6oaklib.om:DCC#S3GO:0043229intracellular organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
11oaklib.om:DCC#S3GO:9999998fake term for testing pmid typefake definition to test retracted typo in refe...Cannot parse genus and differentia
13oaklib.om:DCC#S3GO:9999999fake term for testing retractionfake definition to test retracted referenceCannot parse genus and differentia
14oaklib.om:DCC#S3GO:0031975envelopeA multilayered structure surrounding all or pa...Cannot parse genus and differentia
15oaklib.om:DCC#S3GO:0005575cellular_componentA location, relative to cellular compartments ...Cannot parse genus and differentia
23oaklib.om:DCC#S3GO:0031967organelle envelopeA double membrane structure enclosing an organ...Cannot parse genus and differentia
24oaklib.om:DCC#S3GO:0043226organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
25oaklib.om:DCC#S3GO:0071944cell peripheryThe part of a cell encompassing the cell corte...Cannot parse genus and differentia
26oaklib.om:DCC#S3GO:0043231intracellular membrane-bounded organelleOrganized structure of distinctive morphology ...Cannot parse genus and differentia
29oaklib.om:DCC#S3GO:0016020membraneA lipid bilayer along with all the proteins an...Cannot parse genus and differentia
30oaklib.om:DCC#S3GO:0099738cell cortex regioncomplete extent of cell cortexDid not match whole text: cell cortex < comple...
33oaklib.om:DCC#S3GO:0005622intracellular anatomical structureA component of a cell contained within (but no...Cannot parse genus and differentia
\n
" + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"type\"] == \"oaklib.om:DCC#S3\"]" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:50:31.052182Z", + "start_time": "2024-04-15T00:50:30.987744Z" + } + }, + "id": "9cf1490c83491596" + }, + { + "cell_type": "markdown", + "source": [ + "Many of these are actual definitions rather than ones manipulated for test purposes.\n", + "\n", + "There is room for valid disagreement about whether rewriting some of these following genus-differentia form would improve things for either users or annotators. Arguably at least the subtypes of organelle could simply state how they are differentiated from organelles in general rather than repeating the somewhat wordy _\"Organized structure of distinctive morphology...\"_" + ], + "metadata": { + "collapsed": false + }, + "id": "27f9e7b747b071de" + }, + { + "cell_type": "markdown", + "source": [ + "## Circular definitions" + ], + "metadata": { + "collapsed": false + }, + "id": "c56d3a9c531e5a09" + }, + { + "cell_type": "code", + "execution_count": 9, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label \\\n22 oaklib.om:DCC#S7 GO:0009579 thylakoid \n\n object_str \\\n22 The structure in a plant cell that is known as... \n\n info \n22 Circular, thylakoid (GO:0009579 in definition ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
22oaklib.om:DCC#S7GO:0009579thylakoidThe structure in a plant cell that is known as...Circular, thylakoid (GO:0009579 in definition
\n
" + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"type\"] == \"oaklib.om:DCC#S7\"]" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:50:31.052559Z", + "start_time": "2024-04-15T00:50:30.994899Z" + } + }, + "id": "adcbad5fae63e7fb" + }, + { + "cell_type": "markdown", + "source": [ + "## Not following convention" + ], + "metadata": { + "collapsed": false + }, + "id": "34eb55cf06afa332" + }, + { + "cell_type": "code", + "execution_count": 10, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label object_str \\\n5 oaklib.om:DCC#S1 GO:0005737 cytoplasm NaN \n12 oaklib.om:DCC#S1 GO:0005773 vacuole NaN \n\n info \n5 Definiendum should not appear at the start \n12 Definiendum should not appear at the start ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
5oaklib.om:DCC#S1GO:0005737cytoplasmNaNDefiniendum should not appear at the start
12oaklib.om:DCC#S1GO:0005773vacuoleNaNDefiniendum should not appear at the start
\n
" + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"type\"] == \"oaklib.om:DCC#S1\"]" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:50:31.062863Z", + "start_time": "2024-04-15T00:50:31.004181Z" + } + }, + "id": "cf4d18796842b46" + }, + { + "cell_type": "markdown", + "source": [ + "## Definition Reference Issues\n", + "\n", + "### Typos in PMIDs\n" + ], + "metadata": { + "collapsed": false + }, + "id": "4c5189bd46804bd8" + }, + { + "cell_type": "code", + "execution_count": 11, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label \\\n34 oaklib.om:DCC#S20.1 GO:9999998 fake term for testing pmid type \n\n object_str info \n34 NaN publication not found: PMID:9999999999999 ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
34oaklib.om:DCC#S20.1GO:9999998fake term for testing pmid typeNaNpublication not found: PMID:9999999999999
\n
" + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"type\"] == \"oaklib.om:DCC#S20.1\"]\n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:51:38.780848Z", + "start_time": "2024-04-15T00:51:38.770256Z" + } + }, + "id": "35e1f10deba2c6c9" + }, + { + "cell_type": "markdown", + "source": [ + "### Retracted publications" + ], + "metadata": { + "collapsed": false + }, + "id": "7a288d8fc507acc4" + }, + { + "cell_type": "code", + "execution_count": 12, + "outputs": [ + { + "data": { + "text/plain": " type subject subject_label \\\n35 oaklib.om:DCC#S20.2 GO:9999999 fake term for testing retraction \n\n object_str info \n35 NaN publication is retracted: A role for plasma tr... ", + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
typesubjectsubject_labelobject_strinfo
35oaklib.om:DCC#S20.2GO:9999999fake term for testing retractionNaNpublication is retracted: A role for plasma tr...
\n
" + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df[df[\"type\"] == \"oaklib.om:DCC#S20.2\"]\n" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T00:52:02.693591Z", + "start_time": "2024-04-15T00:52:02.687692Z" + } + }, + "id": "f5245d99ab0864d5" + }, + { + "cell_type": "markdown", + "source": [ + "# Using LLMs to validate definitions\n", + "\n", + "For this example we will use an LLM to validate this GO catalytic activity:\n", + "\n", + "```yaml\n", + "[Term]\n", + "id: GO:0000010\n", + "name: trans-hexaprenyltranstransferase activity\n", + "namespace: molecular_function\n", + "alt_id: GO:0036422\n", + "def: \"Catalysis of the reaction: (2E,6E)-farnesyl diphosphate + 4 isopentenyl diphosphate = 4 diphosphate + all-trans-heptaprenyl diphosphate.\" [PMID:9708911, RHEA:27794]\n", + "synonym: \"all-trans-heptaprenyl-diphosphate synthase activity\" RELATED [EC:2.5.1.30]\n", + "synonym: \"HepPP synthase activity\" RELATED [EC:2.5.1.30]\n", + "synonym: \"heptaprenyl diphosphate synthase activity\" RELATED []\n", + "synonym: \"heptaprenyl pyrophosphate synthase activity\" RELATED [EC:2.5.1.30]\n", + "synonym: \"heptaprenyl pyrophosphate synthetase activity\" RELATED [EC:2.5.1.30]\n", + "xref: EC:2.5.1.30\n", + "xref: MetaCyc:TRANS-HEXAPRENYLTRANSTRANSFERASE-RXN\n", + "xref: RHEA:27794\n", + "```\n", + "\n", + "There are two references for this:\n", + "\n", + " - the publication [PMID:9708911](https://pubmed.ncbi.nlm.nih.gov/9708911/)\n", + " - the RHEA reaction [RHEA:27794](https://www.rhea-db.org/reaction?id=27794)" + ], + "metadata": { + "collapsed": false + }, + "id": "7e8d97bc6e6c20b0" + }, + { + "cell_type": "code", + "execution_count": 5, + "outputs": [], + "source": [ + "!runoak --stacktrace -i llm:{claude-3-opus}:simpleobo:input/validate-defs-test.obo validate-definitions -C input/validate-definition-conf.yaml GO:0000010 -O yaml -o output/validate-definitions.llm.yaml" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T01:00:28.475900Z", + "start_time": "2024-04-15T01:00:13.437742Z" + } + }, + "id": "4e29eb9d8ff5df4c" + }, + { + "cell_type": "code", + "execution_count": 7, + "outputs": [], + "source": [ + "import yaml\n", + "report = yaml.safe_load(open(\"output/validate-definitions.llm.yaml\"))" + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T01:01:41.771699Z", + "start_time": "2024-04-15T01:01:41.744373Z" + } + }, + "id": "69f6da5532285cf9" + }, + { + "cell_type": "code", + "execution_count": 21, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "type: https://w3id.org/oak/ontology-metadata/DCC.S20\n", + "subject: GO:0000010\n", + "severity: ERROR\n", + "predicate: IAO:0000115\n", + "object_str: \n", + " id: PMID:9708911\n", + " title: Biological significance of the side chain length of ubiquinone in Saccharomyces\n", + " cerevisiae.\n", + " abstract: Ubiquinone (UQ), an important component of the electron transfer system,\n", + " is constituted of a quinone structure and a side chain isoprenoid. The side chain\n", + " length of UQ differs between microorganisms, and this difference has been used for\n", + " taxonomic study. In this study, we have addressed the importance of the length of\n", + " the side chain of UQ for cells, and examined the effect of chain length by producing\n", + " UQs with isoprenoid chain lengths between 5 and 10 in Saccharomyces cerevisiae.\n", + " To make the different UQ species, different types of prenyl diphosphate synthases\n", + " were expressed in a S. cerevisiae COQ1 mutant defective for hexaprenyl diphosphate\n", + " synthesis. As a result, we found that the original species of UQ (in this case UQ-6)\n", + " had maximum functionality. However, we found that other species of UQ could replace\n", + " UQ-6. Thus a broad spectrum of different UQ species are biologically functional\n", + " in yeast cells, although cells seem to display a preference for their own particular\n", + " type of UQ.\n", + " publication_type: Research Support, Non-U.S. Gov't\n", + " \n", + "\n", + "info: \n", + " The definition for the term \"trans-hexaprenyltranstransferase activity\" has a LOW level of alignment with the cited reference PMID:9708911.\n", + " \n", + " The abstract does not specifically mention the term \"trans-hexaprenyltranstransferase activity\". It discusses the biological significance of the side chain length of ubiquinone in Saccharomyces cerevisiae, and how different prenyl diphosphate synthases were expressed in a COQ1 mutant defective for hexaprenyl diphosphate synthesis to produce UQs with different isoprenoid chain lengths.\n", + " \n", + " While the study involves manipulating the synthesis of hexaprenyl diphosphate, which is likely catalyzed by trans-hexaprenyltranstransferase, the enzyme itself is not explicitly mentioned or studied in the abstract.\n", + " \n", + " The definition seems too specific for the cited reference, as the abstract does not directly investigate or discuss the activity of trans-hexaprenyltranstransferase.\n", + "\n", + "definition: \n", + " Catalysis of the reaction: (2E,6E)-farnesyl diphosphate + 4 isopentenyl diphosphate = 4 diphosphate + all-trans-heptaprenyl diphosphate.\n", + "\n", + "definition_source: PMID:9708911\n" + ] + } + ], + "source": [ + "for k, v in report.items():\n", + " if len(str(v)) > 50:\n", + " lines = v.split(\"\\n\")\n", + " lines = [f\" {line}\" for line in lines]\n", + " lines = [\"\"] + lines + [\"\"]\n", + " v = \"\\n\".join(lines)\n", + " print(f\"{k}: {v}\")\n", + "\n", + " " + ], + "metadata": { + "collapsed": false, + "ExecuteTime": { + "end_time": "2024-04-15T01:09:34.475682Z", + "start_time": "2024-04-15T01:09:34.465369Z" + } + }, + "id": "b35f8ffab12b1b6b" + }, + { + "cell_type": "markdown", + "source": [ + "While in this case, the LLM is failing to see that the paper is indeed about trans-hexaprenyltranstransferase activity, the output is useful as it shows us that the abstract is not directly about this activity." + ], + "metadata": { + "collapsed": false + }, + "id": "233f8a645b3517f2" + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "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.9.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/notebooks/Commands/ValidateMappings.ipynb b/notebooks/Commands/ValidateMappings.ipynb index 600781d82..0be33f7f2 100644 --- a/notebooks/Commands/ValidateMappings.ipynb +++ b/notebooks/Commands/ValidateMappings.ipynb @@ -5,7 +5,7 @@ "id": "0a28b88d-4deb-4d0a-a110-f27adf077e23", "metadata": {}, "source": [ - "# OAK apply command\n", + "# OAK validate-mappings command\n", "\n", "This notebook is intended as a supplement to the [main OAK CLI docs](https://incatools.github.io/ontology-access-kit/cli.html).\n", "\n", diff --git a/notebooks/Commands/input/validate-definition-conf.yaml b/notebooks/Commands/input/validate-definition-conf.yaml new file mode 100644 index 000000000..7aa93de41 --- /dev/null +++ b/notebooks/Commands/input/validate-definition-conf.yaml @@ -0,0 +1 @@ +lookup_references: true diff --git a/notebooks/Commands/input/validate-defs-test.obo b/notebooks/Commands/input/validate-defs-test.obo new file mode 100644 index 000000000..26b1e3031 --- /dev/null +++ b/notebooks/Commands/input/validate-defs-test.obo @@ -0,0 +1,2796 @@ +format-version: 1.2 +synonymtypedef: systematic_synonym "Systematic synonym" EXACT +subsetdef: gocheck_do_not_annotate "Term not to be used for direct annotation" +subsetdef: gocheck_do_not_manually_annotate "Term not to be used for direct manual annotation" +subsetdef: goslim_agr "AGR slim" +subsetdef: goslim_aspergillus "Aspergillus GO slim" +subsetdef: goslim_candida "Candida GO slim" +subsetdef: goslim_chembl "ChEMBL protein targets summary" +subsetdef: goslim_drosophila "Drosophila GO slim" +subsetdef: goslim_flybase_ribbon "FlyBase Drosophila GO ribbon slim" +subsetdef: goslim_generic "Generic GO slim" +subsetdef: goslim_metagenomics "Metagenomics GO slim" +subsetdef: goslim_mouse "Mouse GO slim" +subsetdef: goslim_pir "PIR GO slim" +subsetdef: goslim_plant "Plant GO slim" +subsetdef: goslim_pombe "Fission yeast GO slim" +subsetdef: goslim_synapse "synapse GO slim" +subsetdef: goslim_yeast "Yeast GO slim" +subsetdef: prokaryote_subset "GO subset for prokaryotes" +ontology: go +data-version: releases/2020-01-01/ +idspace: NCBITaxon_Union http://purl.obolibrary.org/obo/NCBITaxon_Union_ +idspace: SWEET http://identifiers.org/sweet/ + +[Term] +id: BFO:0000002 +name: continuant +def: "An entity that exists in full at any time in which it exists at all, persists through time while maintaining its identity and has no temporal parts." [] +disjoint_from: BFO:0000003 ! occurrent +relationship: part_of BFO:0000002 ! continuant + +[Term] +id: BFO:0000003 +name: occurrent +def: "An entity that has temporal parts and that happens, unfolds or develops through time." [] +relationship: part_of BFO:0000003 ! occurrent + +[Term] +id: BFO:0000004 +name: independent continuant +def: "A continuant that is a bearer of quality and realizable entity entities, in which other entities inhere and which itself cannot inhere in anything." [] +is_a: BFO:0000002 ! continuant +disjoint_from: BFO:0000020 ! specifically dependent continuant +relationship: part_of BFO:0000004 ! independent continuant + +[Term] +id: BFO:0000015 +name: process +def: "An occurrent that has temporal proper parts and for some time t, p s-depends_on some material entity at t." [] +is_a: BFO:0000003 ! occurrent + +[Term] +id: BFO:0000017 +name: realizable entity +def: "A specifically dependent continuant that inheres in continuant entities and are not exhibited in full at every time in which it inheres in an entity or group of entities. The exhibition or actualization of a realizable entity is a particular manifestation, functioning or process that occurs under certain circumstances." [] +is_a: BFO:0000020 ! specifically dependent continuant +relationship: part_of BFO:0000017 ! realizable entity + +[Term] +id: BFO:0000020 +name: specifically dependent continuant +def: "A continuant that inheres in or is borne by other entities. Every instance of A requires some specific instance of B which must always be the same." [] +is_a: BFO:0000002 ! continuant +relationship: part_of BFO:0000020 ! specifically dependent continuant + +[Term] +id: BFO:0000023 +name: role +def: "A realizable entity the manifestation of which brings about some result or end that is not essential to a continuant in virtue of the kind of thing that it is but that can be served or participated in by that kind of continuant in some kinds of natural, social or institutional contexts." [] +is_a: BFO:0000017 ! realizable entity +equivalent_to: CHEBI:50906 ! role + +[Term] +id: BFO:0000040 +name: material entity +def: "An independent continuant that is spatially extended whose identity is independent of that of other entities and can be maintained through time." [] +is_a: BFO:0000004 ! independent continuant + +[Term] +id: CARO:0000000 +name: anatomical entity +is_a: CARO:0030000 ! biological entity + +[Term] +id: CARO:0000003 +name: connected anatomical structure +is_a: CARO:0000006 ! material anatomical entity + +[Term] +id: CARO:0000006 +name: material anatomical entity +is_a: BFO:0000040 ! material entity +is_a: CARO:0000000 ! anatomical entity + +[Term] +id: CARO:0001010 +name: organism or virus or viroid +is_a: BFO:0000040 ! material entity + +[Term] +id: CARO:0030000 +name: biological entity +is_a: BFO:0000004 ! independent continuant + +[Term] +id: CHEBI:10545 +name: electron +subset: chebi_ph7_3 +is_a: CHEBI:36338 ! lepton + +[Term] +id: CHEBI:23367 +name: molecular entity +is_a: CHEBI:24431 ! chemical entity + +[Term] +id: CHEBI:24431 +name: chemical entity +subset: chebi_ph7_3 +is_a: BFO:0000040 ! material entity + +[Term] +id: CHEBI:24432 +name: biological role +is_a: BFO:0000023 ! role +is_a: CHEBI:50906 ! role + +[Term] +id: CHEBI:24433 +name: group +is_a: CHEBI:24431 ! chemical entity +relationship: has_part CHEBI:33250 ! atom + +[Term] +id: CHEBI:25585 +name: nonmetal atom +is_a: CHEBI:33250 ! atom + +[Term] +id: CHEBI:26020 +name: phosphate +is_a: CHEBI:26079 ! phosphoric acid derivative + +[Term] +id: CHEBI:26079 +name: phosphoric acid derivative +is_a: CHEBI:36359 ! phosphorus oxoacid derivative + +[Term] +id: CHEBI:26082 +name: phosphorus molecular entity +is_a: CHEBI:33302 ! pnictogen molecular entity +relationship: has_part CHEBI:28659 ! phosphorus atom + +[Term] +id: CHEBI:28659 +name: phosphorus atom +subset: chebi_ph7_3 +is_a: CHEBI:25585 ! nonmetal atom +is_a: CHEBI:33300 ! pnictogen +relationship: has_role CHEBI:33937 ! macronutrient + +[Term] +id: CHEBI:33233 +name: fundamental particle +is_a: CHEBI:36342 ! subatomic particle + +[Term] +id: CHEBI:33241 +name: oxoacid derivative +is_a: CHEBI:37577 ! heteroatomic molecular entity + +[Term] +id: CHEBI:33250 +name: atom +is_a: CHEBI:24431 ! chemical entity +relationship: has_part CHEBI:10545 ! electron +relationship: has_part CHEBI:33252 ! atomic nucleus + +[Term] +id: CHEBI:33252 +name: atomic nucleus +is_a: CHEBI:36347 ! nuclear particle +relationship: has_part CHEBI:33253 ! nucleon + +[Term] +id: CHEBI:33253 +name: nucleon +is_a: CHEBI:36339 ! baryon +is_a: CHEBI:36347 ! nuclear particle + +[Term] +id: CHEBI:33284 +name: nutrient +is_a: CHEBI:78295 ! food component + +[Term] +id: CHEBI:33300 +name: pnictogen +is_a: CHEBI:33560 ! p-block element atom + +[Term] +id: CHEBI:33302 +name: pnictogen molecular entity +is_a: CHEBI:33675 ! p-block molecular entity +relationship: has_part CHEBI:33300 ! pnictogen + +[Term] +id: CHEBI:33318 +name: main group element atom +is_a: CHEBI:33250 ! atom + +[Term] +id: CHEBI:33560 +name: p-block element atom +is_a: CHEBI:33318 ! main group element atom + +[Term] +id: CHEBI:33579 +name: main group molecular entity +is_a: CHEBI:23367 ! molecular entity +relationship: has_part CHEBI:33318 ! main group element atom + +[Term] +id: CHEBI:33675 +name: p-block molecular entity +is_a: CHEBI:33579 ! main group molecular entity +relationship: has_part CHEBI:33560 ! p-block element atom + +[Term] +id: CHEBI:33937 +name: macronutrient +is_a: CHEBI:33284 ! nutrient + +[Term] +id: CHEBI:36338 +name: lepton +is_a: CHEBI:33233 ! fundamental particle +is_a: CHEBI:36340 ! fermion +property_value: skos:exactMatch SWEET:lepton + +[Term] +id: CHEBI:36339 +name: baryon +is_a: CHEBI:36340 ! fermion +is_a: CHEBI:36344 ! hadron + +[Term] +id: CHEBI:36340 +name: fermion +is_a: CHEBI:36342 ! subatomic particle + +[Term] +id: CHEBI:36342 +name: subatomic particle + +[Term] +id: CHEBI:36343 +name: composite particle +is_a: CHEBI:36342 ! subatomic particle + +[Term] +id: CHEBI:36344 +name: hadron +is_a: CHEBI:36343 ! composite particle + +[Term] +id: CHEBI:36347 +name: nuclear particle +is_a: CHEBI:36342 ! subatomic particle + +[Term] +id: CHEBI:36357 +name: polyatomic entity +is_a: CHEBI:23367 ! molecular entity +relationship: has_part CHEBI:24433 ! group + +[Term] +id: CHEBI:36359 +name: phosphorus oxoacid derivative +is_a: CHEBI:33241 ! oxoacid derivative +is_a: CHEBI:36360 ! phosphorus oxoacids and derivatives + +[Term] +id: CHEBI:36360 +name: phosphorus oxoacids and derivatives +is_a: CHEBI:26082 ! phosphorus molecular entity + +[Term] +id: CHEBI:37577 +name: heteroatomic molecular entity +is_a: CHEBI:36357 ! polyatomic entity + +[Term] +id: CHEBI:50906 +name: role +is_a: BFO:0000017 ! realizable entity + +[Term] +id: CHEBI:52211 +name: physiological role +is_a: CHEBI:24432 ! biological role + +[Term] +id: CHEBI:78295 +name: food component +is_a: CHEBI:52211 ! physiological role + +[Term] +id: CL:0000000 +name: cell +def: "A material entity of anatomical origin (part of or deriving from an organism) that has as its parts a maximally connected cell compartment surrounded by a plasma membrane." [] +is_a: CARO:0000003 ! connected anatomical structure +disjoint_from: GO:0043226 ! organelle +relationship: only_in_taxon NCBITaxon:131567 ! cellular organisms + +[Term] +id: GO:0003674 +name: molecular_function +namespace: molecular_function +alt_id: GO:0005554 +def: "A molecular_function that is in GO." [OAK:FakeDefinitionForTesting] +comment: Note that, in addition to forming the root of the molecular function ontology, this term is recommended for use for the annotation of gene products whose molecular function is unknown. When this term is used for annotation, it indicates that no information was available about the molecular function of the gene product annotated as of the date the annotation was made; the evidence code 'no data' (ND), is used to indicate this. Despite its name, this is not a type of 'function' in the sense typically defined by upper ontologies such as Basic Formal Ontology (BFO). It is instead a BFO:process carried out by a single gene product or complex. +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +synonym: "molecular function" EXACT [] +is_a: BFO:0000015 ! process +disjoint_from: GO:0005575 ! cellular_component +disjoint_from: GO:0008150 ! biological_process + +[Term] +id: GO:0003824 +name: catalytic activity +namespace: molecular_function +def: "Catalysis of a biochemical reaction at physiological temperatures. In biologically catalyzed reactions, the reactants are known as substrates, and the catalysts are naturally occurring macromolecular substances known as enzymes. Enzymes possess specific binding sites for substrates, and are usually composed wholly or largely of protein, but RNA that has catalytic activity (ribozyme) is often also regarded as enzymatic." [GOC:vw, ISBN:0198506732] +subset: goslim_agr +subset: goslim_chembl +subset: goslim_flybase_ribbon +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +synonym: "enzyme activity" EXACT [GOC:dph, GOC:tb] +xref: Wikipedia:Enzyme +is_a: GO:0003674 ! molecular_function + +[Term] +id: GO:0004857 +name: enzyme inhibitor activity +namespace: molecular_function +alt_id: GO:0048551 +def: "Binds to and stops, prevents or reduces the activity of an enzyme." [GOC:ai, GOC:ebc] +synonym: "metalloenzyme inhibitor activity" NARROW [] +is_a: GO:0003674 ! molecular_function +intersection_of: GO:0003674 ! molecular_function +intersection_of: negatively_regulates GO:0003824 ! catalytic activity +relationship: negatively_regulates GO:0003824 ! catalytic activity +relationship: part_of GO:0043086 ! negative regulation of catalytic activity + +[Term] +id: GO:0000010 +name: trans-hexaprenyltranstransferase activity +namespace: molecular_function +alt_id: GO:0036422 +def: "Catalysis of the reaction: (2E,6E)-farnesyl diphosphate + 4 isopentenyl diphosphate = 4 diphosphate + all-trans-heptaprenyl diphosphate." [PMID:9708911, RHEA:27794] +synonym: "all-trans-heptaprenyl-diphosphate synthase activity" RELATED [EC:2.5.1.30] +synonym: "HepPP synthase activity" RELATED [EC:2.5.1.30] +synonym: "heptaprenyl diphosphate synthase activity" RELATED [] +synonym: "heptaprenyl pyrophosphate synthase activity" RELATED [EC:2.5.1.30] +synonym: "heptaprenyl pyrophosphate synthetase activity" RELATED [EC:2.5.1.30] +xref: EC:2.5.1.30 +xref: MetaCyc:TRANS-HEXAPRENYLTRANSTRANSFERASE-RXN +xref: RHEA:27794 +is_a: GO:0003824 ! catalytic activity + +[Term] +id: GO:0005575 +name: cellular_component +namespace: cellular_component +alt_id: GO:0008372 +def: "A location, relative to cellular compartments and structures, occupied by a macromolecular machine when it carries out a molecular function. There are two ways in which the gene ontology describes locations of gene products: (1) relative to cellular structures (e.g., cytoplasmic side of plasma membrane) or compartments (e.g., mitochondrion), and (2) the stable macromolecular complexes of which they are parts (e.g., the ribosome)." [GOC:pdt, NIF_Subcellular:sao1337158144] +comment: Note that, in addition to forming the root of the cellular component ontology, this term is recommended for use for the annotation of gene products whose cellular component is unknown. When this term is used for annotation, it indicates that no information was available about the cellular component of the gene product annotated as of the date the annotation was made; the evidence code 'no data' (ND), is used to indicate this. +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +synonym: "cell or subcellular entity" EXACT [] +synonym: "cellular component" EXACT [] +synonym: "subcellular entity" RELATED [NIF_Subcellular:nlx_subcell_100315] +xref: NIF_Subcellular:sao1337158144 +is_a: BFO:0000040 ! material entity +disjoint_from: GO:0008150 ! biological_process + +[Term] +id: GO:0005622 +name: intracellular anatomical structure +namespace: cellular_component +def: "A component of a cell contained within (but not including) the plasma membrane. In eukaryotes it includes the nucleus and cytoplasm." [ISBN:0198506732] +subset: gocheck_do_not_annotate +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_plant +synonym: "internal to cell" EXACT [] +synonym: "intracellular" EXACT [] +synonym: "nucleocytoplasm" RELATED [GOC:mah] +synonym: "protoplasm" EXACT [] +synonym: "protoplast" RELATED [GOC:mah] +xref: Wikipedia:Intracellular +is_a: GO:0110165 ! cellular anatomical entity +relationship: part_of CL:0000000 ! cell +property_value: term_tracker_item https://github.com/geneontology/go-ontology/issues/17776 xsd:anyURI + +[Term] +id: GO:0005634 +name: nucleus +namespace: cellular_component +def: "A membrane-bounded organelle of eukaryotic cells in which chromosomes are housed and replicated. In most cells, the nucleus contains all of the cell's chromosomes except the organellar chromosomes, and is the site of RNA synthesis and processing. In some species, or in specialized cell types, RNA metabolism or DNA replication may be absent." [GOC:go_curators] +subset: goslim_agr +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_drosophila +subset: goslim_flybase_ribbon +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_mouse +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +synonym: "cell nucleus" EXACT systematic_synonym [] +synonym: "horsetail nucleus" NARROW [GOC:al, GOC:mah, GOC:vw, PMID:15030757] +xref: NIF_Subcellular:sao1702920020 +xref: Wikipedia:Cell_nucleus +is_a: GO:0043231 ! intracellular membrane-bounded organelle +disjoint_from: GO:0005737 ! cytoplasm +relationship: in_taxon NCBITaxon:2759 ! Eukaryota +relationship: only_in_taxon NCBITaxon:2759 ! Eukaryota +relationship: never_in_taxon NCBITaxon:2 ! Bacteria + +[Term] +id: GO:0005635 +name: nuclear envelope +namespace: cellular_component +alt_id: GO:0005636 +def: "A double lipid bilayer that is part of the nucleus. Separating its contents from the rest of the cytoplasm; includes the intermembrane space, a gap of width 20-40 nm (also called the perinuclear space)." [ISBN:0198547684] +subset: goslim_chembl +subset: goslim_generic +subset: goslim_plant +xref: Wikipedia:Nuclear_envelope +is_a: GO:0031967 ! organelle envelope +relationship: part_of GO:0005634 ! nucleus +relationship: part_of GO:0012505 ! endomembrane system + +[Term] +id: GO:0005737 +name: cytoplasm +namespace: cellular_component +def: "A cytoplasm that is a bit cytoplasmic." [OAK:FakeDefinitionForTesting] +subset: goslim_candida +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +xref: Wikipedia:Cytoplasm +is_a: GO:0110165 ! cellular anatomical entity +relationship: part_of GO:0005622 ! intracellular anatomical structure + +[Term] +id: GO:0009579 +name: thylakoid +namespace: cellular_component +def: "The structure in a plant cell that is known as thylakoid." [OAK:FakeDefinitionForTesting] +comment: A thylakoid is not considered an organelle, but some thylakoids are part of organelles. +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +synonym: "photosynthetic membrane" RELATED [] +xref: Wikipedia:Thylakoid +is_a: GO:0005622 ! intracellular anatomical structure +relationship: only_in_taxon NCBITaxon_Union:0000002 ! Viridiplantae or Cyanobacteria + +[Term] +id: GO:0005773 +name: vacuole +namespace: cellular_component +def: "A vacuole is an intracellular membrane-bounded organelle that is completely surrounded by unit membrane and contains liquid material." [OAK:FakeDefinitionForTesting] +subset: goslim_agr +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_drosophila +subset: goslim_flybase_ribbon +subset: goslim_generic +subset: goslim_mouse +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +synonym: "vacuolar carboxypeptidase Y" RELATED [] +xref: Wikipedia:Vacuole +is_a: GO:0043231 ! intracellular membrane-bounded organelle +relationship: part_of GO:0005737 ! cytoplasm + +[Term] +id: GO:0005886 +name: plasma membrane +namespace: cellular_component +alt_id: GO:0005904 +def: "The membrane surrounding a cell that separates the cell from its external environment. It consists of a phospholipid bilayer and associated proteins." [ISBN:0716731363] +subset: goslim_agr +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_drosophila +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_mouse +subset: goslim_plant +subset: goslim_yeast +synonym: "bacterial inner membrane" NARROW [] +synonym: "cell membrane" EXACT [] +synonym: "cellular membrane" EXACT [NIF_Subcellular:sao6433132645] +synonym: "cytoplasmic membrane" EXACT [] +synonym: "inner endospore membrane" NARROW [] +synonym: "juxtamembrane" BROAD [] +synonym: "plasma membrane lipid bilayer" NARROW [GOC:mah] +synonym: "plasmalemma" EXACT [] +xref: NIF_Subcellular:sao1663586795 +xref: Wikipedia:Cell_membrane +is_a: GO:0016020 ! membrane +relationship: part_of GO:0071944 ! cell periphery + +[Term] +id: GO:0005938 +name: cell cortex +namespace: cellular_component +def: "The region of a cell that lies just beneath the plasma membrane and often, but not always, contains a network of actin filaments and associated proteins." [GOC:mah, ISBN:0815316194] +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_yeast +synonym: "cell periphery" RELATED [] +synonym: "peripheral cytoplasm" RELATED [] +xref: Wikipedia:Cell_cortex +is_a: GO:0005737 ! cytoplasm +intersection_of: GO:0005737 ! cytoplasm +intersection_of: part_of GO:0071944 ! cell periphery +relationship: part_of GO:0071944 ! cell periphery + +[Term] +id: GO:0006793 +name: phosphorus metabolic process +namespace: biological_process +def: "The chemical reactions and pathways involving the nonmetallic element phosphorus or compounds that contain phosphorus, usually in the form of a phosphate group (PO4)." [GOC:ai] +subset: goslim_pir +synonym: "phosphorus metabolism" EXACT [] +is_a: GO:0044237 ! cellular metabolic process +intersection_of: GO:0008152 ! metabolic process +intersection_of: has_primary_input_or_output CHEBI:26082 ! phosphorus molecular entity +relationship: has_primary_input_or_output CHEBI:26082 ! phosphorus molecular entity + +[Term] +id: GO:0015979 +name: photosynthesis +namespace: biological_process +def: "The synthesis by organisms of organic chemical compounds, especially carbohydrates, from carbon dioxide (CO2) using energy obtained from light rather than from the oxidation of chemical compounds." [ISBN:0198547684] +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +xref: Wikipedia:Photosynthesis +is_a: GO:0044237 ! cellular metabolic process +relationship: only_in_taxon NCBITaxon_Union:0000002 ! Viridiplantae or Cyanobacteria + +[Term] +id: GO:0006796 +name: phosphate-containing compound metabolic process +namespace: biological_process +def: "The chemical reactions and pathways involving the phosphate group, the anion or salt of any phosphoric acid." [GOC:ai] +synonym: "phosphate metabolic process" RELATED [] +synonym: "phosphate metabolism" EXACT [] +is_a: GO:0006793 ! phosphorus metabolic process +intersection_of: GO:0008152 ! metabolic process +intersection_of: has_primary_input_or_output CHEBI:26020 ! phosphate +relationship: has_primary_input_or_output CHEBI:26020 ! phosphate + +[Term] +id: GO:0008047 +name: enzyme activator activity +namespace: molecular_function +alt_id: GO:0010577 +synonym: "metalloenzyme activator activity" NARROW [] +is_a: GO:0003674 ! molecular_function +intersection_of: GO:0003674 ! molecular_function +intersection_of: positively_regulates GO:0003824 ! catalytic activity +relationship: positively_regulates GO:0003824 ! catalytic activity + +[Term] +id: GO:0008150 +name: biological_process +namespace: biological_process +alt_id: GO:0000004 +alt_id: GO:0007582 +alt_id: GO:0044699 +def: "A biological process represents a specific objective that the organism is genetically programmed to achieve. Biological processes are often described by their outcome or ending state, e.g., the biological process of cell division results in the creation of two daughter cells (a divided cell) from a single parent cell. A biological process is accomplished by a particular set of molecular functions carried out by specific gene products (or macromolecular complexes), often in a highly regulated manner and in a particular temporal sequence." [GOC:pdt] +comment: Note that, in addition to forming the root of the biological process ontology, this term is recommended for use for the annotation of gene products whose biological process is unknown. When this term is used for annotation, it indicates that no information was available about the biological process of the gene product annotated as of the date the annotation was made; the evidence code 'no data' (ND), is used to indicate this. +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +subset: goslim_pombe +subset: goslim_yeast +synonym: "biological process" EXACT [] +synonym: "physiological process" EXACT [] +synonym: "single organism process" RELATED [] +synonym: "single-organism process" RELATED [] +xref: Wikipedia:Biological_process +is_a: BFO:0000015 ! process +created_by: jl +creation_date: 2012-09-19T15:05:24Z + +[Term] +id: GO:0008152 +name: metabolic process +namespace: biological_process +alt_id: GO:0044236 +alt_id: GO:0044710 +def: "The chemical reactions and pathways, including anabolism and catabolism, by which living organisms transform chemical substances. Metabolic processes typically transform small molecules, but also include macromolecular processes such as DNA repair and replication, and protein synthesis and degradation." [GOC:go_curators, ISBN:0198547684] +comment: Note that metabolic processes do not include single functions or processes such as protein-protein interactions, protein-nucleic acids, nor receptor-ligand interactions. +subset: gocheck_do_not_manually_annotate +subset: goslim_chembl +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +synonym: "metabolic process resulting in cell growth" NARROW [] +synonym: "metabolism" EXACT [] +synonym: "metabolism resulting in cell growth" NARROW [] +synonym: "multicellular organism metabolic process" NARROW [] +synonym: "single-organism metabolic process" RELATED [] +xref: Wikipedia:Metabolism +is_a: GO:0008150 ! biological_process +created_by: jl +creation_date: 2012-10-17T15:46:40Z + +[Term] +id: GO:0009892 +name: negative regulation of metabolic process +namespace: biological_process +alt_id: GO:0044252 +def: "Any process that stops, prevents, or reduces the frequency, rate or extent of the chemical reactions and pathways within a cell or an organism." [GOC:go_curators] +synonym: "down regulation of metabolic process" EXACT [] +synonym: "down-regulation of metabolic process" EXACT [] +synonym: "downregulation of metabolic process" EXACT [] +synonym: "inhibition of metabolic process" NARROW [] +synonym: "inhibition of organismal metabolic process" NARROW [] +synonym: "negative regulation of metabolism" EXACT [] +synonym: "negative regulation of multicellular organismal metabolic process" NARROW [] +synonym: "negative regulation of organismal metabolism" EXACT [] +is_a: GO:0019222 ! regulation of metabolic process +is_a: GO:0048519 ! negative regulation of biological process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0008152 ! metabolic process +relationship: negatively_regulates GO:0008152 ! metabolic process + +[Term] +id: GO:0009893 +name: positive regulation of metabolic process +namespace: biological_process +alt_id: GO:0044253 +def: "Any process that activates or increases the frequency, rate or extent of the chemical reactions and pathways within a cell or an organism." [GOC:go_curators] +synonym: "activation of metabolic process" NARROW [] +synonym: "positive regulation of metabolism" EXACT [] +synonym: "positive regulation of multicellular organismal metabolic process" NARROW [] +synonym: "positive regulation of organismal metabolism" NARROW [] +synonym: "stimulation of metabolic process" NARROW [] +synonym: "stimulation of organismal metabolic process" NARROW [] +synonym: "up regulation of metabolic process" EXACT [] +synonym: "up-regulation of metabolic process" EXACT [] +synonym: "up-regulation of organismal metabolic process" NARROW [] +synonym: "upregulation of metabolic process" EXACT [] +is_a: GO:0019222 ! regulation of metabolic process +is_a: GO:0048518 ! positive regulation of biological process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0008152 ! metabolic process +relationship: positively_regulates GO:0008152 ! metabolic process + +[Term] +id: GO:0009987 +name: cellular process +namespace: biological_process +alt_id: GO:0008151 +alt_id: GO:0044763 +alt_id: GO:0050875 +def: "Any process that is carried out at the cellular level, but not necessarily restricted to a single cell. For example, cell communication occurs among more than one cell, but occurs at the cellular level." [GOC:go_curators, GOC:isa_complete] +subset: goslim_plant +synonym: "cell growth and/or maintenance" NARROW [] +synonym: "cell physiology" EXACT [] +synonym: "cellular physiological process" EXACT [] +synonym: "single-organism cellular process" RELATED [] +is_a: GO:0008150 ! biological_process +created_by: jl +creation_date: 2012-12-11T16:56:55Z + +[Term] +id: GO:0010562 +name: positive regulation of phosphorus metabolic process +namespace: biological_process +def: "Any process that increases the frequency, rate or extent of the chemical reactions and pathways involving phosphorus or compounds containing phosphorus." [GOC:dph, GOC:tb] +is_a: GO:0031325 ! positive regulation of cellular metabolic process +is_a: GO:0051174 ! regulation of phosphorus metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0006793 ! phosphorus metabolic process +relationship: positively_regulates GO:0006793 ! phosphorus metabolic process + +[Term] +id: GO:0010563 +name: negative regulation of phosphorus metabolic process +namespace: biological_process +def: "Any process that decreases the frequency, rate or extent of the chemical reactions and pathways involving phosphorus or compounds containing phosphorus." [GOC:dph, GOC:tb] +is_a: GO:0031324 ! negative regulation of cellular metabolic process +is_a: GO:0051174 ! regulation of phosphorus metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0006793 ! phosphorus metabolic process +relationship: negatively_regulates GO:0006793 ! phosphorus metabolic process + +[Term] +id: GO:0012505 +name: endomembrane system +namespace: cellular_component +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_flybase_ribbon +subset: goslim_yeast +xref: Wikipedia:Endomembrane_system +is_a: GO:0110165 ! cellular anatomical entity +relationship: has_part GO:0005773 ! vacuole +relationship: has_part GO:0005886 ! plasma membrane +relationship: part_of CL:0000000 ! cell + +[Term] +id: GO:0016020 +name: membrane +namespace: cellular_component +alt_id: GO:0098589 +alt_id: GO:0098805 +def: "A lipid bilayer along with all the proteins and protein complexes embedded in it an attached to it." [GOC:dos, GOC:mah, ISBN:0815316194] +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_flybase_ribbon +subset: goslim_metagenomics +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +synonym: "membrane region" NARROW [] +synonym: "region of membrane" NARROW [] +synonym: "whole membrane" NARROW [] +xref: Wikipedia:Biological_membrane +is_a: GO:0110165 ! cellular anatomical entity +creation_date: 2014-03-06T11:37:54Z + +[Term] +id: GO:0016301 +name: kinase activity +namespace: molecular_function +def: "Catalysis of the transfer of a phosphate group, usually from ATP, to a substrate molecule." [ISBN:0198506732] +comment: Note that this term encompasses all activities that transfer a single phosphate group; although ATP is by far the most common phosphate donor, reactions using other phosphate donors are included in this term. +subset: goslim_chembl +subset: goslim_drosophila +subset: goslim_generic +subset: goslim_metagenomics +subset: goslim_plant +subset: goslim_yeast +synonym: "phosphokinase activity" EXACT [] +xref: Reactome:R-HSA-6788855 "FN3KRP phosphorylates PsiAm, RibAm" +xref: Reactome:R-HSA-6788867 "FN3K phosphorylates ketosamines" +is_a: GO:0016772 ! transferase activity, transferring phosphorus-containing groups +relationship: part_of GO:0016310 ! phosphorylation + +[Term] +id: GO:0016310 +name: phosphorylation +namespace: biological_process +def: "The process of introducing a phosphate group into a molecule, usually with the formation of a phosphoric ester, a phosphoric anhydride or a phosphoric amide." [ISBN:0198506732] +subset: goslim_chembl +subset: goslim_metagenomics +xref: Wikipedia:Phosphorylation +is_a: GO:0006796 ! phosphate-containing compound metabolic process + +[Term] +id: GO:0016740 +name: transferase activity +namespace: molecular_function +def: "Catalysis of the transfer of a group, e.g. a methyl group, glycosyl group, acyl group, phosphorus-containing, or other groups, from one compound (generally regarded as the donor) to another compound (generally regarded as the acceptor). Transferase is the systematic name for any enzyme of EC class 2." [ISBN:0198506732] +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_chembl +subset: goslim_metagenomics +subset: goslim_mouse +subset: goslim_pir +subset: goslim_plant +subset: goslim_yeast +xref: EC:2.-.-.- +xref: Reactome:R-HSA-1483089 "PE is converted to PS by PTDSS2" +xref: Reactome:R-HSA-1483186 "PC is converted to PS by PTDSS1" +xref: Reactome:R-HSA-5668414 "TRAF2 ubiquitinates cIAP1,2 in cIAP1,2:TRAF1:TRAF2:TRAF3:NIK" +xref: Reactome:R-HSA-8868783 "TSR3 transfers aminocarboxypropyl group from S-adenosylmethionine to N(1)-methylpseudouridine-1248 of 18SE rRNA yielding N(1)-methyl-N(3)-aminocarboxypropylpseudouridine-1248" +is_a: GO:0003824 ! catalytic activity + +[Term] +id: GO:0016772 +name: transferase activity, transferring phosphorus-containing groups +namespace: molecular_function +def: "Catalysis of the transfer of a phosphorus-containing group from one compound (donor) to another (acceptor)." [GOC:jl, ISBN:0198506732] +comment: Note that this term encompasses all kinase activities, as well as activities that transfer other phosphorus-containing groups such as diphosphate or nucleotides. +subset: goslim_chembl +xref: EC:2.7.-.- +is_a: GO:0016740 ! transferase activity + +[Term] +id: GO:0019207 +name: kinase regulator activity +namespace: molecular_function +def: "Modulates the activity of a kinase, an enzyme which catalyzes of the transfer of a phosphate group, usually from ATP, to a substrate molecule." [GOC:ai] +is_a: GO:0003674 ! molecular_function +intersection_of: GO:0003674 ! molecular_function +intersection_of: regulates GO:0016301 ! kinase activity +relationship: regulates GO:0016301 ! kinase activity + +[Term] +id: GO:0019209 +name: kinase activator activity +namespace: molecular_function +def: "Binds to and increases the activity of a kinase, an enzyme which catalyzes of the transfer of a phosphate group, usually from ATP, to a substrate molecule." [GOC:ai] +is_a: GO:0008047 ! enzyme activator activity +is_a: GO:0019207 ! kinase regulator activity +intersection_of: GO:0003674 ! molecular_function +intersection_of: positively_regulates GO:0016301 ! kinase activity +relationship: part_of GO:0033674 ! positive regulation of kinase activity +relationship: part_of GO:0042327 ! positive regulation of phosphorylation +relationship: positively_regulates GO:0016301 ! kinase activity + +[Term] +id: GO:0019210 +name: kinase inhibitor activity +namespace: molecular_function +def: "Binds to and stops, prevents or reduces the activity of a kinase." [GOC:mah] +is_a: GO:0004857 ! enzyme inhibitor activity +is_a: GO:0019207 ! kinase regulator activity +intersection_of: GO:0003674 ! molecular_function +intersection_of: negatively_regulates GO:0016301 ! kinase activity +relationship: negatively_regulates GO:0016301 ! kinase activity + +[Term] +id: GO:0019220 +name: regulation of phosphate metabolic process +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of the chemical reactions and pathways involving phosphates." [GOC:go_curators] +synonym: "regulation of phosphate metabolism" EXACT [] +is_a: GO:0051174 ! regulation of phosphorus metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0006796 ! phosphate-containing compound metabolic process +relationship: regulates GO:0006796 ! phosphate-containing compound metabolic process + +[Term] +id: GO:0019222 +name: regulation of metabolic process +namespace: biological_process +alt_id: GO:0044246 +def: "Any process that modulates the frequency, rate or extent of the chemical reactions and pathways within a cell or an organism." [GOC:go_curators] +subset: goslim_metagenomics +synonym: "regulation of metabolism" EXACT [] +synonym: "regulation of multicellular organismal metabolic process" NARROW [] +synonym: "regulation of organismal metabolic process" NARROW [GOC:tb] +is_a: GO:0050789 ! regulation of biological process +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0008152 ! metabolic process +relationship: regulates GO:0008152 ! metabolic process + +[Term] +id: GO:0031090 +name: organelle membrane +namespace: cellular_component +def: "A membrane that is one of the two lipid bilayers of an organelle envelope or the outermost membrane of single membrane bound organelle." [GOC:dos, GOC:mah] +synonym: "intracellular membrane" RELATED [NIF_Subcellular:sao830981606] +xref: NIF_Subcellular:sao830981606 +is_a: GO:0016020 ! membrane +intersection_of: GO:0016020 ! membrane +intersection_of: part_of GO:0043227 ! membrane-bounded organelle +relationship: part_of GO:0043227 ! membrane-bounded organelle + +[Term] +id: GO:0031323 +name: regulation of cellular metabolic process +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of the chemical reactions and pathways by which individual cells transform chemical substances." [GOC:mah] +synonym: "regulation of cellular metabolism" EXACT [] +is_a: GO:0019222 ! regulation of metabolic process +is_a: GO:0050794 ! regulation of cellular process +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0044237 ! cellular metabolic process +relationship: regulates GO:0044237 ! cellular metabolic process + +[Term] +id: GO:0031324 +name: negative regulation of cellular metabolic process +namespace: biological_process +def: "Any process that stops, prevents, or reduces the frequency, rate or extent of the chemical reactions and pathways by which individual cells transform chemical substances." [GOC:mah] +synonym: "down regulation of cellular metabolic process" EXACT [] +synonym: "down-regulation of cellular metabolic process" EXACT [] +synonym: "downregulation of cellular metabolic process" EXACT [] +synonym: "inhibition of cellular metabolic process" NARROW [] +synonym: "negative regulation of cellular metabolism" EXACT [] +is_a: GO:0009892 ! negative regulation of metabolic process +is_a: GO:0031323 ! regulation of cellular metabolic process +is_a: GO:0048523 ! negative regulation of cellular process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0044237 ! cellular metabolic process +relationship: negatively_regulates GO:0044237 ! cellular metabolic process + +[Term] +id: GO:0031325 +name: positive regulation of cellular metabolic process +namespace: biological_process +def: "Any process that activates or increases the frequency, rate or extent of the chemical reactions and pathways by which individual cells transform chemical substances." [GOC:mah] +synonym: "activation of cellular metabolic process" NARROW [] +synonym: "positive regulation of cellular metabolism" EXACT [] +synonym: "stimulation of cellular metabolic process" NARROW [] +synonym: "up regulation of cellular metabolic process" EXACT [] +synonym: "up-regulation of cellular metabolic process" EXACT [] +synonym: "upregulation of cellular metabolic process" EXACT [] +is_a: GO:0009893 ! positive regulation of metabolic process +is_a: GO:0031323 ! regulation of cellular metabolic process +is_a: GO:0048522 ! positive regulation of cellular process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0044237 ! cellular metabolic process +relationship: positively_regulates GO:0044237 ! cellular metabolic process + +[Term] +id: GO:0031965 +name: nuclear membrane +namespace: cellular_component +def: "An envelope that is part of a nucleus." [OAK:FakeDefinitionForTesting] +xref: NIF_Subcellular:sao1687101204 +is_a: GO:0031090 ! organelle membrane +intersection_of: GO:0016020 ! membrane +intersection_of: part_of GO:0005634 ! nucleus +relationship: part_of GO:0005634 ! nucleus +relationship: part_of GO:0005635 ! nuclear envelope +relationship: present_in_taxon NCBITaxon:9606 ! Homo sapiens +relationship: present_in_taxon NCBITaxon:4751 ! Fungi + +[Term] +id: GO:0031967 +name: organelle envelope +namespace: cellular_component +def: "A double membrane structure enclosing an organelle, including two lipid bilayers and the region between them. In some cases, an organelle envelope may have more than two membranes." [GOC:mah, GOC:pz] +subset: goslim_mouse +is_a: GO:0031975 ! envelope +relationship: part_of GO:0043227 ! membrane-bounded organelle +relationship: part_of GO:0043229 ! intracellular organelle + +[Term] +id: GO:0031975 +name: envelope +namespace: cellular_component +def: "A multilayered structure surrounding all or part of a cell; encompasses one or more lipid bilayers, and may include a cell wall layer; also includes the space between layers." [GOC:mah, GOC:pz] +is_a: GO:0110165 ! cellular anatomical entity +relationship: part_of CL:0000000 ! cell + +[Term] +id: GO:0033673 +name: negative regulation of kinase activity +namespace: biological_process +def: "Any process that stops, prevents, or reduces the frequency, rate or extent of kinase activity, the catalysis of the transfer of a phosphate group, usually from ATP, to a substrate molecule." [GOC:mah] +synonym: "down regulation of kinase activity" EXACT [] +synonym: "down-regulation of kinase activity" EXACT [] +synonym: "downregulation of kinase activity" EXACT [] +synonym: "inhibition of kinase activity" NARROW [] +synonym: "kinase inhibitor" NARROW [] +is_a: GO:0042326 ! negative regulation of phosphorylation +is_a: GO:0043549 ! regulation of kinase activity +is_a: GO:0051348 ! negative regulation of transferase activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0016301 ! kinase activity +relationship: negatively_regulates GO:0016301 ! kinase activity +relationship: negatively_regulates GO:0016310 {http://purl.obolibrary.org/obo/IAO_0000233="https://github.com/geneontology/go-ontology/issues/13926"} ! phosphorylation + +[Term] +id: GO:0033674 +name: positive regulation of kinase activity +namespace: biological_process +def: "Any process that activates or increases the frequency, rate or extent of kinase activity, the catalysis of the transfer of a phosphate group, usually from ATP, to a substrate molecule." [GOC:mah] +synonym: "kinase activator" NARROW [] +synonym: "stimulation of kinase activity" NARROW [] +synonym: "up regulation of kinase activity" EXACT [] +synonym: "up-regulation of kinase activity" EXACT [] +synonym: "upregulation of kinase activity" EXACT [] +is_a: GO:0042327 ! positive regulation of phosphorylation +is_a: GO:0043549 ! regulation of kinase activity +is_a: GO:0051347 ! positive regulation of transferase activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0016301 ! kinase activity +relationship: positively_regulates GO:0016301 ! kinase activity +relationship: positively_regulates GO:0016310 {http://purl.obolibrary.org/obo/IAO_0000233="https://github.com/geneontology/go-ontology/issues/13926"} ! phosphorylation + +[Term] +id: GO:0042325 +name: regulation of phosphorylation +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of addition of phosphate groups into a molecule." [GOC:jl] +is_a: GO:0019220 ! regulation of phosphate metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0016310 ! phosphorylation +relationship: regulates GO:0016310 ! phosphorylation + +[Term] +id: GO:0042326 +name: negative regulation of phosphorylation +namespace: biological_process +def: "Any process that stops, prevents or decreases the rate of addition of phosphate groups to a molecule." [GOC:jl] +synonym: "down regulation of phosphorylation" EXACT [] +synonym: "down-regulation of phosphorylation" EXACT [] +synonym: "downregulation of phosphorylation" EXACT [] +synonym: "inhibition of phosphorylation" NARROW [] +is_a: GO:0042325 ! regulation of phosphorylation +is_a: GO:0045936 ! negative regulation of phosphate metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0016310 ! phosphorylation +relationship: negatively_regulates GO:0016310 ! phosphorylation + +[Term] +id: GO:0042327 +name: positive regulation of phosphorylation +namespace: biological_process +def: "Any process that activates or increases the frequency, rate or extent of addition of phosphate groups to a molecule." [GOC:jl] +synonym: "activation of phosphorylation" NARROW [] +synonym: "stimulation of phosphorylation" NARROW [] +synonym: "up regulation of phosphorylation" EXACT [] +synonym: "up-regulation of phosphorylation" EXACT [] +synonym: "upregulation of phosphorylation" EXACT [] +is_a: GO:0042325 ! regulation of phosphorylation +is_a: GO:0045937 ! positive regulation of phosphate metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0016310 ! phosphorylation +relationship: positively_regulates GO:0016310 ! phosphorylation + +[Term] +id: GO:0043085 +name: positive regulation of catalytic activity +namespace: biological_process +alt_id: GO:0048554 +def: "Any process that activates or increases the activity of an enzyme." [GOC:ebc, GOC:jl, GOC:tb, GOC:vw] +subset: goslim_chembl +synonym: "activation of enzyme activity" NARROW [] +synonym: "activation of metalloenzyme activity" NARROW [] +synonym: "positive regulation of enzyme activity" EXACT [GOC:tb] +synonym: "positive regulation of metalloenzyme activity" NARROW [] +synonym: "stimulation of enzyme activity" NARROW [] +synonym: "stimulation of metalloenzyme activity" NARROW [] +synonym: "up regulation of enzyme activity" EXACT [] +synonym: "up regulation of metalloenzyme activity" NARROW [] +synonym: "up-regulation of enzyme activity" EXACT [] +synonym: "up-regulation of metalloenzyme activity" NARROW [] +synonym: "upregulation of enzyme activity" EXACT [] +synonym: "upregulation of metalloenzyme activity" NARROW [] +is_a: GO:0044093 ! positive regulation of molecular function +is_a: GO:0050790 ! regulation of catalytic activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0003824 ! catalytic activity +relationship: positively_regulates GO:0003824 ! catalytic activity + +[Term] +id: GO:0043086 +name: negative regulation of catalytic activity +namespace: biological_process +alt_id: GO:0048553 +def: "Any process that stops or reduces the activity of an enzyme." [GOC:ebc, GOC:jl, GOC:tb, GOC:vw] +synonym: "down regulation of enzyme activity" EXACT [] +synonym: "down regulation of metalloenzyme activity" NARROW [] +synonym: "down-regulation of enzyme activity" EXACT [] +synonym: "down-regulation of metalloenzyme activity" EXACT [] +synonym: "downregulation of enzyme activity" EXACT [] +synonym: "downregulation of metalloenzyme activity" NARROW [] +synonym: "inhibition of enzyme activity" NARROW [] +synonym: "inhibition of metalloenzyme activity" NARROW [] +synonym: "negative regulation of enzyme activity" EXACT [GOC:tb] +synonym: "negative regulation of metalloenzyme activity" NARROW [] +is_a: GO:0044092 ! negative regulation of molecular function +is_a: GO:0050790 ! regulation of catalytic activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0003824 ! catalytic activity +relationship: negatively_regulates GO:0003824 ! catalytic activity + +[Term] +id: GO:0043226 +name: organelle +namespace: cellular_component +def: "Organized structure of distinctive morphology and function. Includes the nucleus, mitochondria, plastids, vacuoles, vesicles, ribosomes and the cytoskeleton, and prokaryotic structures such as anammoxosomes and pirellulosomes. Excludes the plasma membrane." [GOC:go_curators] +subset: goslim_chembl +subset: goslim_generic +subset: goslim_pir +xref: NIF_Subcellular:sao1539965131 +xref: Wikipedia:Organelle +is_a: GO:0110165 ! cellular anatomical entity + +[Term] +id: GO:0043227 +name: membrane-bounded organelle +namespace: cellular_component +def: "Organized structure of distinctive morphology and function, bounded by a single or double lipid bilayer membrane. Includes the nucleus, mitochondria, plastids, vacuoles, and vesicles. Excludes the plasma membrane." [GOC:go_curators] +synonym: "membrane-enclosed organelle" EXACT [] +xref: NIF_Subcellular:sao414196390 +is_a: GO:0043226 ! organelle +intersection_of: GO:0043226 ! organelle +intersection_of: has_part GO:0016020 ! membrane +relationship: has_part GO:0016020 ! membrane +relationship: never_in_taxon NCBITaxon:2 ! Bacteria + +[Term] +id: GO:0043229 +name: intracellular organelle +namespace: cellular_component +def: "Organized structure of distinctive morphology and function, occurring within the cell. Includes the nucleus, mitochondria, plastids, vacuoles, vesicles, ribosomes and the cytoskeleton. Excludes the plasma membrane." [GOC:go_curators] +subset: goslim_pir +is_a: GO:0043226 ! organelle +intersection_of: GO:0043226 ! organelle +intersection_of: part_of GO:0005622 ! intracellular anatomical structure +relationship: part_of GO:0005622 ! intracellular anatomical structure + +[Term] +id: GO:0043231 +name: intracellular membrane-bounded organelle +namespace: cellular_component +def: "Organized structure of distinctive morphology and function, bounded by a single or double lipid bilayer membrane and occurring within the cell. Includes the nucleus, mitochondria, plastids, vacuoles, and vesicles. Excludes the plasma membrane." [GOC:go_curators] +subset: goslim_pir +synonym: "intracellular membrane-enclosed organelle" EXACT [] +is_a: GO:0043227 ! membrane-bounded organelle +is_a: GO:0043229 ! intracellular organelle +intersection_of: GO:0043227 ! membrane-bounded organelle +intersection_of: part_of GO:0005622 ! intracellular anatomical structure +relationship: part_of GO:0005622 ! intracellular anatomical structure + +[Term] +id: GO:0043549 +name: regulation of kinase activity +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of kinase activity, the catalysis of the transfer of a phosphate group, usually from ATP, to a substrate molecule." [GOC:bf] +is_a: GO:0042325 ! regulation of phosphorylation +is_a: GO:0051338 ! regulation of transferase activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0016301 ! kinase activity +relationship: regulates GO:0016301 ! kinase activity +relationship: regulates GO:0016310 {http://purl.obolibrary.org/obo/IAO_0000233="https://github.com/geneontology/go-ontology/issues/13926"} ! phosphorylation + +[Term] +id: GO:0044092 +name: negative regulation of molecular function +namespace: biological_process +def: "Any process that stops or reduces the rate or extent of a molecular function, an elemental biological activity occurring at the molecular level, such as catalysis or binding." [GO:jl] +is_a: GO:0065009 ! regulation of molecular function +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0003674 ! molecular_function +relationship: negatively_regulates GO:0003674 ! molecular_function +created_by: jl +creation_date: 2009-04-21T04:07:27Z + +[Term] +id: GO:0044093 +name: positive regulation of molecular function +namespace: biological_process +def: "Any process that activates or increases the rate or extent of a molecular function, an elemental biological activity occurring at the molecular level, such as catalysis or binding." [GO:jl] +is_a: GO:0065009 ! regulation of molecular function +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0003674 ! molecular_function +relationship: positively_regulates GO:0003674 ! molecular_function +created_by: jl +creation_date: 2009-04-21T04:11:06Z + +[Term] +id: GO:0044237 +name: cellular metabolic process +namespace: biological_process +def: "The chemical reactions and pathways by which individual cells transform chemical substances." [GOC:go_curators] +synonym: "cellular metabolism" EXACT [] +synonym: "intermediary metabolism" RELATED [GOC:mah] +is_a: GO:0008152 ! metabolic process +is_a: GO:0009987 ! cellular process +relationship: only_in_taxon NCBITaxon:131567 ! cellular organisms + +[Term] +id: GO:0034357 +name: photosynthetic membrane +namespace: cellular_component +def: "A membrane enriched in complexes formed of reaction centers, accessory pigments and electron carriers, in which photosynthetic reactions take place." [GOC:ds, GOC:mah] +is_a: GO:0016020 ! membrane +relationship: capable_of_part_of GO:0015979 ! photosynthesis +relationship: part_of GO:0009579 ! thylakoid +relationship: only_in_taxon NCBITaxon_Union:0000002 ! Viridiplantae or Cyanobacteria + +[Term] +id: GO:0045936 +name: negative regulation of phosphate metabolic process +namespace: biological_process +def: "Any process that stops, prevents, or reduces the frequency, rate or extent of the chemical reactions and pathways involving phosphates." [GOC:go_curators] +synonym: "down regulation of phosphate metabolic process" EXACT [] +synonym: "down-regulation of phosphate metabolic process" EXACT [] +synonym: "downregulation of phosphate metabolic process" EXACT [] +synonym: "inhibition of phosphate metabolic process" NARROW [] +synonym: "negative regulation of phosphate metabolism" EXACT [] +is_a: GO:0010563 ! negative regulation of phosphorus metabolic process +is_a: GO:0019220 ! regulation of phosphate metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0006796 ! phosphate-containing compound metabolic process +relationship: negatively_regulates GO:0006796 ! phosphate-containing compound metabolic process + +[Term] +id: GO:0045937 +name: positive regulation of phosphate metabolic process +namespace: biological_process +def: "Any process that activates or increases the frequency, rate or extent of the chemical reactions and pathways involving phosphates." [GOC:go_curators] +synonym: "activation of phosphate metabolic process" NARROW [] +synonym: "positive regulation of phosphate metabolism" EXACT [] +synonym: "stimulation of phosphate metabolic process" NARROW [] +synonym: "up regulation of phosphate metabolic process" EXACT [] +synonym: "up-regulation of phosphate metabolic process" EXACT [] +synonym: "upregulation of phosphate metabolic process" EXACT [] +is_a: GO:0010562 ! positive regulation of phosphorus metabolic process +is_a: GO:0019220 ! regulation of phosphate metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0006796 ! phosphate-containing compound metabolic process +relationship: positively_regulates GO:0006796 ! phosphate-containing compound metabolic process + +[Term] +id: GO:0048518 +name: positive regulation of biological process +namespace: biological_process +alt_id: GO:0043119 +def: "Any process that activates or increases the frequency, rate or extent of a biological process. Biological processes are regulated by many means; examples include the control of gene expression, protein modification or interaction with a protein or substrate molecule." [GOC:jid] +subset: gocheck_do_not_annotate +synonym: "activation of biological process" NARROW [] +synonym: "positive regulation of physiological process" EXACT [] +synonym: "stimulation of biological process" NARROW [] +synonym: "up regulation of biological process" EXACT [] +synonym: "up-regulation of biological process" EXACT [] +synonym: "upregulation of biological process" EXACT [] +is_a: GO:0050789 ! regulation of biological process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0008150 ! biological_process +relationship: positively_regulates GO:0008150 ! biological_process + +[Term] +id: GO:0048519 +name: negative regulation of biological process +namespace: biological_process +alt_id: GO:0043118 +def: "Any process that stops, prevents, or reduces the frequency, rate or extent of a biological process. Biological processes are regulated by many means; examples include the control of gene expression, protein modification or interaction with a protein or substrate molecule." [GOC:jid] +subset: gocheck_do_not_annotate +synonym: "down regulation of biological process" EXACT [] +synonym: "down-regulation of biological process" EXACT [] +synonym: "downregulation of biological process" EXACT [] +synonym: "inhibition of biological process" NARROW [] +synonym: "negative regulation of physiological process" EXACT [] +is_a: GO:0050789 ! regulation of biological process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0008150 ! biological_process +relationship: negatively_regulates GO:0008150 ! biological_process + +[Term] +id: GO:0048522 +name: positive regulation of cellular process +namespace: biological_process +alt_id: GO:0051242 +def: "Any process that activates or increases the frequency, rate or extent of a cellular process, any of those that are carried out at the cellular level, but are not necessarily restricted to a single cell. For example, cell communication occurs among more than one cell, but occurs at the cellular level." [GOC:jid] +synonym: "activation of cellular process" NARROW [] +synonym: "positive regulation of cellular physiological process" EXACT [] +synonym: "stimulation of cellular process" NARROW [] +synonym: "up regulation of cellular process" EXACT [] +synonym: "up-regulation of cellular process" EXACT [] +synonym: "upregulation of cellular process" EXACT [] +is_a: GO:0048518 ! positive regulation of biological process +is_a: GO:0050794 ! regulation of cellular process +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0009987 ! cellular process +relationship: positively_regulates GO:0009987 ! cellular process + +[Term] +id: GO:0048523 +name: negative regulation of cellular process +namespace: biological_process +alt_id: GO:0051243 +def: "Any process that stops, prevents, or reduces the frequency, rate or extent of a cellular process, any of those that are carried out at the cellular level, but are not necessarily restricted to a single cell. For example, cell communication occurs among more than one cell, but occurs at the cellular level." [GOC:jid] +synonym: "down regulation of cellular process" EXACT [] +synonym: "down-regulation of cellular process" EXACT [] +synonym: "downregulation of cellular process" EXACT [] +synonym: "inhibition of cellular process" NARROW [] +synonym: "negative regulation of cellular physiological process" EXACT [] +is_a: GO:0048519 ! negative regulation of biological process +is_a: GO:0050794 ! regulation of cellular process +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0009987 ! cellular process +relationship: negatively_regulates GO:0009987 ! cellular process + +[Term] +id: GO:0050789 +name: regulation of biological process +namespace: biological_process +alt_id: GO:0050791 +def: "Any process that modulates the frequency, rate or extent of a biological process. Biological processes are regulated by many means; examples include the control of gene expression, protein modification or interaction with a protein or substrate molecule." [GOC:ai, GOC:go_curators] +subset: gocheck_do_not_annotate +subset: goslim_aspergillus +subset: goslim_candida +subset: goslim_pir +synonym: "regulation of physiological process" EXACT [] +is_a: GO:0065007 ! biological regulation +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0008150 ! biological_process +relationship: regulates GO:0008150 ! biological_process + +[Term] +id: GO:0050790 +name: regulation of catalytic activity +namespace: biological_process +alt_id: GO:0048552 +def: "Any process that modulates the activity of an enzyme." [GOC:ai, GOC:ebc, GOC:vw] +subset: goslim_chembl +synonym: "regulation of enzyme activity" EXACT [] +synonym: "regulation of metalloenzyme activity" NARROW [] +is_a: GO:0065009 ! regulation of molecular function +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0003824 ! catalytic activity +relationship: regulates GO:0003824 ! catalytic activity + +[Term] +id: GO:0050794 +name: regulation of cellular process +namespace: biological_process +alt_id: GO:0051244 +def: "Any process that modulates the frequency, rate or extent of a cellular process, any of those that are carried out at the cellular level, but are not necessarily restricted to a single cell. For example, cell communication occurs among more than one cell, but occurs at the cellular level." [GOC:go_curators] +synonym: "regulation of cellular physiological process" EXACT [] +is_a: GO:0050789 ! regulation of biological process +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0009987 ! cellular process +relationship: regulates GO:0009987 ! cellular process + +[Term] +id: GO:0051174 +name: regulation of phosphorus metabolic process +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of the chemical reactions and pathways involving phosphorus or compounds containing phosphorus." [GOC:ai] +synonym: "regulation of phosphorus metabolism" EXACT [] +is_a: GO:0031323 ! regulation of cellular metabolic process +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0006793 ! phosphorus metabolic process +relationship: regulates GO:0006793 ! phosphorus metabolic process + +[Term] +id: GO:0051338 +name: regulation of transferase activity +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of transferase activity, the catalysis of the transfer of a group, e.g. a methyl group, glycosyl group, acyl group, phosphorus-containing, or other groups, from one compound (generally regarded as the donor) to another compound (generally regarded as the acceptor). Transferase is the systematic name for any enzyme of EC class 2." [EC:2.-.-.-, GOC:ai] +comment: This term is useful for grouping, but is too general for manual annotation. Please use a child term instead. +subset: gocheck_do_not_manually_annotate +synonym: "transferase regulator" EXACT [] +is_a: GO:0050790 ! regulation of catalytic activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0016740 ! transferase activity +relationship: regulates GO:0016740 ! transferase activity + +[Term] +id: GO:0051347 +name: positive regulation of transferase activity +namespace: biological_process +def: "Any process that activates or increases the frequency, rate or extent of transferase activity, the catalysis of the transfer of a group, e.g. a methyl group, glycosyl group, acyl group, phosphorus-containing, or other groups, from a donor compound to an acceptor." [GOC:ai] +comment: This term is useful for grouping, but is too general for manual annotation. Please use a child term instead. +subset: gocheck_do_not_manually_annotate +synonym: "activation of transferase activity" NARROW [] +synonym: "stimulation of transferase activity" NARROW [] +synonym: "transferase activator" EXACT [] +synonym: "up regulation of transferase activity" EXACT [] +synonym: "up-regulation of transferase activity" EXACT [] +synonym: "upregulation of transferase activity" EXACT [] +is_a: GO:0043085 ! positive regulation of catalytic activity +is_a: GO:0051338 ! regulation of transferase activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: positively_regulates GO:0016740 ! transferase activity +relationship: positively_regulates GO:0016740 ! transferase activity + +[Term] +id: GO:0051348 +name: negative regulation of transferase activity +namespace: biological_process +def: "Any process that stops or reduces the rate of transferase activity, the catalysis of the transfer of a group, e.g. a methyl group, glycosyl group, acyl group, phosphorus-containing, or other groups, from a donor compound to an acceptor." [GOC:ai] +comment: This term is useful for grouping, but is too general for manual annotation. Please use a child term instead. +subset: gocheck_do_not_manually_annotate +synonym: "down regulation of transferase activity" EXACT [] +synonym: "down-regulation of transferase activity" EXACT [] +synonym: "downregulation of transferase activity" EXACT [] +synonym: "inhibition of transferase activity" NARROW [] +synonym: "transferase inhibitor" EXACT [] +is_a: GO:0043086 ! negative regulation of catalytic activity +is_a: GO:0051338 ! regulation of transferase activity +intersection_of: GO:0065007 ! biological regulation +intersection_of: negatively_regulates GO:0016740 ! transferase activity +relationship: negatively_regulates GO:0016740 ! transferase activity + +[Term] +id: GO:0065007 +name: biological regulation +namespace: biological_process +def: "Any process that modulates a measurable attribute of any biological process, quality or function." [GOC:dph, GOC:isa_complete, GOC:mah, GOC:pr, GOC:vw] +subset: gocheck_do_not_annotate +subset: goslim_pir +synonym: "regulation" BROAD [] +is_a: GO:0008150 ! biological_process + +[Term] +id: GO:0065009 +name: regulation of molecular function +namespace: biological_process +def: "Any process that modulates the frequency, rate or extent of a molecular function, an elemental biological activity occurring at the molecular level, such as catalysis or binding." [GOC:isa_complete] +subset: gocheck_do_not_annotate +subset: goslim_pir +subset: goslim_plant +synonym: "regulation of a molecular function" EXACT [] +is_a: GO:0065007 ! biological regulation +intersection_of: GO:0065007 ! biological regulation +intersection_of: regulates GO:0003674 ! molecular_function +relationship: regulates GO:0003674 ! molecular_function + +[Term] +id: GO:0071944 +name: cell periphery +namespace: cellular_component +def: "The part of a cell encompassing the cell cortex, the plasma membrane, and any external encapsulating structures." [GOC:mah] +subset: goslim_flybase_ribbon +is_a: GO:0110165 ! cellular anatomical entity +created_by: mah +creation_date: 2010-10-04T01:51:47Z + +[Term] +id: GO:0098590 +name: plasma membrane region +namespace: cellular_component +def: "A membrane that is a (regional) part of the plasma membrane." [GOC:dos] +comment: Note that this term should not be used for direct manual annotation as it should always be possible to choose a more specific subclass. +subset: gocheck_do_not_manually_annotate +synonym: "region of plasma membrane" EXACT [] +is_a: GO:0016020 ! membrane +intersection_of: GO:0016020 ! membrane +intersection_of: part_of GO:0005886 ! plasma membrane +relationship: part_of GO:0005886 ! plasma membrane +created_by: dos +creation_date: 2014-03-06T11:55:32Z + +[Term] +id: GO:0099568 +name: cytoplasmic region +namespace: cellular_component +def: "Any (proper) part of the cytoplasm of a single cell of sufficient size to still be considered cytoplasm." [GOC:dos] +is_a: GO:0005737 ! cytoplasm +intersection_of: GO:0005737 ! cytoplasm +intersection_of: part_of GO:0005737 ! cytoplasm +relationship: part_of GO:0005737 ! cytoplasm + +[Term] +id: GO:0099738 +name: cell cortex region +namespace: cellular_component +def: "The complete extent of cell cortex that underlies some some region of the plasma membrane." [GOC:dos] +synonym: "perimembrane region" EXACT [] +is_a: GO:0005938 ! cell cortex +is_a: GO:0099568 ! cytoplasmic region +intersection_of: GO:0005938 ! cell cortex +intersection_of: part_of GO:0005938 ! cell cortex +relationship: part_of GO:0005938 ! cell cortex + +[Term] +id: GO:0110165 +name: cellular anatomical entity +namespace: cellular_component +def: "A part of a cellular organism that is either an immaterial entity or a material entity with granularity above the level of a protein complex but below that of an anatomical system. Or, a substance produced by a cellular organism with granularity above the level of a protein complex." [GOC:kmv] +is_a: CARO:0000000 ! anatomical entity +is_a: GO:0005575 ! cellular_component +created_by: kmv +creation_date: 2019-08-12T18:01:37Z + +[Term] +id: GO:0031150 +name: sorocarp stalk development +namespace: biological_process +def: "The process whose specific outcome is the progression of the sorocarp stalk over time, from its formation to the mature structure. The sorocarp stalk is a tubular structure that consists of cellulose-covered cells stacked on top of each other and surrounded by an acellular stalk tube composed of cellulose and glycoprotein. An example of this process is found in Dictyostelium discoideum." [GOC:mtg_sensu, ISBN:0521583640, PMID:4338436] +synonym: "sorophore development" EXACT [] +synonym: "stalk development" BROAD [] +synonym: "stalk formation" BROAD [] +is_a: GO:0008150 ! biological_process +relationship: only_in_taxon NCBITaxon:5782 ! Dictyostelium + +[Term] +id: GO:9999998 +name: fake term for testing pmid type +is_a: GO:0005575 ! cellular_component +def: "fake definition to test retracted typo in reference" [PMID:9999999999999] + +[Term] +id: GO:9999999 +name: fake term for testing retraction +is_a: GO:0005575 ! cellular_component +def: "fake definition to test retracted reference" [PMID:19717156] + + +[Term] +id: NCBITaxon:1 +name: root +synonym: "all" RELATED [] +relationship: in_taxon NCBITaxon:1 ! root + +[Term] +id: NCBITaxon:10239 +name: Viruses +synonym: "Vira" RELATED [] +synonym: "Viridae" RELATED [] +synonym: "viruses" RELATED [] +is_a: NCBITaxon_Union:0000030 ! cellular organisms or viruses +disjoint_from: NCBITaxon:131567 ! cellular organisms +relationship: in_taxon NCBITaxon:10239 ! Viruses + +[Term] +id: NCBITaxon:1117 +name: Cyanobacteria +synonym: "blue-green algae" EXACT [] +synonym: "blue-green bacteria" EXACT [] +synonym: "cyanobacteria" RELATED [] +synonym: "Cyanophyceae" RELATED [] +synonym: "Cyanophycota" RELATED [] +synonym: "Cyanophyta" RELATED [] +synonym: "cyanophytes" EXACT [] +synonym: "Oxygenic photosynthetic bacteria" RELATED [] +synonym: "Oxyphotobacteria" RELATED [] +is_a: NCBITaxon:1798711 ! Cyanobacteria/Melainabacteria group +is_a: NCBITaxon_Union:0000002 ! Viridiplantae or Cyanobacteria +relationship: in_taxon NCBITaxon:1117 ! Cyanobacteria + +[Term] +id: NCBITaxon:131567 +name: cellular organisms +synonym: "biota" RELATED [] +is_a: NCBITaxon_Union:0000030 ! cellular organisms or viruses +relationship: in_taxon NCBITaxon:131567 ! cellular organisms + +[Term] +id: NCBITaxon:142796 +name: Eumycetozoa +synonym: "Eumycetozoa Zopf, 1884" RELATED [] +synonym: "Mycetozoa" RELATED [] +synonym: "mycetozoans" RELATED [] +is_a: NCBITaxon:2605435 ! Evosea +relationship: in_taxon NCBITaxon:142796 ! Eumycetozoa + +[Term] +id: NCBITaxon:1783272 +name: Terrabacteria group +is_a: NCBITaxon:2 ! Bacteria +relationship: in_taxon NCBITaxon:1783272 ! Terrabacteria group + +[Term] +id: NCBITaxon:1798711 +name: Cyanobacteria/Melainabacteria group +is_a: NCBITaxon:1783272 ! Terrabacteria group +relationship: in_taxon NCBITaxon:1798711 ! Cyanobacteria/Melainabacteria group + +[Term] +id: NCBITaxon:2 +name: Bacteria +synonym: "bacteria" RELATED [] +synonym: "eubacteria" EXACT [] +synonym: "Monera" RELATED [] +synonym: "Procaryotae" RELATED [] +synonym: "Prokaryota" RELATED [] +synonym: "Prokaryotae" RELATED [] +synonym: "prokaryote" RELATED [] +synonym: "prokaryotes" RELATED [] +is_a: NCBITaxon_Union:0000000 ! Viridiplantae or Bacteria +is_a: NCBITaxon_Union:0000004 ! Prokaryota +is_a: NCBITaxon_Union:0000020 ! Fungi or Bacteria +disjoint_from: NCBITaxon:2157 ! Archaea +disjoint_from: NCBITaxon:2759 ! Eukaryota +relationship: in_taxon NCBITaxon:2 ! Bacteria + +[Term] +id: NCBITaxon:2058185 +name: Dictyosteliaceae +is_a: NCBITaxon:2058949 ! Dictyosteliales +relationship: in_taxon NCBITaxon:2058185 ! Dictyosteliaceae + +[Term] +id: NCBITaxon:2058949 +name: Dictyosteliales +is_a: NCBITaxon:33083 ! Dictyostelia +relationship: in_taxon NCBITaxon:2058949 ! Dictyosteliales + +[Term] +id: NCBITaxon:2157 +name: Archaea +synonym: "archaea" RELATED [] +synonym: "Archaebacteria" RELATED [] +synonym: "Mendosicutes" RELATED [] +synonym: "Metabacteria" RELATED [] +synonym: "Monera" RELATED [] +synonym: "Procaryotae" RELATED [] +synonym: "Prokaryota" RELATED [] +synonym: "Prokaryotae" RELATED [] +synonym: "prokaryote" RELATED [] +synonym: "prokaryotes" RELATED [] +is_a: NCBITaxon_Union:0000004 ! Prokaryota +is_a: NCBITaxon_Union:0000025 ! Archaea or Eukaryota +disjoint_from: NCBITaxon:2759 ! Eukaryota +relationship: in_taxon NCBITaxon:2157 ! Archaea + +[Term] +id: NCBITaxon:2605435 +name: Evosea +is_a: NCBITaxon:554915 ! Amoebozoa +relationship: in_taxon NCBITaxon:2605435 ! Evosea + +[Term] +id: NCBITaxon:2611352 +name: Discoba +is_a: NCBITaxon:2759 ! Eukaryota +disjoint_from: NCBITaxon:33090 ! Viridiplantae +disjoint_from: NCBITaxon:33154 ! Opisthokonta +disjoint_from: NCBITaxon:554915 ! Amoebozoa +relationship: in_taxon NCBITaxon:2611352 ! Discoba + +[Term] +id: NCBITaxon:2759 +name: Eukaryota +synonym: "Eucarya" RELATED [] +synonym: "Eucaryotae" RELATED [] +synonym: "eucaryotes" EXACT [] +synonym: "Eukarya" RELATED [] +synonym: "Eukaryotae" RELATED [] +synonym: "eukaryotes" EXACT [] +synonym: "eukaryotes" RELATED [] +is_a: NCBITaxon_Union:0000025 ! Archaea or Eukaryota +relationship: in_taxon NCBITaxon:2759 ! Eukaryota + +[Term] +id: NCBITaxon:33083 +name: Dictyostelia +synonym: "cellular slime molds" RELATED [] +synonym: "dictyostelid cellular slime molds" EXACT [] +synonym: "Dictyostelida" RELATED [] +synonym: "Dictyostelids" RELATED [] +synonym: "Dictyosteliida" RELATED [] +is_a: NCBITaxon:142796 ! Eumycetozoa +relationship: in_taxon NCBITaxon:33083 ! Dictyostelia + +[Term] +id: NCBITaxon:33090 +name: Viridiplantae +synonym: "Chlorobionta" RELATED [] +synonym: "Chlorophyta/Embryophyta group" EXACT [] +synonym: "chlorophyte/embryophyte group" EXACT [] +synonym: "Chloroplastida" RELATED [] +synonym: "green plants" EXACT [] +synonym: "green plants" RELATED [] +is_a: NCBITaxon_Union:0000002 ! Viridiplantae or Cyanobacteria +is_a: NCBITaxon_Union:0000008 ! Viridiplantae or Euglenozoa +disjoint_from: NCBITaxon:33154 ! Opisthokonta +disjoint_from: NCBITaxon:554915 ! Amoebozoa +relationship: in_taxon NCBITaxon:33090 ! Viridiplantae + +[Term] +id: NCBITaxon:33154 +name: Opisthokonta +synonym: "Fungi/Metazoa group" RELATED [] +synonym: "opisthokonts" RELATED [] +is_a: NCBITaxon_Union:0000024 ! Unikonta +disjoint_from: NCBITaxon:554915 ! Amoebozoa +relationship: in_taxon NCBITaxon:33154 ! Opisthokonta + +[Term] +id: NCBITaxon:33208 +name: Metazoa +is_a: NCBITaxon:33154 ! Opisthokonta + +[Term] +id: NCBITaxon:40674 +name: Mammalia +is_a: NCBITaxon:33208 ! Metazoa + +[Term] +id: NCBITaxon:9606 +name: Homo sapiens +is_a: NCBITaxon:40674 ! Mammalia + + +[Term] +id: NCBITaxon:33682 +name: Euglenozoa +synonym: "Euglenozoans" RELATED [] +is_a: NCBITaxon:2611352 ! Discoba +is_a: NCBITaxon_Union:0000008 ! Viridiplantae or Euglenozoa +relationship: in_taxon NCBITaxon:33682 ! Euglenozoa + +[Term] +id: NCBITaxon:4751 +name: Fungi +synonym: "fungi" RELATED [] +synonym: "Mycota" RELATED [] +is_a: NCBITaxon:33154 ! Opisthokonta +is_a: NCBITaxon_Union:0000020 ! Fungi or Bacteria +is_a: NCBITaxon_Union:0000022 ! Fungi or Dictyostelium +relationship: in_taxon NCBITaxon:4751 ! Fungi + +[Term] +id: NCBITaxon:554915 +name: Amoebozoa +is_a: NCBITaxon_Union:0000024 ! Unikonta +relationship: in_taxon NCBITaxon:554915 ! Amoebozoa + +[Term] +id: NCBITaxon:5782 +name: Dictyostelium +synonym: "Hyalostilbum" RELATED [] +is_a: NCBITaxon:2058185 ! Dictyosteliaceae +is_a: NCBITaxon_Union:0000022 ! Fungi or Dictyostelium +relationship: in_taxon NCBITaxon:5782 ! Dictyostelium + +[Term] +id: NCBITaxon:44689 +name: Dictyostelium discoideum +is_a: NCBITaxon:5782 ! Dictyostelium + +[Term] +id: NCBITaxon_Union:0000000 +name: Viridiplantae or Bacteria +is_a: NCBITaxon_Union:0000006 ! Viridiplantae or Archaea or Bacteria +is_a: NCBITaxon_Union:0000007 ! Viridiplantae or Bacteria or Euglenozoa +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:33090 ! Viridiplantae +created_by: Jennifer I Deegan +creation_date: 2009-08-10T10:46:43Z + +[Term] +id: NCBITaxon_Union:0000002 +name: Viridiplantae or Cyanobacteria +def: "The union of the taxa Viridiplantae and Cyanobacteria." [GOC:mtg_go-taxon] +is_a: NCBITaxon_Union:0000000 ! Viridiplantae or Bacteria +union_of: NCBITaxon:1117 ! Cyanobacteria +union_of: NCBITaxon:33090 ! Viridiplantae +created_by: Jennifer Deegan +creation_date: 2008-07-16T03:33:38Z + +[Term] +id: NCBITaxon_Union:0000004 +name: Prokaryota +is_a: NCBITaxon_Union:0000006 ! Viridiplantae or Archaea or Bacteria +is_a: NCBITaxon_Union:0000023 ! Fungi or Bacteria or Archaea +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:2157 ! Archaea +created_by: jdeegan +creation_date: 2008-07-24T11:56:07Z + +[Term] +id: NCBITaxon_Union:0000006 +name: Viridiplantae or Archaea or Bacteria +is_a: NCBITaxon_Union:0000021 ! Viridiplantae or Bacteria or Euglenozoa or Archaea +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:2157 ! Archaea +union_of: NCBITaxon:33090 ! Viridiplantae +created_by: jdeegan +creation_date: 2008-08-14T10:45:59Z + +[Term] +id: NCBITaxon_Union:0000007 +name: Viridiplantae or Bacteria or Euglenozoa +is_a: NCBITaxon_Union:0000021 ! Viridiplantae or Bacteria or Euglenozoa or Archaea +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:33090 ! Viridiplantae +union_of: NCBITaxon:33682 ! Euglenozoa +created_by: Jennifer I Deegan +creation_date: 2009-08-10T10:46:43Z + +[Term] +id: NCBITaxon_Union:0000008 +name: Viridiplantae or Euglenozoa +is_a: NCBITaxon:2759 ! Eukaryota +is_a: NCBITaxon_Union:0000007 ! Viridiplantae or Bacteria or Euglenozoa +union_of: NCBITaxon:33090 ! Viridiplantae +union_of: NCBITaxon:33682 ! Euglenozoa +created_by: Jennifer I Deegan +creation_date: 2009-08-10T10:46:43Z + +[Term] +id: NCBITaxon_Union:0000020 +name: Fungi or Bacteria +is_a: NCBITaxon_Union:0000023 ! Fungi or Bacteria or Archaea +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:4751 ! Fungi +created_by: Jennifer Deegan +creation_date: 2008-07-24T04:15:25Z + +[Term] +id: NCBITaxon_Union:0000021 +name: Viridiplantae or Bacteria or Euglenozoa or Archaea +is_a: NCBITaxon:131567 ! cellular organisms +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:2157 ! Archaea +union_of: NCBITaxon:33090 ! Viridiplantae +union_of: NCBITaxon:33682 ! Euglenozoa +created_by: Jennifer I Deegan +creation_date: 2009-08-10T10:46:43Z + +[Term] +id: NCBITaxon_Union:0000022 +name: Fungi or Dictyostelium +is_a: NCBITaxon_Union:0000024 ! Unikonta +union_of: NCBITaxon:4751 ! Fungi +union_of: NCBITaxon:5782 ! Dictyostelium + +[Term] +id: NCBITaxon_Union:0000023 +name: Fungi or Bacteria or Archaea +is_a: NCBITaxon:131567 ! cellular organisms +union_of: NCBITaxon:2 ! Bacteria +union_of: NCBITaxon:2157 ! Archaea +union_of: NCBITaxon:4751 ! Fungi + +[Term] +id: NCBITaxon_Union:0000024 +name: Unikonta +def: "The unikonts have a triple-gene fusion that is lacking in the bikonts. The three genes that are fused together in the unikonts but not bacteria or bikonts encode enzymes for synthesis of the pyrimidine nucleotides: carbamoyl phosphate synthase, dihydroorotase, aspartate carbamoyltransferase. This must have involved a double fusion, a rare pair of events, supporting the shared ancestry of Opisthokonta and Amoebozoa." [http://en.wikipedia.org/wiki/Unikont] +synonym: "unikonts" EXACT [] +is_a: NCBITaxon:2759 ! Eukaryota +union_of: NCBITaxon:33154 ! Opisthokonta +union_of: NCBITaxon:554915 ! Amoebozoa + +[Term] +id: NCBITaxon_Union:0000025 +name: Archaea or Eukaryota +synonym: "archaea-eukaryota" EXACT [] +is_a: NCBITaxon:131567 ! cellular organisms +union_of: NCBITaxon:2157 ! Archaea +union_of: NCBITaxon:2759 ! Eukaryota + +[Term] +id: NCBITaxon_Union:0000030 +name: cellular organisms or viruses +is_a: NCBITaxon:1 ! root +union_of: NCBITaxon:10239 ! Viruses +union_of: NCBITaxon:131567 ! cellular organisms + +[Term] +id: PATO:0000001 +name: quality +def: "A dependent entity that inheres in a bearer by virtue of how the bearer is related to other entities" [] +is_a: BFO:0000020 ! specifically dependent continuant + +[Term] +id: PATO:0001241 +name: physical object quality +def: "A quality which inheres in a continuant." [] +synonym: "monadic quality of a continuant" EXACT [] +synonym: "monadic quality of an object" NARROW [] +synonym: "monadic quality of continuant" NARROW [] +synonym: "multiply inhering quality of a physical entity" EXACT [] +synonym: "quality of a continuant" EXACT [] +synonym: "quality of a single physical entity" EXACT [] +synonym: "quality of an object" EXACT [] +synonym: "quality of continuant" EXACT [] +is_a: PATO:0000001 ! quality + +[Term] +id: PATO:0001396 +name: cellular quality +def: "A monadic quality of continuant that exists at the cellular level of organisation." [] +is_a: PATO:0001241 ! physical object quality + +[Term] +id: PATO:0001404 +name: nucleate quality +def: "A cellular quality inhering in a bearer by virtue of bearer's number of nuclei." [] +is_a: PATO:0001396 ! cellular quality + +[Term] +id: PATO:0001405 +name: anucleate +def: "A nucleate quality inhering in a bearer by virtue of the bearer's having no nucleus." [] +is_a: PATO:0001404 ! nucleate quality + +[Term] +id: PATO:0001406 +name: binucleate +def: "A nucleate quality inhering in a bearer by virtue of the bearer's having two nuclei." [] +is_a: PATO:0001908 ! multinucleate + +[Term] +id: PATO:0001407 +name: mononucleate +def: "A nucleate quality inhering in a bearer by virtue of the bearer's having one nucleus." [] +is_a: PATO:0002505 ! nucleated + +[Term] +id: PATO:0001908 +name: multinucleate +def: "A nucleate quality inhering in a bearer by virtue of the bearer's having more than one nucleus." [] +is_a: PATO:0002505 ! nucleated + +[Term] +id: PATO:0002505 +name: nucleated +def: "A nucleate quality inhering in a bearer by virtue of the bearer's having one or more nucleus." [] +is_a: PATO:0001404 ! nucleate quality + +[Typedef] +id: acts_upstream_of +name: acts upstream of +def: "c acts upstream of p if and only if c enables some f that is involved in p' and p' occurs chronologically before p, is not part of p, and affects the execution of p. c is a material entity and f, p, p' are processes." [] +xref: RO:0002263 +holds_over_chain: enables causally_upstream_of +is_a: acts_upstream_of_or_within ! acts upstream of or within + +[Typedef] +id: acts_upstream_of,_negative_effect +name: acts upstream of, negative effect +def: "c 'acts upstream of, negative effect' p if c is enables f, and f is causally upstream of p, and the direction of f is negative" [] +xref: RO:0004035 +holds_over_chain: enables causally_upstream_of,_negative_effect +is_a: acts_upstream_of ! acts upstream of +is_a: acts_upstream_of_or_within,_negative_effect ! acts upstream of or within, negative effect + +[Typedef] +id: acts_upstream_of,_positive_effect +name: acts upstream of, positive effect +def: "c 'acts upstream of, positive effect' p if c is enables f, and f is causally upstream of p, and the direction of f is positive" [] +xref: RO:0004034 +holds_over_chain: enables causally_upstream_of,_positive_effect +is_a: acts_upstream_of ! acts upstream of +is_a: acts_upstream_of_or_within,_positive_effect ! acts upstream of or within, positive effect + +[Typedef] +id: acts_upstream_of_or_within +name: acts upstream of or within +def: "c acts upstream of or within p if c is enables f, and f is causally upstream of or within p. c is a material entity and p is an process." [] +synonym: "affects" RELATED [] +xref: RO:0002264 +holds_over_chain: enables causally_upstream_of_or_within +is_a: causal_agent_in_process ! causal agent in process + +[Typedef] +id: acts_upstream_of_or_within,_negative_effect +name: acts upstream of or within, negative effect +xref: RO:0004033 +holds_over_chain: enables causally_upstream_of_or_within,_negative_effect +is_a: acts_upstream_of_or_within ! acts upstream of or within + +[Typedef] +id: acts_upstream_of_or_within,_positive_effect +name: acts upstream of or within, positive effect +xref: RO:0004032 +holds_over_chain: enables causally_upstream_of_or_within,_positive_effect +is_a: acts_upstream_of_or_within ! acts upstream of or within + +[Typedef] +id: bearer_of +name: bearer of +namespace: external +def: "a relation between an independent continuant (the bearer) and a specifically dependent continuant (the dependent), in which the dependent specifically depends on the bearer for its existence" [] +xref: RO:0000053 +range: BFO:0000020 ! specifically dependent continuant + +[Typedef] +id: capable_of +name: capable of +name: capable_of +namespace: external +def: "A relation between a material entity (such as a cell) and a process, in which the material entity has the ability to carry out the process. " [] +xref: RO:0002215 +domain: BFO:0000004 ! independent continuant +range: BFO:0000015 ! process +is_a: capable_of_part_of ! capable of part of +is_a: functionally_related_to ! functionally related to + +[Typedef] +id: capable_of_negatively_regulating +name: capable of negatively regulating +def: "Holds between c and p if and only if c is capable of some activity a, and a negatively regulates p." [] +xref: RO:0002597 +holds_over_chain: capable_of negatively_regulates +is_a: capable_of_regulating ! capable of regulating + +[Typedef] +id: capable_of_part_of +name: capable of part of +namespace: external +def: "c stands in this relationship to p if and only if there exists some p' such that c is capable_of p', and p' is part_of p." [] +xref: RO:0002216 +holds_over_chain: capable_of part_of +is_a: causal_agent_in_process ! causal agent in process +is_a: functionally_related_to ! functionally related to + +[Typedef] +id: capable_of_positively_regulating +name: capable of positively regulating +def: "Holds between c and p if and only if c is capable of some activity a, and a positively regulates p." [] +xref: RO:0002598 +holds_over_chain: capable_of positively_regulates +is_a: capable_of_regulating ! capable of regulating + +[Typedef] +id: capable_of_regulating +name: capable of regulating +def: "Holds between c and p if and only if c is capable of some activity a, and a regulates p." [] +xref: RO:0002596 +holds_over_chain: capable_of regulates +is_a: causal_agent_in_process ! causal agent in process + +[Typedef] +id: causal_agent_in_process +name: causal agent in process +def: "A relationship between a material entity and a process where the material entity has some causal role that influences the process" [] +xref: RO:0002500 +is_a: causal_relation_between_material_entity_and_a_process ! causal relation between material entity and a process +inverse_of: process_has_causal_agent ! process has causal agent + +[Typedef] +id: causal_relation_between_entities +name: causal relation between entities +xref: RO:0002506 +domain: BFO:0000002 ! continuant +range: BFO:0000002 ! continuant +is_a: causally_related_to ! causally related to + +[Typedef] +id: causal_relation_between_material_entity_and_a_process +name: causal relation between material entity and a process +def: "A relationship that holds between a material entity and a process in which causality is involved, with either the material entity or some part of the material entity exerting some influence over the process, or the process influencing some aspect of the material entity." [] +xref: RO:0002595 +domain: BFO:0000040 ! material entity +range: BFO:0000015 ! process +is_a: causally_related_to ! causally related to + +[Typedef] +id: causal_relation_between_processes +name: causal relation between processes +def: "p is causally related to q if and only if p or any part of p and q or any part of q are linked by a chain of events where each event pair is one of direct activation or direct inhibition. p may be upstream, downstream, part of or a container of q." [] +xref: RO:0002501 +domain: BFO:0000003 ! occurrent +range: BFO:0000003 ! occurrent +is_a: causally_related_to ! causally related to + +[Typedef] +id: causally_downstream_of +name: causally downstream of +namespace: external +def: "inverse of upstream of" [] +xref: RO:0002404 +is_a: causally_downstream_of_or_within ! causally downstream of or within +is_a: preceded_by ! preceded_by +inverse_of: causally_upstream_of ! causally upstream of + +[Typedef] +id: causally_downstream_of_or_within +name: causally downstream of or within +namespace: external +def: "inverse of causally upstream of or within" [] +xref: RO:0002427 +is_transitive: true +is_a: causal_relation_between_processes ! causal relation between processes + +[Typedef] +id: causally_influenced_by +name: causally influenced by +xref: RO:0002559 +is_a: causal_relation_between_entities ! causal relation between entities +inverse_of: causally_influences ! causally influences + +[Typedef] +id: causally_influences +name: causally influences +def: "The entity or characteristic A is causally upstream of the entity or characteristic B, A having an effect on B. An entity corresponds to any biological type of entity as long as a mass is measurable. A characteristic corresponds to a particular specificity of an entity (e.g., phenotype, shape, size)." [] +xref: RO:0002566 +domain: BFO:0000002 ! continuant +range: BFO:0000002 ! continuant +is_a: causal_relation_between_entities ! causal relation between entities + +[Typedef] +id: causally_related_to +name: causally related to +def: "This relation groups causal relations between material entities and causal relations between processes" [] +xref: RO:0002410 + +[Typedef] +id: causally_upstream_of +name: causally upstream of +namespace: external +def: "p is causally upstream of q if and only if p precedes q and p and q are linked in a causal chain" [] +xref: RO:0002411 +is_transitive: true +is_a: causally_upstream_of_or_within ! causally upstream of or within +is_a: precedes ! precedes + +[Typedef] +id: causally_upstream_of,_negative_effect +name: causally upstream of, negative effect +namespace: external +xref: RO:0002305 +is_a: causally_upstream_of ! causally upstream of +is_a: causally_upstream_of_or_within,_negative_effect ! causally upstream of or within, negative effect + +[Typedef] +id: causally_upstream_of,_positive_effect +name: causally upstream of, positive effect +namespace: external +xref: RO:0002304 +is_a: causally_upstream_of ! causally upstream of +is_a: causally_upstream_of_or_within,_positive_effect ! causally upstream of or within, positive effect + +[Typedef] +id: causally_upstream_of_or_within +name: causally upstream of or within +namespace: external +def: "p 'causally upstream or within' q iff (1) the end of p is before the end of q and (2) the execution of p exerts some causal influence over the outputs of q; i.e. if p was abolished or the outputs of p were to be modified, this would necessarily affect q." [] +synonym: "affects" RELATED [] +xref: RO:0002418 +is_transitive: true +is_a: causal_relation_between_processes ! causal relation between processes +inverse_of: causally_downstream_of_or_within ! causally downstream of or within + +[Typedef] +id: causally_upstream_of_or_within,_negative_effect +name: causally upstream of or within, negative effect +xref: RO:0004046 +is_a: causally_upstream_of_or_within ! causally upstream of or within + +[Typedef] +id: causally_upstream_of_or_within,_positive_effect +name: causally upstream of or within, positive effect +xref: RO:0004047 +is_a: causally_upstream_of_or_within ! causally upstream of or within + +[Typedef] +id: contains_process +name: contains process +def: "[copied from inverse property 'occurs in'] b occurs_in c =def b is a process and c is a material entity or immaterial entity& there exists a spatiotemporal region r and b occupies_spatiotemporal_region r.& forall(t) if b exists_at t then c exists_at t & there exist spatial regions s and s’ where & b spatially_projects_onto s at t& c is occupies_spatial_region s’ at t& s is a proper_continuant_part_of s’ at t" [] +xref: BFO:0000067 + +[Typedef] +id: depends_on +name: depends on +xref: RO:0002502 + +[Typedef] +id: directly_negatively_regulated_by +name: directly negatively regulated by +def: "Process(P2) is directly negatively regulated by process(P1) iff: P1 negatively regulates P2 via direct physical interaction between an agent executing P1 (or some part of P1) and an agent executing P2 (or some part of P2). For example, if protein A has protein binding activity(P1) that targets protein B and this binding negatively regulates the kinase activity (P2) of protein B then P2 directly negatively regulated by P1." [] +xref: RO:0002023 +is_a: directly_regulated_by ! directly regulated by +inverse_of: directly_negatively_regulates ! directly negatively regulates + +[Typedef] +id: directly_negatively_regulates +name: directly negatively regulates +def: "Process(P1) directly negatively regulates process(P2) iff: P1 negatively regulates P2 via direct physical interaction between an agent executing P1 (or some part of P1) and an agent executing P2 (or some part of P2). For example, if protein A has protein binding activity(P1) that targets protein B and this binding negatively regulates the kinase activity (P2) of protein B then P1 directly negatively regulates P2." [] +xref: RO:0002630 +is_a: directly_regulates ! directly regulates +is_a: negatively_regulates ! negatively regulates + +[Typedef] +id: directly_negatively_regulates_activity_of +name: directly negatively regulates activity of +def: "The entity A, immediately upstream of the entity B, has an activity that negatively regulates an activity performed by B. \nFor example, A and B may be gene products and binding of B by A negatively regulates the kinase activity of B." [] +synonym: "molecularly decreases activity of" EXACT [] +xref: RO:0002449 +domain: BFO:0000040 ! material entity +range: BFO:0000040 ! material entity +is_a: directly_regulates_activity_of ! directly regulates activity of + +[Typedef] +id: directly_positively_regulated_by +name: directly positively regulated by +def: "Process(P2) is directly postively regulated by process(P1) iff: P1 positively regulates P2 via direct physical interaction between an agent executing P1 (or some part of P1) and an agent executing P2 (or some part of P2). For example, if protein A has protein binding activity(P1) that targets protein B and this binding positively regulates the kinase activity (P2) of protein B then P2 is directly postively regulated by P1." [] +xref: RO:0002024 +is_a: directly_regulated_by ! directly regulated by +inverse_of: directly_positively_regulates ! directly positively regulates + +[Typedef] +id: directly_positively_regulates +name: directly positively regulates +def: "Process(P1) directly postively regulates process(P2) iff: P1 positively regulates P2 via direct physical interaction between an agent executing P1 (or some part of P1) and an agent executing P2 (or some part of P2). For example, if protein A has protein binding activity(P1) that targets protein B and this binding positively regulates the kinase activity (P2) of protein B then P1 directly positively regulates P2." [] +xref: RO:0002629 +is_a: directly_regulates ! directly regulates +is_a: positively_regulates ! positively regulates + +[Typedef] +id: directly_positively_regulates_activity_of +name: directly positively regulates activity of +def: "The entity A, immediately upstream of the entity B, has an activity that positively regulates an activity performed by B. \nFor example, A and B may be gene products and binding of B by A positively regulates the kinase activity of B." [] +synonym: "molecularly increases activity of" EXACT [] +xref: RO:0002450 +domain: BFO:0000040 ! material entity +range: BFO:0000040 ! material entity +is_a: directly_regulates_activity_of ! directly regulates activity of + +[Typedef] +id: directly_regulated_by +name: directly regulated by +xref: RO:0002022 +is_a: regulated_by ! regulated by +inverse_of: directly_regulates ! directly regulates + +[Typedef] +id: directly_regulates +name: directly regulates +def: "Process(P1) directly regulates process(P2) iff: P1 regulates P2 via direct physical interaction between an agent executing P1 (or some part of P1) and an agent executing P2 (or some part of P2). For example, if protein A has protein binding activity(P1) that targets protein B and this binding regulates the kinase activity (P2) of protein B then P1 directly regulates P2." [] +xref: RO:0002578 +is_a: immediately_causally_upstream_of ! immediately causally upstream of +is_a: regulates ! regulates + +[Typedef] +id: directly_regulates_activity_of +name: directly regulates activity of +def: "The entity A, immediately upstream of the entity B, has an activity that regulates an activity performed by B. For example, A and B may be gene products and binding of B by A regulates the kinase activity of B.\n\nA and B can be physically interacting but not necessarily. Immediately upstream means there are no intermediate entity between A and B." [] +synonym: "molecularly controls" EXACT [] +xref: RO:0002448 +domain: BFO:0000040 ! material entity +range: BFO:0000040 ! material entity +is_a: molecularly_interacts_with ! molecularly interacts with +is_a: regulates_activity_of ! regulates activity of + +[Typedef] +id: enabled_by +name: enabled by +def: "inverse of enables" [] +xref: RO:0002333 +is_a: functionally_related_to ! functionally related to +is_a: has_participant ! has_participant + +[Typedef] +id: enables +name: enables +xref: RO:0002327 +is_a: capable_of ! capable_of +inverse_of: enabled_by ! enabled by +transitive_over: has_component_activity ! has component activity +transitive_over: has_part ! has part + +[Typedef] +id: enables_subfunction +name: enables subfunction +def: "Holds between an entity and an process P where the entity enables some larger compound process, and that larger process has-part P." [] +xref: RO:0004031 +holds_over_chain: enables has_part +is_a: functionally_related_to ! functionally related to + +[Typedef] +id: ends_after +name: ends after +xref: RO:0002086 +is_transitive: true +is_a: temporally_related_to ! temporally related to + +[Typedef] +id: evolutionarily_related_to +name: evolutionarily related to +def: "A relationship that holds via some environmental process" [] +xref: RO:0002320 + +[Typedef] +id: functionally_related_to +name: functionally related to +def: "A grouping relationship for any relationship directly involving a function, or that holds because of a function of one of the related entities." [] +xref: RO:0002328 + +[Typedef] +id: has_component +name: has component +name: has_component +namespace: external +def: "w 'has component' p if w 'has part' p and w is such that it can be directly disassembled into into n parts p, p2, p3, ..., pn, where these parts are of similar type." [] +xref: RO:0002180 +is_a: has_part ! has part + +[Typedef] +id: has_component_activity +name: has component activity +xref: RO:0002017 +is_a: has_component_process ! has component process + +[Typedef] +id: has_component_process +name: has component process +def: "w 'has process component' p if p and w are processes, w 'has part' p and w is such that it can be directly disassembled into into n parts p, p2, p3, ..., pn, where these parts are of similar type." [] +xref: RO:0002018 +domain: BFO:0000015 ! process +range: BFO:0000015 ! process +is_a: has_component ! has component + +[Typedef] +id: has_effector_activity +name: has effector activity +def: "A 'has effector activity' B if A and B are GO molecular functions (GO_0003674), A 'has component activity' B and B is the effector (output function) of B. Each compound function has only one effector activity." [] +xref: RO:0002025 +is_functional: true +is_a: has_component_activity ! has component activity + +[Typedef] +id: has_input +name: has input +namespace: external +def: "p has input c iff: p is a process, c is a material entity, c is a participant in p, c is present at the start of p, and the state of c is modified during p." [] +xref: RO:0002233 +domain: BFO:0000015 ! process +is_a: has_participant ! has_participant +inverse_of: input_of ! input of + +[Typedef] +id: has_negative_regulatory_component_activity +name: has negative regulatory component activity +namespace: external +def: "A relationship that holds between a GO molecular function and a component of that molecular function that negatively regulates the activity of the whole. More formally, A 'has regulatory component activity' B iff :A and B are GO molecular functions (GO_0003674), A has_component B and A is negatively regulated by B." [] +xref: RO:0002014 +is_a: has_regulatory_component_activity ! has regulatory component activity +is_a: negatively_regulated_by ! negatively regulated by + +[Typedef] +id: has_part +name: has part +name: has_part +namespace: external +def: "a core relation that holds between a whole and its part" [] +def: "Q1 has_part Q2 if and only if: every instance of Q1 is a quality_of an entity that has_quality some Q2." [] +xref: BFO:0000051 +is_transitive: true +is_a: overlaps ! overlaps + +[Typedef] +id: has_part_structure_that_is_capable_of +name: has part structure that is capable of +def: "s 'has part structure that is capable of' p if and only if there exists some part x such that s 'has part' x and x 'capable of' p" [] +xref: RO:0002584 +holds_over_chain: has_part capable_of +is_a: causal_relation_between_material_entity_and_a_process ! causal relation between material entity and a process +is_a: functionally_related_to ! functionally related to + +[Typedef] +id: has_part_that_occurs_in +name: has part that occurs in +def: "p has part that occurs in c if and only if there exists some p1, such that p has_part p1, and p1 occurs in c." [] +xref: RO:0002479 +domain: BFO:0000003 ! occurrent +range: BFO:0000004 ! independent continuant +holds_over_chain: has_part occurs_in + +[Typedef] +id: has_participant +name: has participant +name: has_participant +namespace: external +def: "a relation between a process and a continuant, in which the continuant is somehow involved in the process" [] +xref: RO:0000057 +domain: BFO:0000003 ! occurrent +range: BFO:0000002 ! continuant +holds_over_chain: has_part has_participant + +[Typedef] +id: has_positive_regulatory_component_activity +name: has positive regulatory component activity +def: "A relationship that holds between a GO molecular function and a component of that molecular function that positively regulates the activity of the whole. More formally, A 'has regulatory component activity' B iff :A and B are GO molecular functions (GO_0003674), A has_component B and A is positively regulated by B." [] +xref: RO:0002015 +is_a: has_regulatory_component_activity ! has regulatory component activity +is_a: positively_regulated_by ! positively regulated by + +[Typedef] +id: has_primary_input_or_output +name: has primary input or output +namespace: external +def: "p 'has primary input ot output' c iff either (a) p 'has primary input' c or (b) p 'has primary output' c." [] +xref: RO:0004007 +is_a: has_participant ! has_participant + +[Typedef] +id: has_regulatory_component_activity +name: has regulatory component activity +namespace: external +def: "A 'has regulatory component activity' B if A and B are GO molecular functions (GO_0003674), A has_component B and A is regulated by B." [] +xref: RO:0002013 +is_a: has_component_activity ! has component activity +is_a: regulated_by ! regulated by + +[Typedef] +id: has_role +name: has role +def: "a relation between an independent continuant (the bearer) and a role, in which the role specifically depends on the bearer for its existence" [] +xref: RO:0000087 +domain: BFO:0000004 ! independent continuant +range: BFO:0000023 ! role +is_a: bearer_of ! bearer of + +[Typedef] +id: immediately_causally_downstream_of +name: immediately causally downstream of +namespace: external +xref: RO:0002405 +is_a: causally_downstream_of ! causally downstream of +is_a: immediately_preceded_by ! immediately preceded by +inverse_of: immediately_causally_upstream_of ! immediately causally upstream of + +[Typedef] +id: immediately_causally_upstream_of +name: immediately causally upstream of +namespace: external +def: "p is immediately causally upstream of q iff both (a) p immediately precedes q and (b) p is causally upstream of q. In addition, the output of p must be an input of q." [] +xref: RO:0002412 +is_a: causally_upstream_of ! causally upstream of +is_a: immediately_precedes ! immediately_precedes + +[Typedef] +id: immediately_preceded_by +name: immediately preceded by +name: immediately_preceded_by +namespace: external +def: "X immediately_preceded_by Y iff: end(X) simultaneous_with start(Y)" [] +synonym: "directly preceded by" EXACT [] +synonym: "is directly preceded by" EXACT [] +synonym: "is immediately preceded by" EXACT [] +synonym: "starts_at_end_of" EXACT [] +xref: RO:0002087 +is_a: preceded_by ! preceded_by +inverse_of: immediately_precedes ! immediately_precedes + +[Typedef] +id: immediately_precedes +name: immediately precedes +name: immediately_precedes +namespace: external +xref: RO:0002090 +is_a: precedes ! precedes + +[Typedef] +id: in_taxon +name: in taxon +def: "x is in taxon y if an only if y is an organism, and the relationship between x and y is one of: part of (reflexive), developmentally preceded by, derives from, secreted by, expressed." [] +xref: RO:0002162 +range: CARO:0001010 ! organism or virus or viroid +holds_over_chain: capable_of in_taxon +holds_over_chain: has_part in_taxon +holds_over_chain: overlaps in_taxon +holds_over_chain: part_of in_taxon +is_a: evolutionarily_related_to ! evolutionarily related to + +[Typedef] +id: inheres_in +name: inheres in +def: "a relation between a specifically dependent continuant (the dependent) and an independent continuant (the bearer), in which the dependent specifically depends on the bearer for its existence" [] +xref: RO:0000052 +is_a: inheres_in_part_of ! inheres in part of +inverse_of: bearer_of ! bearer of + +[Typedef] +id: inheres_in_part_of +name: inheres in part of +def: "q inheres in part of w if and only if there exists some p such that q inheres in p and p part of w." [] +xref: RO:0002314 +holds_over_chain: inheres_in part_of +is_a: depends_on ! depends on +transitive_over: part_of ! part of + +[Typedef] +id: input_of +name: input of +def: "inverse of has input" [] +xref: RO:0002352 +is_a: functionally_related_to ! functionally related to +is_a: participates_in ! participates in + +[Typedef] +id: interacts_with +name: interacts with +def: "A relationship that holds between two entities in which the processes executed by the two entities are causally connected." [] +synonym: "in pairwise interaction with" EXACT [] +xref: RO:0002434 +domain: BFO:0000040 ! material entity +range: BFO:0000040 ! material entity +is_symmetric: true + +[Typedef] +id: involved_in +name: involved in +def: "c involved_in p if and only if c enables some process p', and p' is part of p" [] +xref: RO:0002331 +holds_over_chain: enables part_of +is_a: involved_in_or_involved_in_regulation_of ! involved in or involved in regulation of +is_a: participates_in ! participates in +transitive_over: part_of ! part of + +[Typedef] +id: involved_in_negative_regulation_of +name: involved in negative regulation of +def: "c involved in regulation of p if c is involved in some p' and p' negatively regulates some p" [] +xref: RO:0002430 +holds_over_chain: enables negatively_regulates +holds_over_chain: involved_in negatively_regulates +is_a: involved_in_regulation_of ! involved in regulation of + +[Typedef] +id: involved_in_or_involved_in_regulation_of +name: involved in or involved in regulation of +def: "c involved in or regulates p if and only if either (i) c is involved in p or (ii) c is involved in regulation of p" [] +xref: RO:0002431 +is_a: acts_upstream_of_or_within ! acts upstream of or within +is_a: causal_agent_in_process ! causal agent in process +is_a: functionally_related_to ! functionally related to + +[Typedef] +id: involved_in_positive_regulation_of +name: involved in positive regulation of +def: "c involved in regulation of p if c is involved in some p' and p' positively regulates some p" [] +xref: RO:0002429 +holds_over_chain: enables positively_regulates +holds_over_chain: involved_in positively_regulates +is_a: involved_in_regulation_of ! involved in regulation of + +[Typedef] +id: involved_in_regulation_of +name: involved in regulation of +def: "c involved in regulation of p if c is involved in some p' and p' regulates some p" [] +xref: RO:0002428 +holds_over_chain: enables regulates +holds_over_chain: involved_in regulates +is_a: acts_upstream_of ! acts upstream of +is_a: involved_in_or_involved_in_regulation_of ! involved in or involved in regulation of + +[Typedef] +id: is_active_in +name: is active in +def: "c executes activity in d if and only if c enables p and p occurs_in d. Assuming no action at a distance by gene products, if a gene product enables (is capable of) a process that occurs in some structure, it must have at least some part in that structure." [] +synonym: "enables activity in" EXACT [] +xref: RO:0002432 +holds_over_chain: enables occurs_in +is_a: functionally_related_to ! functionally related to +is_a: overlaps ! overlaps + +[Typedef] +id: mereotopologically_related_to +name: mereotopologically related to +def: "A mereological relationship or a topological relationship" [] +xref: RO:0002323 + +[Typedef] +id: molecularly_interacts_with +name: molecularly interacts with +def: "An interaction relationship in which the two partners are molecular entities that directly physically interact with each other for example via a stable binding interaction or a brief interaction during which one modifies the other." [] +xref: RO:0002436 +is_symmetric: true +is_a: interacts_with ! interacts with + +[Typedef] +id: negatively_regulated_by +name: negatively regulated by +namespace: external +def: "inverse of negatively regulates" [] +xref: RO:0002335 +is_a: regulated_by ! regulated by + +[Typedef] +id: negatively_regulates +name: negatively regulates +namespace: external +def: "Process(P1) negatively regulates process(P2) iff: P1 terminates P2, or P1 descreases the the frequency of initiation of P2 or the magnitude or rate of output of P2." [] +xref: RO:0002212 +is_a: causally_upstream_of,_negative_effect ! causally upstream of, negative effect +is_a: regulates ! regulates +inverse_of: negatively_regulated_by ! negatively regulated by + +[Typedef] +id: never_in_taxon +name: never_in_taxon +def: "S never_in_taxon T iff: S SubClassOf in_taxon only not T." [PMID:20973947] +xref: RO:0002161 +expand_assertion_to: "Class: EquivalentTo: ?X and (RO_0002162 some ?Y)" [] +is_metadata_tag: true +is_class_level: true + +[Typedef] +id: occurs_in +name: occurs in +namespace: external +def: "b occurs_in c =def b is a process and c is a material entity or immaterial entity& there exists a spatiotemporal region r and b occupies_spatiotemporal_region r.& forall(t) if b exists_at t then c exists_at t & there exist spatial regions s and s’ where & b spatially_projects_onto s at t& c is occupies_spatial_region s’ at t& s is a proper_continuant_part_of s’ at t" [] +xref: BFO:0000066 +domain: BFO:0000003 ! occurrent +range: BFO:0000004 ! independent continuant +holds_over_chain: part_of occurs_in +inverse_of: contains_process ! contains process +transitive_over: part_of ! part of + +[Typedef] +id: only_in_taxon +name: only in taxon +name: only_in_taxon +def: "S only_in_taxon T iff: S SubClassOf in_taxon only T" [] +def: "U only_in_taxon T: U is a feature found in only in organisms of species of taxon T. The feature cannot be found in an organism of any species outside of (not subsumed by) that taxon. Down-propagates in U hierarchy, up-propagates in T hierarchy (species taxonomy). Implies applicable_to_taxon." [] +def: "x only in taxon y if and only if x is in taxon y, and there is no other organism z such that y!=z a and x is in taxon z." [] +synonym: "never_outside_taxon" EXACT [] +synonym: "specific_to" EXACT [] +synonym: "specific_to_taxon" EXACT [] +xref: RO:0002160 +is_a: evolutionarily_related_to ! evolutionarily related to +is_a: in_taxon ! in taxon + +[Typedef] +id: overlaps +name: overlaps +namespace: external +def: "A overlaps B if they share some part in common." [] +def: "x overlaps y if and only if there exists some z such that x has part z and z part of y" [] +xref: RO:0002131 +holds_over_chain: has_part overlaps +holds_over_chain: has_part part_of +holds_over_chain: part_of part_of +is_a: mereotopologically_related_to ! mereotopologically related to +transitive_over: part_of ! part of + +[Typedef] +id: part_of +name: part of +name: part_of +namespace: external +def: "a core relation that holds between a part and its whole" [] +xref: BFO:0000050 +is_transitive: true +is_a: overlaps ! overlaps +inverse_of: has_part ! has part + +[Typedef] +id: part_of_structure_that_is_capable_of +name: part of structure that is capable of +def: "this relation holds between c and p when c is part of some c', and c' is capable of p." [] +xref: RO:0002329 +holds_over_chain: part_of capable_of +is_a: functionally_related_to ! functionally related to + +[Typedef] +id: participates_in +name: participates in +name: participates_in +namespace: external +def: "a relation between a continuant and a process, in which the continuant is somehow involved in the process" [] +xref: RO:0000056 +domain: BFO:0000002 ! continuant +range: BFO:0000003 ! occurrent +inverse_of: has_participant ! has_participant + +[Typedef] +id: phosphorylates +name: phosphorylates +xref: RO:0002447 +is_a: molecularly_interacts_with ! molecularly interacts with + +[Typedef] +id: positively_regulated_by +name: positively regulated by +namespace: external +def: "inverse of positively regulates" [] +xref: RO:0002336 +is_a: regulated_by ! regulated by + +[Typedef] +id: positively_regulates +name: positively regulates +namespace: external +def: "Process(P1) postively regulates process(P2) iff: P1 initiates P2, or P1 increases the the frequency of initiation of P2 or the magnitude or rate of output of P2." [] +xref: RO:0002213 +holds_over_chain: negatively_regulates negatively_regulates +is_transitive: true +is_a: causally_upstream_of,_positive_effect ! causally upstream of, positive effect +is_a: regulates ! regulates +inverse_of: positively_regulated_by ! positively regulated by + +[Typedef] +id: preceded_by +name: preceded by +name: preceded_by +namespace: external +def: "The assertion P preceded_by P1 tells us something about Ps in general: that is, it tells us something about what happened earlier, given what we know about what happened later. Thus it does not provide information pointing in the opposite direction, concerning instances of P1 in general; that is, that each is such as to be succeeded by some instance of P." [] +def: "x is preceded by y if and only if the time point at which y ends is before or equivalent to the time point at which x starts. Formally: x preceded by y iff ω(y) <= α(x), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point." [] +def: "X preceded_by Y iff: end(Y) before_or_simultaneous_with start(X)" [] +synonym: "is preceded by" EXACT [] +synonym: "takes place after" EXACT [] +xref: BFO:0000062 +domain: BFO:0000003 ! occurrent +range: BFO:0000003 ! occurrent +holds_over_chain: part_of preceded_by +is_transitive: true +is_a: ends_after ! ends after +inverse_of: precedes ! precedes + +[Typedef] +id: precedes +name: precedes +namespace: external +def: "x precedes y if and only if the time point at which x ends is before or equivalent to the time point at which y starts. Formally: x precedes y iff ω(x) <= α(y), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point." [] +xref: BFO:0000063 +domain: BFO:0000003 ! occurrent +range: BFO:0000003 ! occurrent +holds_over_chain: part_of precedes +is_transitive: true +is_a: temporally_related_to ! temporally related to + +[Typedef] +id: process_has_causal_agent +name: process has causal agent +namespace: external +def: "Inverse of 'causal agent in process'" [] +xref: RO:0002608 +is_a: causally_related_to ! causally related to + +[Typedef] +id: regulated_by +name: regulated by +namespace: external +def: "inverse of regulates" [] +xref: RO:0002334 +domain: BFO:0000015 ! process +range: BFO:0000015 ! process +is_transitive: true +is_a: causally_downstream_of_or_within ! causally downstream of or within + +[Typedef] +id: regulates +name: regulates +namespace: external +def: "process(P1) regulates process(P2) iff: P1 results in the initiation or termination of P2 OR affects the frequency of its initiation or termination OR affects the magnitude or rate of output of P2." [] +xref: RO:0002211 +domain: BFO:0000015 ! process +range: BFO:0000015 ! process +holds_over_chain: directly_regulates directly_regulates +is_transitive: true +is_a: causally_upstream_of ! causally upstream of +inverse_of: regulated_by ! regulated by +transitive_over: has_effector_activity ! has effector activity + +[Typedef] +id: regulates_activity_of +name: regulates activity of +def: "The entity A has an activity that regulates an activity of the entity B. For example, A and B are gene products where the catalytic activity of A regulates the kinase activity of B." [] +xref: RO:0011002 +domain: BFO:0000040 ! material entity +range: BFO:0000040 ! material entity +is_a: causally_influences ! causally influences + +[Typedef] +id: role_of +name: role of +def: "a relation between a role and an independent continuant (the bearer), in which the role specifically depends on the bearer for its existence" [] +xref: RO:0000081 +is_a: inheres_in ! inheres in +inverse_of: has_role ! has role + +[Typedef] +id: temporally_related_to +name: temporally related to +xref: RO:0002222 +domain: BFO:0000003 ! occurrent +range: BFO:0000003 ! occurrent + +[Typedef] +id: term_tracker_item +xref: IAO:0000233 + +[Typedef] +id: present_in_taxon +name: present_in_taxon +def: "S present_in_taxon T if some instance of T has some S. This does not means that all instances of T have an S - it may only be certain life stages or sexes that have S." [https://orcid.org/0000-0002-6601-2165] +synonym: "applicable for taxon" EXACT [] +xref: RO:0002175 +is_metadata_tag: true +is_class_level: true diff --git a/poetry.lock b/poetry.lock index c731354ce..eddbf84eb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "adeft" version = "0.11.2" description = "Acromine based Disambiguation of Entities From Text" -category = "main" optional = true python-versions = "*" files = [ @@ -23,88 +22,87 @@ test = ["pytest", "pytest-cov"] [[package]] name = "aiohttp" -version = "3.9.3" +version = "3.9.4" description = "Async http client/server framework (asyncio)" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:939677b61f9d72a4fa2a042a5eee2a99a24001a67c13da113b2e30396567db54"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f5cd333fcf7590a18334c90f8c9147c837a6ec8a178e88d90a9b96ea03194cc"}, - {file = "aiohttp-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82e6aa28dd46374f72093eda8bcd142f7771ee1eb9d1e223ff0fa7177a96b4a5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f56455b0c2c7cc3b0c584815264461d07b177f903a04481dfc33e08a89f0c26b"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bca77a198bb6e69795ef2f09a5f4c12758487f83f33d63acde5f0d4919815768"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e083c285857b78ee21a96ba1eb1b5339733c3563f72980728ca2b08b53826ca5"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab40e6251c3873d86ea9b30a1ac6d7478c09277b32e14745d0d3c6e76e3c7e29"}, - {file = "aiohttp-3.9.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:df822ee7feaaeffb99c1a9e5e608800bd8eda6e5f18f5cfb0dc7eeb2eaa6bbec"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:acef0899fea7492145d2bbaaaec7b345c87753168589cc7faf0afec9afe9b747"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:cd73265a9e5ea618014802ab01babf1940cecb90c9762d8b9e7d2cc1e1969ec6"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:a78ed8a53a1221393d9637c01870248a6f4ea5b214a59a92a36f18151739452c"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:6b0e029353361f1746bac2e4cc19b32f972ec03f0f943b390c4ab3371840aabf"}, - {file = "aiohttp-3.9.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7cf5c9458e1e90e3c390c2639f1017a0379a99a94fdfad3a1fd966a2874bba52"}, - {file = "aiohttp-3.9.3-cp310-cp310-win32.whl", hash = "sha256:3e59c23c52765951b69ec45ddbbc9403a8761ee6f57253250c6e1536cacc758b"}, - {file = "aiohttp-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:055ce4f74b82551678291473f66dc9fb9048a50d8324278751926ff0ae7715e5"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6b88f9386ff1ad91ace19d2a1c0225896e28815ee09fc6a8932fded8cda97c3d"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c46956ed82961e31557b6857a5ca153c67e5476972e5f7190015018760938da2"}, - {file = "aiohttp-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:07b837ef0d2f252f96009e9b8435ec1fef68ef8b1461933253d318748ec1acdc"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad46e6f620574b3b4801c68255492e0159d1712271cc99d8bdf35f2043ec266"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5ed3e046ea7b14938112ccd53d91c1539af3e6679b222f9469981e3dac7ba1ce"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:039df344b45ae0b34ac885ab5b53940b174530d4dd8a14ed8b0e2155b9dddccb"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7943c414d3a8d9235f5f15c22ace69787c140c80b718dcd57caaade95f7cd93b"}, - {file = "aiohttp-3.9.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:84871a243359bb42c12728f04d181a389718710129b36b6aad0fc4655a7647d4"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5eafe2c065df5401ba06821b9a054d9cb2848867f3c59801b5d07a0be3a380ae"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:9d3c9b50f19704552f23b4eaea1fc082fdd82c63429a6506446cbd8737823da3"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:f033d80bc6283092613882dfe40419c6a6a1527e04fc69350e87a9df02bbc283"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:2c895a656dd7e061b2fd6bb77d971cc38f2afc277229ce7dd3552de8313a483e"}, - {file = "aiohttp-3.9.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1f5a71d25cd8106eab05f8704cd9167b6e5187bcdf8f090a66c6d88b634802b4"}, - {file = "aiohttp-3.9.3-cp311-cp311-win32.whl", hash = "sha256:50fca156d718f8ced687a373f9e140c1bb765ca16e3d6f4fe116e3df7c05b2c5"}, - {file = "aiohttp-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:5fe9ce6c09668063b8447f85d43b8d1c4e5d3d7e92c63173e6180b2ac5d46dd8"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:38a19bc3b686ad55804ae931012f78f7a534cce165d089a2059f658f6c91fa60"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:770d015888c2a598b377bd2f663adfd947d78c0124cfe7b959e1ef39f5b13869"}, - {file = "aiohttp-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ee43080e75fc92bf36219926c8e6de497f9b247301bbf88c5c7593d931426679"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52df73f14ed99cee84865b95a3d9e044f226320a87af208f068ecc33e0c35b96"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc9b311743a78043b26ffaeeb9715dc360335e5517832f5a8e339f8a43581e4d"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b955ed993491f1a5da7f92e98d5dad3c1e14dc175f74517c4e610b1f2456fb11"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:504b6981675ace64c28bf4a05a508af5cde526e36492c98916127f5a02354d53"}, - {file = "aiohttp-3.9.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a6fe5571784af92b6bc2fda8d1925cccdf24642d49546d3144948a6a1ed58ca5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ba39e9c8627edc56544c8628cc180d88605df3892beeb2b94c9bc857774848ca"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e5e46b578c0e9db71d04c4b506a2121c0cb371dd89af17a0586ff6769d4c58c1"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:938a9653e1e0c592053f815f7028e41a3062e902095e5a7dc84617c87267ebd5"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:c3452ea726c76e92f3b9fae4b34a151981a9ec0a4847a627c43d71a15ac32aa6"}, - {file = "aiohttp-3.9.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ff30218887e62209942f91ac1be902cc80cddb86bf00fbc6783b7a43b2bea26f"}, - {file = "aiohttp-3.9.3-cp312-cp312-win32.whl", hash = "sha256:38f307b41e0bea3294a9a2a87833191e4bcf89bb0365e83a8be3a58b31fb7f38"}, - {file = "aiohttp-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:b791a3143681a520c0a17e26ae7465f1b6f99461a28019d1a2f425236e6eedb5"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0ed621426d961df79aa3b963ac7af0d40392956ffa9be022024cd16297b30c8c"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f46acd6a194287b7e41e87957bfe2ad1ad88318d447caf5b090012f2c5bb528"}, - {file = "aiohttp-3.9.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:feeb18a801aacb098220e2c3eea59a512362eb408d4afd0c242044c33ad6d542"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f734e38fd8666f53da904c52a23ce517f1b07722118d750405af7e4123933511"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b40670ec7e2156d8e57f70aec34a7216407848dfe6c693ef131ddf6e76feb672"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdd215b7b7fd4a53994f238d0f46b7ba4ac4c0adb12452beee724ddd0743ae5d"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:017a21b0df49039c8f46ca0971b3a7fdc1f56741ab1240cb90ca408049766168"}, - {file = "aiohttp-3.9.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e99abf0bba688259a496f966211c49a514e65afa9b3073a1fcee08856e04425b"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:648056db9a9fa565d3fa851880f99f45e3f9a771dd3ff3bb0c048ea83fb28194"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8aacb477dc26797ee089721536a292a664846489c49d3ef9725f992449eda5a8"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:522a11c934ea660ff8953eda090dcd2154d367dec1ae3c540aff9f8a5c109ab4"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5bce0dc147ca85caa5d33debc4f4d65e8e8b5c97c7f9f660f215fa74fc49a321"}, - {file = "aiohttp-3.9.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:4b4af9f25b49a7be47c0972139e59ec0e8285c371049df1a63b6ca81fdd216a2"}, - {file = "aiohttp-3.9.3-cp38-cp38-win32.whl", hash = "sha256:298abd678033b8571995650ccee753d9458dfa0377be4dba91e4491da3f2be63"}, - {file = "aiohttp-3.9.3-cp38-cp38-win_amd64.whl", hash = "sha256:69361bfdca5468c0488d7017b9b1e5ce769d40b46a9f4a2eed26b78619e9396c"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0fa43c32d1643f518491d9d3a730f85f5bbaedcbd7fbcae27435bb8b7a061b29"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:835a55b7ca49468aaaac0b217092dfdff370e6c215c9224c52f30daaa735c1c1"}, - {file = "aiohttp-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:06a9b2c8837d9a94fae16c6223acc14b4dfdff216ab9b7202e07a9a09541168f"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abf151955990d23f84205286938796c55ff11bbfb4ccfada8c9c83ae6b3c89a3"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:59c26c95975f26e662ca78fdf543d4eeaef70e533a672b4113dd888bd2423caa"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f95511dd5d0e05fd9728bac4096319f80615aaef4acbecb35a990afebe953b0e"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:595f105710293e76b9dc09f52e0dd896bd064a79346234b521f6b968ffdd8e58"}, - {file = "aiohttp-3.9.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7c8b816c2b5af5c8a436df44ca08258fc1a13b449393a91484225fcb7545533"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f1088fa100bf46e7b398ffd9904f4808a0612e1d966b4aa43baa535d1b6341eb"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f59dfe57bb1ec82ac0698ebfcdb7bcd0e99c255bd637ff613760d5f33e7c81b3"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:361a1026c9dd4aba0109e4040e2aecf9884f5cfe1b1b1bd3d09419c205e2e53d"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:363afe77cfcbe3a36353d8ea133e904b108feea505aa4792dad6585a8192c55a"}, - {file = "aiohttp-3.9.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8e2c45c208c62e955e8256949eb225bd8b66a4c9b6865729a786f2aa79b72e9d"}, - {file = "aiohttp-3.9.3-cp39-cp39-win32.whl", hash = "sha256:f7217af2e14da0856e082e96ff637f14ae45c10a5714b63c77f26d8884cf1051"}, - {file = "aiohttp-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:27468897f628c627230dba07ec65dc8d0db566923c48f29e084ce382119802bc"}, - {file = "aiohttp-3.9.3.tar.gz", hash = "sha256:90842933e5d1ff760fae6caca4b2b3edba53ba8f4b71e95dacf2818a2aca06f7"}, + {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:76d32588ef7e4a3f3adff1956a0ba96faabbdee58f2407c122dd45aa6e34f372"}, + {file = "aiohttp-3.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:56181093c10dbc6ceb8a29dfeea1e815e1dfdc020169203d87fd8d37616f73f9"}, + {file = "aiohttp-3.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7a5b676d3c65e88b3aca41816bf72831898fcd73f0cbb2680e9d88e819d1e4d"}, + {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1df528a85fb404899d4207a8d9934cfd6be626e30e5d3a5544a83dbae6d8a7e"}, + {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f595db1bceabd71c82e92df212dd9525a8a2c6947d39e3c994c4f27d2fe15b11"}, + {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c0b09d76e5a4caac3d27752027fbd43dc987b95f3748fad2b924a03fe8632ad"}, + {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689eb4356649ec9535b3686200b231876fb4cab4aca54e3bece71d37f50c1d13"}, + {file = "aiohttp-3.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3666cf4182efdb44d73602379a66f5fdfd5da0db5e4520f0ac0dcca644a3497"}, + {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b65b0f8747b013570eea2f75726046fa54fa8e0c5db60f3b98dd5d161052004a"}, + {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a1885d2470955f70dfdd33a02e1749613c5a9c5ab855f6db38e0b9389453dce7"}, + {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:0593822dcdb9483d41f12041ff7c90d4d1033ec0e880bcfaf102919b715f47f1"}, + {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:47f6eb74e1ecb5e19a78f4a4228aa24df7fbab3b62d4a625d3f41194a08bd54f"}, + {file = "aiohttp-3.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c8b04a3dbd54de6ccb7604242fe3ad67f2f3ca558f2d33fe19d4b08d90701a89"}, + {file = "aiohttp-3.9.4-cp310-cp310-win32.whl", hash = "sha256:8a78dfb198a328bfb38e4308ca8167028920fb747ddcf086ce706fbdd23b2926"}, + {file = "aiohttp-3.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:e78da6b55275987cbc89141a1d8e75f5070e577c482dd48bd9123a76a96f0bbb"}, + {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c111b3c69060d2bafc446917534150fd049e7aedd6cbf21ba526a5a97b4402a5"}, + {file = "aiohttp-3.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:efbdd51872cf170093998c87ccdf3cb5993add3559341a8e5708bcb311934c94"}, + {file = "aiohttp-3.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7bfdb41dc6e85d8535b00d73947548a748e9534e8e4fddd2638109ff3fb081df"}, + {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd9d334412961125e9f68d5b73c1d0ab9ea3f74a58a475e6b119f5293eee7ba"}, + {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:35d78076736f4a668d57ade00c65d30a8ce28719d8a42471b2a06ccd1a2e3063"}, + {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:824dff4f9f4d0f59d0fa3577932ee9a20e09edec8a2f813e1d6b9f89ced8293f"}, + {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52b8b4e06fc15519019e128abedaeb56412b106ab88b3c452188ca47a25c4093"}, + {file = "aiohttp-3.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eae569fb1e7559d4f3919965617bb39f9e753967fae55ce13454bec2d1c54f09"}, + {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:69b97aa5792428f321f72aeb2f118e56893371f27e0b7d05750bcad06fc42ca1"}, + {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4d79aad0ad4b980663316f26d9a492e8fab2af77c69c0f33780a56843ad2f89e"}, + {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:d6577140cd7db19e430661e4b2653680194ea8c22c994bc65b7a19d8ec834403"}, + {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:9860d455847cd98eb67897f5957b7cd69fbcb436dd3f06099230f16a66e66f79"}, + {file = "aiohttp-3.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:69ff36d3f8f5652994e08bd22f093e11cfd0444cea310f92e01b45a4e46b624e"}, + {file = "aiohttp-3.9.4-cp311-cp311-win32.whl", hash = "sha256:e27d3b5ed2c2013bce66ad67ee57cbf614288bda8cdf426c8d8fe548316f1b5f"}, + {file = "aiohttp-3.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d6a67e26daa686a6fbdb600a9af8619c80a332556245fa8e86c747d226ab1a1e"}, + {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c5ff8ff44825736a4065d8544b43b43ee4c6dd1530f3a08e6c0578a813b0aa35"}, + {file = "aiohttp-3.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d12a244627eba4e9dc52cbf924edef905ddd6cafc6513849b4876076a6f38b0e"}, + {file = "aiohttp-3.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dcad56c8d8348e7e468899d2fb3b309b9bc59d94e6db08710555f7436156097f"}, + {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7e69a7fd4b5ce419238388e55abd220336bd32212c673ceabc57ccf3d05b55"}, + {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4870cb049f10d7680c239b55428916d84158798eb8f353e74fa2c98980dcc0b"}, + {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2feaf1b7031ede1bc0880cec4b0776fd347259a723d625357bb4b82f62687b"}, + {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:939393e8c3f0a5bcd33ef7ace67680c318dc2ae406f15e381c0054dd658397de"}, + {file = "aiohttp-3.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d2334e387b2adcc944680bebcf412743f2caf4eeebd550f67249c1c3696be04"}, + {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e0198ea897680e480845ec0ffc5a14e8b694e25b3f104f63676d55bf76a82f1a"}, + {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e40d2cd22914d67c84824045861a5bb0fb46586b15dfe4f046c7495bf08306b2"}, + {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:aba80e77c227f4234aa34a5ff2b6ff30c5d6a827a91d22ff6b999de9175d71bd"}, + {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:fb68dc73bc8ac322d2e392a59a9e396c4f35cb6fdbdd749e139d1d6c985f2527"}, + {file = "aiohttp-3.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f3460a92638dce7e47062cf088d6e7663adb135e936cb117be88d5e6c48c9d53"}, + {file = "aiohttp-3.9.4-cp312-cp312-win32.whl", hash = "sha256:32dc814ddbb254f6170bca198fe307920f6c1308a5492f049f7f63554b88ef36"}, + {file = "aiohttp-3.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:63f41a909d182d2b78fe3abef557fcc14da50c7852f70ae3be60e83ff64edba5"}, + {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:c3770365675f6be220032f6609a8fbad994d6dcf3ef7dbcf295c7ee70884c9af"}, + {file = "aiohttp-3.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:305edae1dea368ce09bcb858cf5a63a064f3bff4767dec6fa60a0cc0e805a1d3"}, + {file = "aiohttp-3.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6f121900131d116e4a93b55ab0d12ad72573f967b100e49086e496a9b24523ea"}, + {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b71e614c1ae35c3d62a293b19eface83d5e4d194e3eb2fabb10059d33e6e8cbf"}, + {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:419f009fa4cfde4d16a7fc070d64f36d70a8d35a90d71aa27670bba2be4fd039"}, + {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b39476ee69cfe64061fd77a73bf692c40021f8547cda617a3466530ef63f947"}, + {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b33f34c9c7decdb2ab99c74be6443942b730b56d9c5ee48fb7df2c86492f293c"}, + {file = "aiohttp-3.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c78700130ce2dcebb1a8103202ae795be2fa8c9351d0dd22338fe3dac74847d9"}, + {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:268ba22d917655d1259af2d5659072b7dc11b4e1dc2cb9662fdd867d75afc6a4"}, + {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:17e7c051f53a0d2ebf33013a9cbf020bb4e098c4bc5bce6f7b0c962108d97eab"}, + {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7be99f4abb008cb38e144f85f515598f4c2c8932bf11b65add0ff59c9c876d99"}, + {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:d58a54d6ff08d2547656356eea8572b224e6f9bbc0cf55fa9966bcaac4ddfb10"}, + {file = "aiohttp-3.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7673a76772bda15d0d10d1aa881b7911d0580c980dbd16e59d7ba1422b2d83cd"}, + {file = "aiohttp-3.9.4-cp38-cp38-win32.whl", hash = "sha256:e4370dda04dc8951012f30e1ce7956a0a226ac0714a7b6c389fb2f43f22a250e"}, + {file = "aiohttp-3.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:eb30c4510a691bb87081192a394fb661860e75ca3896c01c6d186febe7c88530"}, + {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:84e90494db7df3be5e056f91412f9fa9e611fbe8ce4aaef70647297f5943b276"}, + {file = "aiohttp-3.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7d4845f8501ab28ebfdbeab980a50a273b415cf69e96e4e674d43d86a464df9d"}, + {file = "aiohttp-3.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69046cd9a2a17245c4ce3c1f1a4ff8c70c7701ef222fce3d1d8435f09042bba1"}, + {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b73a06bafc8dcc508420db43b4dd5850e41e69de99009d0351c4f3007960019"}, + {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:418bb0038dfafeac923823c2e63226179976c76f981a2aaad0ad5d51f2229bca"}, + {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71a8f241456b6c2668374d5d28398f8e8cdae4cce568aaea54e0f39359cd928d"}, + {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:935c369bf8acc2dc26f6eeb5222768aa7c62917c3554f7215f2ead7386b33748"}, + {file = "aiohttp-3.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74e4e48c8752d14ecfb36d2ebb3d76d614320570e14de0a3aa7a726ff150a03c"}, + {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:916b0417aeddf2c8c61291238ce25286f391a6acb6f28005dd9ce282bd6311b6"}, + {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9b6787b6d0b3518b2ee4cbeadd24a507756ee703adbac1ab6dc7c4434b8c572a"}, + {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:221204dbda5ef350e8db6287937621cf75e85778b296c9c52260b522231940ed"}, + {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:10afd99b8251022ddf81eaed1d90f5a988e349ee7d779eb429fb07b670751e8c"}, + {file = "aiohttp-3.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2506d9f7a9b91033201be9ffe7d89c6a54150b0578803cce5cb84a943d075bc3"}, + {file = "aiohttp-3.9.4-cp39-cp39-win32.whl", hash = "sha256:e571fdd9efd65e86c6af2f332e0e95dad259bfe6beb5d15b3c3eca3a6eb5d87b"}, + {file = "aiohttp-3.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:7d29dd5319d20aa3b7749719ac9685fbd926f71ac8c77b2477272725f882072d"}, + {file = "aiohttp-3.9.4.tar.gz", hash = "sha256:6ff71ede6d9a5a58cfb7b6fffc83ab5d4a63138276c771ac91ceaaddf5459644"}, ] [package.dependencies] @@ -122,7 +120,6 @@ speedups = ["Brotli", "aiodns", "brotlicffi"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -137,7 +134,6 @@ frozenlist = ">=1.1.0" name = "airium" version = "0.2.6" description = "Easy and quick html builder with natural syntax correspondence (python->html). No templates needed. Serves pure pythonic library with no dependencies." -category = "main" optional = false python-versions = "*" files = [ @@ -153,7 +149,6 @@ parse = ["beautifulsoup4 (>=4.10.0,<5.0)", "requests (>=2.12.0,<3)"] name = "alabaster" version = "0.7.16" description = "A light, configurable Sphinx theme" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -165,7 +160,6 @@ files = [ name = "aniso8601" version = "9.0.1" description = "A library for parsing ISO 8601 strings." -category = "main" optional = true python-versions = "*" files = [ @@ -180,7 +174,6 @@ dev = ["black", "coverage", "isort", "pre-commit", "pyenchant", "pylint"] name = "annotated-types" version = "0.6.0" description = "Reusable constraint types to use with typing.Annotated" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -192,7 +185,6 @@ files = [ name = "antlr4-python3-runtime" version = "4.9.3" description = "ANTLR 4.9.3 runtime for Python 3.7" -category = "main" optional = false python-versions = "*" files = [ @@ -203,7 +195,6 @@ files = [ name = "anyio" version = "4.3.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -226,7 +217,6 @@ trio = ["trio (>=0.23)"] name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = "*" files = [ @@ -238,7 +228,6 @@ files = [ name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -250,7 +239,6 @@ files = [ name = "argon2-cffi" version = "23.1.0" description = "Argon2 for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -271,7 +259,6 @@ typing = ["mypy"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -309,7 +296,6 @@ tests = ["pytest"] name = "arrow" version = "1.3.0" description = "Better dates & times for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -323,13 +309,12 @@ types-python-dateutil = ">=2.8.10" [package.extras] doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (>=1.0.0,<2.0.0)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (>=3.0.0,<4.0.0)"] +test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" -category = "dev" optional = false python-versions = "*" files = [ @@ -348,7 +333,6 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] name = "async-lru" version = "2.0.4" description = "Simple LRU cache for asyncio" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -363,7 +347,6 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -375,7 +358,6 @@ files = [ name = "attrs" version = "23.2.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -395,7 +377,6 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p name = "babel" version = "2.14.0" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -410,7 +391,6 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "bcp47" version = "0.0.4" description = "Language tags made easy" -category = "main" optional = false python-versions = "*" files = [ @@ -422,7 +402,6 @@ files = [ name = "beautifulsoup4" version = "4.12.3" description = "Screen-scraping library" -category = "main" optional = false python-versions = ">=3.6.0" files = [ @@ -444,7 +423,6 @@ lxml = ["lxml"] name = "bleach" version = "6.1.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -463,7 +441,6 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] name = "blinker" version = "1.7.0" description = "Fast, simple object-to-object and broadcast signaling" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -473,18 +450,17 @@ files = [ [[package]] name = "boto3" -version = "1.34.58" +version = "1.34.84" description = "The AWS SDK for Python" -category = "main" optional = true -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "boto3-1.34.58-py3-none-any.whl", hash = "sha256:d213a6fea9db6d537b1e65924133d8279ada79a40bc840d4930e1b64be869d4c"}, - {file = "boto3-1.34.58.tar.gz", hash = "sha256:09e3d17c718bc938a76774f31bc557b20733c0f5f9135a3e7782b55f3459cbdd"}, + {file = "boto3-1.34.84-py3-none-any.whl", hash = "sha256:7a02f44af32095946587d748ebeb39c3fa15b9d7275307ff612a6760ead47e04"}, + {file = "boto3-1.34.84.tar.gz", hash = "sha256:91e6343474173e9b82f603076856e1d5b7b68f44247bdd556250857a3f16b37b"}, ] [package.dependencies] -botocore = ">=1.34.58,<1.35.0" +botocore = ">=1.34.84,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -493,14 +469,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.58" +version = "1.34.84" description = "Low-level, data-driven core of boto 3." -category = "main" optional = true -python-versions = ">= 3.8" +python-versions = ">=3.8" files = [ - {file = "botocore-1.34.58-py3-none-any.whl", hash = "sha256:8086a6ea27d0f658505ac81e6d7314e013561469c40db9b5a4692127eb5c97cf"}, - {file = "botocore-1.34.58.tar.gz", hash = "sha256:d75216952886dc513ea1b5e2979a6af08feed2f537e3fc102e4a0a2ead563a35"}, + {file = "botocore-1.34.84-py3-none-any.whl", hash = "sha256:da1ae0a912e69e10daee2a34dafd6c6c106450d20b8623665feceb2d96c173eb"}, + {file = "botocore-1.34.84.tar.gz", hash = "sha256:a2b309bf5594f0eb6f63f355ade79ba575ce8bf672e52e91da1a7933caa245e6"}, ] [package.dependencies] @@ -508,7 +483,7 @@ jmespath = ">=0.7.1,<2.0.0" python-dateutil = ">=2.1,<3.0.0" urllib3 = [ {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, - {version = ">=1.25.4,<2.1", markers = "python_version >= \"3.10\""}, + {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, ] [package.extras] @@ -518,7 +493,6 @@ crt = ["awscrt (==0.19.19)"] name = "cachetools" version = "5.3.3" description = "Extensible memoizing collections and decorators" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -530,7 +504,6 @@ files = [ name = "cattrs" version = "23.2.3" description = "Composable complex class support for attrs and dataclasses." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -556,7 +529,6 @@ ujson = ["ujson (>=5.7.0)"] name = "certifi" version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -568,7 +540,6 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -633,7 +604,6 @@ pycparser = "*" name = "cfgraph" version = "0.2.1" description = "rdflib collections flattening graph" -category = "dev" optional = false python-versions = "*" files = [ @@ -647,7 +617,6 @@ rdflib = ">=0.4.2" name = "chardet" version = "5.2.0" description = "Universal encoding detector for Python 3" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -659,7 +628,6 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -759,7 +727,6 @@ files = [ name = "class-resolver" version = "0.4.3" description = "Lookup and instantiate classes with style." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -786,7 +753,6 @@ torch-geometric = ["torch", "torch-geometric", "torch-sparse"] name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -801,7 +767,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-default-group" version = "1.2.4" description = "click_default_group" -category = "main" optional = true python-versions = ">=2.7" files = [ @@ -819,7 +784,6 @@ test = ["pytest"] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -829,14 +793,13 @@ files = [ [[package]] name = "comm" -version = "0.2.1" +version = "0.2.2" description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, - {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, ] [package.dependencies] @@ -847,65 +810,64 @@ test = ["pytest"] [[package]] name = "contourpy" -version = "1.2.0" +version = "1.2.1" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "contourpy-1.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0274c1cb63625972c0c007ab14dd9ba9e199c36ae1a231ce45d725cbcbfd10a8"}, - {file = "contourpy-1.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ab459a1cbbf18e8698399c595a01f6dcc5c138220ca3ea9e7e6126232d102bb4"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fdd887f17c2f4572ce548461e4f96396681212d858cae7bd52ba3310bc6f00f"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d16edfc3fc09968e09ddffada434b3bf989bf4911535e04eada58469873e28e"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c203f617abc0dde5792beb586f827021069fb6d403d7f4d5c2b543d87edceb9"}, - {file = "contourpy-1.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b69303ceb2e4d4f146bf82fda78891ef7bcd80c41bf16bfca3d0d7eb545448aa"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:884c3f9d42d7218304bc74a8a7693d172685c84bd7ab2bab1ee567b769696df9"}, - {file = "contourpy-1.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4a1b1208102be6e851f20066bf0e7a96b7d48a07c9b0cfe6d0d4545c2f6cadab"}, - {file = "contourpy-1.2.0-cp310-cp310-win32.whl", hash = "sha256:34b9071c040d6fe45d9826cbbe3727d20d83f1b6110d219b83eb0e2a01d79488"}, - {file = "contourpy-1.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:bd2f1ae63998da104f16a8b788f685e55d65760cd1929518fd94cd682bf03e41"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:dd10c26b4eadae44783c45ad6655220426f971c61d9b239e6f7b16d5cdaaa727"}, - {file = "contourpy-1.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5c6b28956b7b232ae801406e529ad7b350d3f09a4fde958dfdf3c0520cdde0dd"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebeac59e9e1eb4b84940d076d9f9a6cec0064e241818bcb6e32124cc5c3e377a"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:139d8d2e1c1dd52d78682f505e980f592ba53c9f73bd6be102233e358b401063"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1e9dc350fb4c58adc64df3e0703ab076f60aac06e67d48b3848c23647ae4310e"}, - {file = "contourpy-1.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18fc2b4ed8e4a8fe849d18dce4bd3c7ea637758c6343a1f2bae1e9bd4c9f4686"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:16a7380e943a6d52472096cb7ad5264ecee36ed60888e2a3d3814991a0107286"}, - {file = "contourpy-1.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8d8faf05be5ec8e02a4d86f616fc2a0322ff4a4ce26c0f09d9f7fb5330a35c95"}, - {file = "contourpy-1.2.0-cp311-cp311-win32.whl", hash = "sha256:67b7f17679fa62ec82b7e3e611c43a016b887bd64fb933b3ae8638583006c6d6"}, - {file = "contourpy-1.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:99ad97258985328b4f207a5e777c1b44a83bfe7cf1f87b99f9c11d4ee477c4de"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:575bcaf957a25d1194903a10bc9f316c136c19f24e0985a2b9b5608bdf5dbfe0"}, - {file = "contourpy-1.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9e6c93b5b2dbcedad20a2f18ec22cae47da0d705d454308063421a3b290d9ea4"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:464b423bc2a009088f19bdf1f232299e8b6917963e2b7e1d277da5041f33a779"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:68ce4788b7d93e47f84edd3f1f95acdcd142ae60bc0e5493bfd120683d2d4316"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d7d1f8871998cdff5d2ff6a087e5e1780139abe2838e85b0b46b7ae6cc25399"}, - {file = "contourpy-1.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e739530c662a8d6d42c37c2ed52a6f0932c2d4a3e8c1f90692ad0ce1274abe0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:247b9d16535acaa766d03037d8e8fb20866d054d3c7fbf6fd1f993f11fc60ca0"}, - {file = "contourpy-1.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:461e3ae84cd90b30f8d533f07d87c00379644205b1d33a5ea03381edc4b69431"}, - {file = "contourpy-1.2.0-cp312-cp312-win32.whl", hash = "sha256:1c2559d6cffc94890b0529ea7eeecc20d6fadc1539273aa27faf503eb4656d8f"}, - {file = "contourpy-1.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:491b1917afdd8638a05b611a56d46587d5a632cabead889a5440f7c638bc6ed9"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5fd1810973a375ca0e097dee059c407913ba35723b111df75671a1976efa04bc"}, - {file = "contourpy-1.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:999c71939aad2780f003979b25ac5b8f2df651dac7b38fb8ce6c46ba5abe6ae9"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7caf9b241464c404613512d5594a6e2ff0cc9cb5615c9475cc1d9b514218ae8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:266270c6f6608340f6c9836a0fb9b367be61dde0c9a9a18d5ece97774105ff3e"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dbd50d0a0539ae2e96e537553aff6d02c10ed165ef40c65b0e27e744a0f10af8"}, - {file = "contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ce96dd400486e80ac7d195b2d800b03e3e6a787e2a522bfb83755938465a819e"}, - {file = "contourpy-1.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:6d3364b999c62f539cd403f8123ae426da946e142312a514162adb2addd8d808"}, - {file = "contourpy-1.2.0-cp39-cp39-win32.whl", hash = "sha256:1c88dfb9e0c77612febebb6ac69d44a8d81e3dc60f993215425b62c1161353f4"}, - {file = "contourpy-1.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:78e6ad33cf2e2e80c5dfaaa0beec3d61face0fb650557100ee36db808bfa6843"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:be16975d94c320432657ad2402f6760990cb640c161ae6da1363051805fa8108"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b95a225d4948b26a28c08307a60ac00fb8671b14f2047fc5476613252a129776"}, - {file = "contourpy-1.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0d7e03c0f9a4f90dc18d4e77e9ef4ec7b7bbb437f7f675be8e530d65ae6ef956"}, - {file = "contourpy-1.2.0.tar.gz", hash = "sha256:171f311cb758de7da13fc53af221ae47a5877be5a0843a9fe150818c51ed276a"}, -] - -[package.dependencies] -numpy = ">=1.20,<2.0" + {file = "contourpy-1.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bd7c23df857d488f418439686d3b10ae2fbf9bc256cd045b37a8c16575ea1040"}, + {file = "contourpy-1.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5b9eb0ca724a241683c9685a484da9d35c872fd42756574a7cfbf58af26677fd"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c75507d0a55378240f781599c30e7776674dbaf883a46d1c90f37e563453480"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11959f0ce4a6f7b76ec578576a0b61a28bdc0696194b6347ba3f1c53827178b9"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eb3315a8a236ee19b6df481fc5f997436e8ade24a9f03dfdc6bd490fea20c6da"}, + {file = "contourpy-1.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39f3ecaf76cd98e802f094e0d4fbc6dc9c45a8d0c4d185f0f6c2234e14e5f75b"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:94b34f32646ca0414237168d68a9157cb3889f06b096612afdd296003fdd32fd"}, + {file = "contourpy-1.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:457499c79fa84593f22454bbd27670227874cd2ff5d6c84e60575c8b50a69619"}, + {file = "contourpy-1.2.1-cp310-cp310-win32.whl", hash = "sha256:ac58bdee53cbeba2ecad824fa8159493f0bf3b8ea4e93feb06c9a465d6c87da8"}, + {file = "contourpy-1.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:9cffe0f850e89d7c0012a1fb8730f75edd4320a0a731ed0c183904fe6ecfc3a9"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6022cecf8f44e36af10bd9118ca71f371078b4c168b6e0fab43d4a889985dbb5"}, + {file = "contourpy-1.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ef5adb9a3b1d0c645ff694f9bca7702ec2c70f4d734f9922ea34de02294fdf72"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6150ffa5c767bc6332df27157d95442c379b7dce3a38dff89c0f39b63275696f"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c863140fafc615c14a4bf4efd0f4425c02230eb8ef02784c9a156461e62c965"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00e5388f71c1a0610e6fe56b5c44ab7ba14165cdd6d695429c5cd94021e390b2"}, + {file = "contourpy-1.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4492d82b3bc7fbb7e3610747b159869468079fe149ec5c4d771fa1f614a14df"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49e70d111fee47284d9dd867c9bb9a7058a3c617274900780c43e38d90fe1205"}, + {file = "contourpy-1.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b59c0ffceff8d4d3996a45f2bb6f4c207f94684a96bf3d9728dbb77428dd8cb8"}, + {file = "contourpy-1.2.1-cp311-cp311-win32.whl", hash = "sha256:7b4182299f251060996af5249c286bae9361fa8c6a9cda5efc29fe8bfd6062ec"}, + {file = "contourpy-1.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2855c8b0b55958265e8b5888d6a615ba02883b225f2227461aa9127c578a4922"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:62828cada4a2b850dbef89c81f5a33741898b305db244904de418cc957ff05dc"}, + {file = "contourpy-1.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:309be79c0a354afff9ff7da4aaed7c3257e77edf6c1b448a779329431ee79d7e"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e785e0f2ef0d567099b9ff92cbfb958d71c2d5b9259981cd9bee81bd194c9a4"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cac0a8f71a041aa587410424ad46dfa6a11f6149ceb219ce7dd48f6b02b87a7"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:af3f4485884750dddd9c25cb7e3915d83c2db92488b38ccb77dd594eac84c4a0"}, + {file = "contourpy-1.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ce6889abac9a42afd07a562c2d6d4b2b7134f83f18571d859b25624a331c90b"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a1eea9aecf761c661d096d39ed9026574de8adb2ae1c5bd7b33558af884fb2ce"}, + {file = "contourpy-1.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:187fa1d4c6acc06adb0fae5544c59898ad781409e61a926ac7e84b8f276dcef4"}, + {file = "contourpy-1.2.1-cp312-cp312-win32.whl", hash = "sha256:c2528d60e398c7c4c799d56f907664673a807635b857df18f7ae64d3e6ce2d9f"}, + {file = "contourpy-1.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:1a07fc092a4088ee952ddae19a2b2a85757b923217b7eed584fdf25f53a6e7ce"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bb6834cbd983b19f06908b45bfc2dad6ac9479ae04abe923a275b5f48f1a186b"}, + {file = "contourpy-1.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1d59e739ab0e3520e62a26c60707cc3ab0365d2f8fecea74bfe4de72dc56388f"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd3db01f59fdcbce5b22afad19e390260d6d0222f35a1023d9adc5690a889364"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a12a813949e5066148712a0626895c26b2578874e4cc63160bb007e6df3436fe"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe0ccca550bb8e5abc22f530ec0466136379c01321fd94f30a22231e8a48d985"}, + {file = "contourpy-1.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1d59258c3c67c865435d8fbeb35f8c59b8bef3d6f46c1f29f6123556af28445"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f32c38afb74bd98ce26de7cc74a67b40afb7b05aae7b42924ea990d51e4dac02"}, + {file = "contourpy-1.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d31a63bc6e6d87f77d71e1abbd7387ab817a66733734883d1fc0021ed9bfa083"}, + {file = "contourpy-1.2.1-cp39-cp39-win32.whl", hash = "sha256:ddcb8581510311e13421b1f544403c16e901c4e8f09083c881fab2be80ee31ba"}, + {file = "contourpy-1.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:10a37ae557aabf2509c79715cd20b62e4c7c28b8cd62dd7d99e5ed3ce28c3fd9"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a31f94983fecbac95e58388210427d68cd30fe8a36927980fab9c20062645609"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef2b055471c0eb466033760a521efb9d8a32b99ab907fc8358481a1dd29e3bd3"}, + {file = "contourpy-1.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b33d2bc4f69caedcd0a275329eb2198f560b325605810895627be5d4b876bf7f"}, + {file = "contourpy-1.2.1.tar.gz", hash = "sha256:4d8908b3bee1c889e547867ca4cdc54e5ab6be6d3e078556814a22457f49423c"}, +] + +[package.dependencies] +numpy = ">=1.20" [package.extras] bokeh = ["bokeh", "selenium"] docs = ["furo", "sphinx (>=7.2)", "sphinx-copybutton"] -mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.6.1)", "types-Pillow"] +mypy = ["contourpy[bokeh,docs]", "docutils-stubs", "mypy (==1.8.0)", "types-Pillow"] test = ["Pillow", "contourpy[test-no-images]", "matplotlib"] test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] @@ -913,7 +875,6 @@ test-no-images = ["pytest", "pytest-cov", "pytest-xdist", "wurlitzer"] name = "coverage" version = "6.5.0" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -974,14 +935,13 @@ toml = ["tomli"] [[package]] name = "curies" -version = "0.7.7" +version = "0.7.9" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "curies-0.7.7-py3-none-any.whl", hash = "sha256:609de3e8cdf39f410e8f4d9f06eb7df379465860f4fb441bf0e79672430f8e2a"}, - {file = "curies-0.7.7.tar.gz", hash = "sha256:a8d674029f906fb9c3564eafa0862ce96725932bd801fa751e076265b111cb34"}, + {file = "curies-0.7.9-py3-none-any.whl", hash = "sha256:e4c5beb91642376953c94db0ee2fb5d2b011c3b16749516436114ba61442f260"}, + {file = "curies-0.7.9.tar.gz", hash = "sha256:3b63c5fea7b0e967629a3a384b1a8c59b56c503487c1dcbacddeab59e25db4d8"}, ] [package.dependencies] @@ -1001,7 +961,6 @@ tests = ["coverage", "pytest"] name = "cycler" version = "0.12.1" description = "Composable style cycles" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1017,7 +976,6 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "debugpy" version = "1.8.1" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1049,7 +1007,6 @@ files = [ name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1061,7 +1018,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1073,7 +1029,6 @@ files = [ name = "deprecated" version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1091,7 +1046,6 @@ dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] name = "deprecation" version = "2.1.0" description = "A library to handle automated deprecations" -category = "main" optional = false python-versions = "*" files = [ @@ -1106,7 +1060,6 @@ packaging = "*" name = "distlib" version = "0.3.8" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -1118,7 +1071,6 @@ files = [ name = "distro" version = "1.9.0" description = "Distro - an OS platform information API" -category = "main" optional = true python-versions = ">=3.6" files = [ @@ -1130,7 +1082,6 @@ files = [ name = "docutils" version = "0.18.1" description = "Docutils -- Python Documentation Utilities" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1138,22 +1089,10 @@ files = [ {file = "docutils-0.18.1.tar.gz", hash = "sha256:679987caf361a7539d76e584cbeddc311e3aee937877c87346f31debc63e9d06"}, ] -[[package]] -name = "editorconfig" -version = "0.12.4" -description = "EditorConfig File Locator and Interpreter for Python" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "EditorConfig-0.12.4.tar.gz", hash = "sha256:24857fa1793917dd9ccf0c7810a07e05404ce9b823521c7dce22a4fb5d125f80"}, -] - [[package]] name = "et-xmlfile" version = "1.1.0" description = "An implementation of lxml.xmlfile for the standard library" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1165,7 +1104,6 @@ files = [ name = "eutils" version = "0.6.0" description = "\"Python interface to NCBI's eutilities API\"" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1185,7 +1123,6 @@ dev = ["flake8", "ipython", "mock", "pytest", "pytest-cov", "restview", "setupto name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1200,7 +1137,6 @@ test = ["pytest (>=6)"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -1215,7 +1151,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "fastjsonschema" version = "2.19.1" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" files = [ @@ -1230,7 +1165,6 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc name = "fastobo" version = "0.12.3" description = "Faultless AST for Open Biomedical Ontologies in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1284,31 +1218,29 @@ files = [ [[package]] name = "filelock" -version = "3.13.1" +version = "3.13.4" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, + {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "flask" -version = "3.0.2" +version = "3.0.3" description = "A simple framework for building complex web applications." -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "flask-3.0.2-py3-none-any.whl", hash = "sha256:3232e0e9c850d781933cf0207523d1ece087eb8d87b23777ae38456e2fbe7c6e"}, - {file = "flask-3.0.2.tar.gz", hash = "sha256:822c03f4b799204250a7ee84b1eddc40665395333973dfb9deebfe425fefcb7d"}, + {file = "flask-3.0.3-py3-none-any.whl", hash = "sha256:34e815dfaa43340d1d15a5c3a02b8476004037eb4840b34910c6e21679d288f3"}, + {file = "flask-3.0.3.tar.gz", hash = "sha256:ceb27b0af3823ea2737928a4d99d125a06175b8512c445cbd9a9ce200ef76842"}, ] [package.dependencies] @@ -1327,7 +1259,6 @@ dotenv = ["python-dotenv"] name = "flask-restx" version = "1.3.0" description = "Fully featured framework for fast, easy and documented API development with Flask" -category = "main" optional = true python-versions = "*" files = [ @@ -1350,54 +1281,53 @@ test = ["Faker (==2.0.0)", "blinker", "invoke (==2.2.0)", "mock (==3.0.5)", "pyt [[package]] name = "fonttools" -version = "4.49.0" +version = "4.51.0" description = "Tools to manipulate font files" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d970ecca0aac90d399e458f0b7a8a597e08f95de021f17785fb68e2dc0b99717"}, - {file = "fonttools-4.49.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ac9a745b7609f489faa65e1dc842168c18530874a5f5b742ac3dd79e26bca8bc"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ba0e00620ca28d4ca11fc700806fd69144b463aa3275e1b36e56c7c09915559"}, - {file = "fonttools-4.49.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdee3ab220283057e7840d5fb768ad4c2ebe65bdba6f75d5d7bf47f4e0ed7d29"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ce7033cb61f2bb65d8849658d3786188afd80f53dad8366a7232654804529532"}, - {file = "fonttools-4.49.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:07bc5ea02bb7bc3aa40a1eb0481ce20e8d9b9642a9536cde0218290dd6085828"}, - {file = "fonttools-4.49.0-cp310-cp310-win32.whl", hash = "sha256:86eef6aab7fd7c6c8545f3ebd00fd1d6729ca1f63b0cb4d621bccb7d1d1c852b"}, - {file = "fonttools-4.49.0-cp310-cp310-win_amd64.whl", hash = "sha256:1fac1b7eebfce75ea663e860e7c5b4a8831b858c17acd68263bc156125201abf"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:edc0cce355984bb3c1d1e89d6a661934d39586bb32191ebff98c600f8957c63e"}, - {file = "fonttools-4.49.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:83a0d9336de2cba86d886507dd6e0153df333ac787377325a39a2797ec529814"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36c8865bdb5cfeec88f5028e7e592370a0657b676c6f1d84a2108e0564f90e22"}, - {file = "fonttools-4.49.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33037d9e56e2562c710c8954d0f20d25b8386b397250d65581e544edc9d6b942"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:8fb022d799b96df3eaa27263e9eea306bd3d437cc9aa981820850281a02b6c9a"}, - {file = "fonttools-4.49.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33c584c0ef7dc54f5dd4f84082eabd8d09d1871a3d8ca2986b0c0c98165f8e86"}, - {file = "fonttools-4.49.0-cp311-cp311-win32.whl", hash = "sha256:cbe61b158deb09cffdd8540dc4a948d6e8f4d5b4f3bf5cd7db09bd6a61fee64e"}, - {file = "fonttools-4.49.0-cp311-cp311-win_amd64.whl", hash = "sha256:fc11e5114f3f978d0cea7e9853627935b30d451742eeb4239a81a677bdee6bf6"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:d647a0e697e5daa98c87993726da8281c7233d9d4ffe410812a4896c7c57c075"}, - {file = "fonttools-4.49.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f3bbe672df03563d1f3a691ae531f2e31f84061724c319652039e5a70927167e"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bebd91041dda0d511b0d303180ed36e31f4f54b106b1259b69fade68413aa7ff"}, - {file = "fonttools-4.49.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4145f91531fd43c50f9eb893faa08399816bb0b13c425667c48475c9f3a2b9b5"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ea329dafb9670ffbdf4dbc3b0e5c264104abcd8441d56de77f06967f032943cb"}, - {file = "fonttools-4.49.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c076a9e548521ecc13d944b1d261ff3d7825048c338722a4bd126d22316087b7"}, - {file = "fonttools-4.49.0-cp312-cp312-win32.whl", hash = "sha256:b607ea1e96768d13be26d2b400d10d3ebd1456343eb5eaddd2f47d1c4bd00880"}, - {file = "fonttools-4.49.0-cp312-cp312-win_amd64.whl", hash = "sha256:a974c49a981e187381b9cc2c07c6b902d0079b88ff01aed34695ec5360767034"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:b85ec0bdd7bdaa5c1946398cbb541e90a6dfc51df76dfa88e0aaa41b335940cb"}, - {file = "fonttools-4.49.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:af20acbe198a8a790618ee42db192eb128afcdcc4e96d99993aca0b60d1faeb4"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d418b1fee41a1d14931f7ab4b92dc0bc323b490e41d7a333eec82c9f1780c75"}, - {file = "fonttools-4.49.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b44a52b8e6244b6548851b03b2b377a9702b88ddc21dcaf56a15a0393d425cb9"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7c7125068e04a70739dad11857a4d47626f2b0bd54de39e8622e89701836eabd"}, - {file = "fonttools-4.49.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:29e89d0e1a7f18bc30f197cfadcbef5a13d99806447c7e245f5667579a808036"}, - {file = "fonttools-4.49.0-cp38-cp38-win32.whl", hash = "sha256:9d95fa0d22bf4f12d2fb7b07a46070cdfc19ef5a7b1c98bc172bfab5bf0d6844"}, - {file = "fonttools-4.49.0-cp38-cp38-win_amd64.whl", hash = "sha256:768947008b4dc552d02772e5ebd49e71430a466e2373008ce905f953afea755a"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:08877e355d3dde1c11973bb58d4acad1981e6d1140711230a4bfb40b2b937ccc"}, - {file = "fonttools-4.49.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fdb54b076f25d6b0f0298dc706acee5052de20c83530fa165b60d1f2e9cbe3cb"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0af65c720520710cc01c293f9c70bd69684365c6015cc3671db2b7d807fe51f2"}, - {file = "fonttools-4.49.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f255ce8ed7556658f6d23f6afd22a6d9bbc3edb9b96c96682124dc487e1bf42"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d00af0884c0e65f60dfaf9340e26658836b935052fdd0439952ae42e44fdd2be"}, - {file = "fonttools-4.49.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:263832fae27481d48dfafcc43174644b6706639661e242902ceb30553557e16c"}, - {file = "fonttools-4.49.0-cp39-cp39-win32.whl", hash = "sha256:0404faea044577a01bb82d47a8fa4bc7a54067fa7e324785dd65d200d6dd1133"}, - {file = "fonttools-4.49.0-cp39-cp39-win_amd64.whl", hash = "sha256:b050d362df50fc6e38ae3954d8c29bf2da52be384649ee8245fdb5186b620836"}, - {file = "fonttools-4.49.0-py3-none-any.whl", hash = "sha256:af281525e5dd7fa0b39fb1667b8d5ca0e2a9079967e14c4bfe90fd1cd13e0f18"}, - {file = "fonttools-4.49.0.tar.gz", hash = "sha256:ebf46e7f01b7af7861310417d7c49591a85d99146fc23a5ba82fdb28af156321"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:84d7751f4468dd8cdd03ddada18b8b0857a5beec80bce9f435742abc9a851a74"}, + {file = "fonttools-4.51.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8b4850fa2ef2cfbc1d1f689bc159ef0f45d8d83298c1425838095bf53ef46308"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5b48a1121117047d82695d276c2af2ee3a24ffe0f502ed581acc2673ecf1037"}, + {file = "fonttools-4.51.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:180194c7fe60c989bb627d7ed5011f2bef1c4d36ecf3ec64daec8302f1ae0716"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:96a48e137c36be55e68845fc4284533bda2980f8d6f835e26bca79d7e2006438"}, + {file = "fonttools-4.51.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:806e7912c32a657fa39d2d6eb1d3012d35f841387c8fc6cf349ed70b7c340039"}, + {file = "fonttools-4.51.0-cp310-cp310-win32.whl", hash = "sha256:32b17504696f605e9e960647c5f64b35704782a502cc26a37b800b4d69ff3c77"}, + {file = "fonttools-4.51.0-cp310-cp310-win_amd64.whl", hash = "sha256:c7e91abdfae1b5c9e3a543f48ce96013f9a08c6c9668f1e6be0beabf0a569c1b"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a8feca65bab31479d795b0d16c9a9852902e3a3c0630678efb0b2b7941ea9c74"}, + {file = "fonttools-4.51.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8ac27f436e8af7779f0bb4d5425aa3535270494d3bc5459ed27de3f03151e4c2"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e19bd9e9964a09cd2433a4b100ca7f34e34731e0758e13ba9a1ed6e5468cc0f"}, + {file = "fonttools-4.51.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2b92381f37b39ba2fc98c3a45a9d6383bfc9916a87d66ccb6553f7bdd129097"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5f6bc991d1610f5c3bbe997b0233cbc234b8e82fa99fc0b2932dc1ca5e5afec0"}, + {file = "fonttools-4.51.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9696fe9f3f0c32e9a321d5268208a7cc9205a52f99b89479d1b035ed54c923f1"}, + {file = "fonttools-4.51.0-cp311-cp311-win32.whl", hash = "sha256:3bee3f3bd9fa1d5ee616ccfd13b27ca605c2b4270e45715bd2883e9504735034"}, + {file = "fonttools-4.51.0-cp311-cp311-win_amd64.whl", hash = "sha256:0f08c901d3866a8905363619e3741c33f0a83a680d92a9f0e575985c2634fcc1"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4060acc2bfa2d8e98117828a238889f13b6f69d59f4f2d5857eece5277b829ba"}, + {file = "fonttools-4.51.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:1250e818b5f8a679ad79660855528120a8f0288f8f30ec88b83db51515411fcc"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76f1777d8b3386479ffb4a282e74318e730014d86ce60f016908d9801af9ca2a"}, + {file = "fonttools-4.51.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b5ad456813d93b9c4b7ee55302208db2b45324315129d85275c01f5cb7e61a2"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:68b3fb7775a923be73e739f92f7e8a72725fd333eab24834041365d2278c3671"}, + {file = "fonttools-4.51.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8e2f1a4499e3b5ee82c19b5ee57f0294673125c65b0a1ff3764ea1f9db2f9ef5"}, + {file = "fonttools-4.51.0-cp312-cp312-win32.whl", hash = "sha256:278e50f6b003c6aed19bae2242b364e575bcb16304b53f2b64f6551b9c000e15"}, + {file = "fonttools-4.51.0-cp312-cp312-win_amd64.whl", hash = "sha256:b3c61423f22165541b9403ee39874dcae84cd57a9078b82e1dce8cb06b07fa2e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1621ee57da887c17312acc4b0e7ac30d3a4fb0fec6174b2e3754a74c26bbed1e"}, + {file = "fonttools-4.51.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e9d9298be7a05bb4801f558522adbe2feea1b0b103d5294ebf24a92dd49b78e5"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee1af4be1c5afe4c96ca23badd368d8dc75f611887fb0c0dac9f71ee5d6f110e"}, + {file = "fonttools-4.51.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c18b49adc721a7d0b8dfe7c3130c89b8704baf599fb396396d07d4aa69b824a1"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:de7c29bdbdd35811f14493ffd2534b88f0ce1b9065316433b22d63ca1cd21f14"}, + {file = "fonttools-4.51.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cadf4e12a608ef1d13e039864f484c8a968840afa0258b0b843a0556497ea9ed"}, + {file = "fonttools-4.51.0-cp38-cp38-win32.whl", hash = "sha256:aefa011207ed36cd280babfaa8510b8176f1a77261833e895a9d96e57e44802f"}, + {file = "fonttools-4.51.0-cp38-cp38-win_amd64.whl", hash = "sha256:865a58b6e60b0938874af0968cd0553bcd88e0b2cb6e588727117bd099eef836"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:60a3409c9112aec02d5fb546f557bca6efa773dcb32ac147c6baf5f742e6258b"}, + {file = "fonttools-4.51.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7e89853d8bea103c8e3514b9f9dc86b5b4120afb4583b57eb10dfa5afbe0936"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fc244f2585d6c00b9bcc59e6593e646cf095a96fe68d62cd4da53dd1287b55"}, + {file = "fonttools-4.51.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d145976194a5242fdd22df18a1b451481a88071feadf251221af110ca8f00ce"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:c5b8cab0c137ca229433570151b5c1fc6af212680b58b15abd797dcdd9dd5051"}, + {file = "fonttools-4.51.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:54dcf21a2f2d06ded676e3c3f9f74b2bafded3a8ff12f0983160b13e9f2fb4a7"}, + {file = "fonttools-4.51.0-cp39-cp39-win32.whl", hash = "sha256:0118ef998a0699a96c7b28457f15546815015a2710a1b23a7bf6c1be60c01636"}, + {file = "fonttools-4.51.0-cp39-cp39-win_amd64.whl", hash = "sha256:599bdb75e220241cedc6faebfafedd7670335d2e29620d207dd0378a4e9ccc5a"}, + {file = "fonttools-4.51.0-py3-none-any.whl", hash = "sha256:15c94eeef6b095831067f72c825eb0e2d48bb4cea0647c1b05c981ecba2bf39f"}, + {file = "fonttools-4.51.0.tar.gz", hash = "sha256:dc0673361331566d7a663d7ce0f6fdcbfbdc1f59c6e3ed1165ad7202ca183c68"}, ] [package.extras] @@ -1418,7 +1348,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "fqdn" version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "dev" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" files = [ @@ -1430,7 +1359,6 @@ files = [ name = "frozenlist" version = "1.4.1" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -1517,7 +1445,6 @@ files = [ name = "funowl" version = "0.2.3" description = "Python rendering of the OWL Functional syntax" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1533,29 +1460,10 @@ rdflib = ">=6.2.0,<8" rdflib-shim = "*" rfc3987 = "*" -[[package]] -name = "ghp-import" -version = "2.1.0" -description = "Copy your docs directly to the gh-pages branch." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, - {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, -] - -[package.dependencies] -python-dateutil = ">=2.8.1" - -[package.extras] -dev = ["flake8", "markdown", "twine", "wheel"] - [[package]] name = "gilda" version = "1.1.0" description = "Grounding for biomedical entities with contextual disambiguation" -category = "main" optional = true python-versions = "*" files = [ @@ -1582,26 +1490,24 @@ ui = ["flask-bootstrap", "flask-wtf"] [[package]] name = "graphviz" -version = "0.20.1" +version = "0.20.3" description = "Simple Python interface for Graphviz" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "graphviz-0.20.1-py3-none-any.whl", hash = "sha256:587c58a223b51611c0cf461132da386edd896a029524ca61a1462b880bf97977"}, - {file = "graphviz-0.20.1.zip", hash = "sha256:8c58f14adaa3b947daf26c19bc1e98c4e0702cdc31cf99153e6f06904d492bf8"}, + {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, + {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, ] [package.extras] dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] -docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["coverage", "mock (>=4)", "pytest (>=7)", "pytest-cov", "pytest-mock (>=3)"] +docs = ["sphinx (>=5,<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] +test = ["coverage", "pytest (>=7,<8.1)", "pytest-cov", "pytest-mock (>=3)"] [[package]] name = "greenlet" version = "3.0.3" description = "Lightweight in-process concurrent programming" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1673,7 +1579,6 @@ test = ["objgraph", "psutil"] name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1685,7 +1590,6 @@ files = [ name = "hbreader" version = "0.9.1" description = "Honey Badger reader - a generic file/url/string open and read tool" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1693,16 +1597,25 @@ files = [ {file = "hbreader-0.9.1.tar.gz", hash = "sha256:d2c132f8ba6276d794c66224c3297cec25c8079d0a4cf019c061611e0a3b94fa"}, ] +[[package]] +name = "html2text" +version = "2024.2.26" +description = "Turn HTML into equivalent Markdown-structured text." +optional = true +python-versions = ">=3.8" +files = [ + {file = "html2text-2024.2.26.tar.gz", hash = "sha256:05f8e367d15aaabc96415376776cdd11afd5127a77fce6e36afc60c563ca2c32"}, +] + [[package]] name = "httpcore" -version = "1.0.4" +version = "1.0.5" description = "A minimal low-level HTTP client." -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, - {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] [package.dependencies] @@ -1712,14 +1625,13 @@ h11 = ">=0.13,<0.15" [package.extras] asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] -trio = ["trio (>=0.22.0,<0.25.0)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" version = "0.27.0" description = "The next generation HTTP client." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1730,33 +1642,31 @@ files = [ [package.dependencies] anyio = "*" certifi = "*" -httpcore = ">=1.0.0,<2.0.0" +httpcore = "==1.*" idna = "*" sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] name = "ijson" version = "3.2.3" description = "Iterative JSON parser with standard Python iterator interfaces" -category = "main" optional = false python-versions = "*" files = [ @@ -1855,7 +1765,6 @@ files = [ name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1865,14 +1774,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "7.0.2" +version = "7.1.0" description = "Read metadata from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-7.0.2-py3-none-any.whl", hash = "sha256:f4bc4c0c070c490abf4ce96d715f68e95923320370efb66143df00199bb6c100"}, - {file = "importlib_metadata-7.0.2.tar.gz", hash = "sha256:198f568f3230878cb1b44fbd7975f87906c22336dba2e4a7f05278c281fbd792"}, + {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, + {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, ] [package.dependencies] @@ -1881,18 +1789,17 @@ zipp = ">=0.5" [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] +testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] [[package]] name = "importlib-resources" -version = "6.1.3" +version = "6.4.0" description = "Read resources from Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_resources-6.1.3-py3-none-any.whl", hash = "sha256:4c0269e3580fe2634d364b39b38b961540a7738c02cb984e98add8b4221d793d"}, - {file = "importlib_resources-6.1.3.tar.gz", hash = "sha256:56fb4525197b78544a3354ea27793952ab93f935bb4bf746b846bb1015020f2b"}, + {file = "importlib_resources-6.4.0-py3-none-any.whl", hash = "sha256:50d10f043df931902d4194ea07ec57960f66a80449ff867bfe782b4c486ba78c"}, + {file = "importlib_resources-6.4.0.tar.gz", hash = "sha256:cdb2b453b8046ca4e3798eb1d84f3cce1446a0e8e7b5ef4efb600f19fc398145"}, ] [package.dependencies] @@ -1900,13 +1807,12 @@ zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["jaraco.collections", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] +testing = ["jaraco.test (>=5.4)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-ruff (>=0.2.1)", "zipp (>=3.17)"] [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1916,14 +1822,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.3" +version = "6.29.4" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.3-py3-none-any.whl", hash = "sha256:5aa086a4175b0229d4eca211e181fb473ea78ffd9869af36ba7694c947302a21"}, - {file = "ipykernel-6.29.3.tar.gz", hash = "sha256:e14c250d1f9ea3989490225cc1a542781b095a18a19447fcf2b5eaf7d0ac5bd2"}, + {file = "ipykernel-6.29.4-py3-none-any.whl", hash = "sha256:1181e653d95c6808039c509ef8e67c4126b3b3af7781496c7cbfb5ed938a27da"}, + {file = "ipykernel-6.29.4.tar.gz", hash = "sha256:3d44070060f9475ac2092b760123fadf105d2e2493c24848b6691a7c4f42af5c"}, ] [package.dependencies] @@ -1932,7 +1837,7 @@ comm = ">=0.1.1" debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" @@ -1952,7 +1857,6 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio name = "ipython" version = "8.18.1" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -1990,7 +1894,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pa name = "ipywidgets" version = "8.1.2" description = "Jupyter interactive widgets" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2012,7 +1915,6 @@ test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] name = "isodate" version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false python-versions = "*" files = [ @@ -2027,7 +1929,6 @@ six = "*" name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2042,7 +1943,6 @@ arrow = ">=0.15.0" name = "itsdangerous" version = "2.1.2" description = "Safely pass data to untrusted environments and back." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2054,7 +1954,6 @@ files = [ name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -2074,7 +1973,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.3" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2092,7 +1990,6 @@ i18n = ["Babel (>=2.7)"] name = "jmespath" version = "1.0.1" description = "JSON Matching Expressions" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -2102,36 +1999,19 @@ files = [ [[package]] name = "joblib" -version = "1.3.2" +version = "1.4.0" description = "Lightweight pipelining with Python functions" -category = "main" optional = true -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, - {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, + {file = "joblib-1.4.0-py3-none-any.whl", hash = "sha256:42942470d4062537be4d54c83511186da1fc14ba354961a2114da91efa9a4ed7"}, + {file = "joblib-1.4.0.tar.gz", hash = "sha256:1eb0dc091919cd384490de890cb5dfd538410a6d4b3b54eef09fb8c50b409b1c"}, ] -[[package]] -name = "jsbeautifier" -version = "1.15.1" -description = "JavaScript unobfuscator and beautifier." -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "jsbeautifier-1.15.1.tar.gz", hash = "sha256:ebd733b560704c602d744eafc839db60a1ee9326e30a2a80c4adb8718adc1b24"}, -] - -[package.dependencies] -editorconfig = ">=0.12.2" -six = ">=1.13.0" - [[package]] name = "json-flattener" version = "0.1.9" description = "Python library for denormalizing nested dicts or json objects to tables and back" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -2145,24 +2025,19 @@ pyyaml = "*" [[package]] name = "json5" -version = "0.9.22" +version = "0.9.25" description = "A Python implementation of the JSON5 data format." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "json5-0.9.22-py3-none-any.whl", hash = "sha256:6621007c70897652f8b5d03885f732771c48d1925591ad989aa80c7e0e5ad32f"}, - {file = "json5-0.9.22.tar.gz", hash = "sha256:b729bde7650b2196a35903a597d2b704b8fdf8648bfb67368cfb79f1174a17bd"}, + {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, + {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, ] -[package.extras] -dev = ["hypothesis"] - [[package]] name = "jsonasobj" version = "1.3.1" description = "JSON as python objects" -category = "main" optional = false python-versions = "*" files = [ @@ -2174,7 +2049,6 @@ files = [ name = "jsonasobj2" version = "1.0.4" description = "JSON as python objects - version 2" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2189,7 +2063,6 @@ hbreader = "*" name = "jsonlines" version = "4.0.0" description = "Library with helpers for the jsonlines file format" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2204,7 +2077,6 @@ attrs = ">=19.2.0" name = "jsonpatch" version = "1.33" description = "Apply JSON-Patches (RFC 6902)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ @@ -2219,7 +2091,6 @@ jsonpointer = ">=1.9" name = "jsonpath-ng" version = "1.6.1" description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." -category = "dev" optional = false python-versions = "*" files = [ @@ -2234,7 +2105,6 @@ ply = "*" name = "jsonpointer" version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" files = [ @@ -2246,7 +2116,6 @@ files = [ name = "jsonschema" version = "4.21.1" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2277,7 +2146,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2292,7 +2160,6 @@ referencing = ">=0.31.0" name = "jupyter" version = "1.0.0" description = "Jupyter metapackage. Install all the Jupyter components in one go." -category = "dev" optional = false python-versions = "*" files = [ @@ -2311,19 +2178,18 @@ qtconsole = "*" [[package]] name = "jupyter-client" -version = "8.6.0" +version = "8.6.1" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, - {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, + {file = "jupyter_client-8.6.1-py3-none-any.whl", hash = "sha256:3b7bd22f058434e3b9a7ea4b1500ed47de2713872288c0d511d19926f99b459f"}, + {file = "jupyter_client-8.6.1.tar.gz", hash = "sha256:e842515e2bab8e19186d89fdfea7abd15e39dd581f94e399f00e2af5a1652d3f"}, ] [package.dependencies] importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" @@ -2337,7 +2203,6 @@ test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pyt name = "jupyter-console" version = "6.6.3" description = "Jupyter terminal console" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2349,7 +2214,7 @@ files = [ ipykernel = ">=6.14" ipython = "*" jupyter-client = ">=7.0.0" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" prompt-toolkit = ">=3.0.30" pygments = "*" pyzmq = ">=17" @@ -2360,14 +2225,13 @@ test = ["flaky", "pexpect", "pytest"] [[package]] name = "jupyter-core" -version = "5.7.1" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, + {file = "jupyter_core-5.7.2-py3-none-any.whl", hash = "sha256:4f7315d2f6b4bcf2e3e7cb6e46772eba760ae459cd1f59d29eb57b0a01bd7409"}, + {file = "jupyter_core-5.7.2.tar.gz", hash = "sha256:aa5f8d32bbf6b431ac830496da7392035d6f61b4f54872f15c4bd2a9c3f536d9"}, ] [package.dependencies] @@ -2377,18 +2241,17 @@ traitlets = ">=5.3" [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] [[package]] name = "jupyter-events" -version = "0.9.0" +version = "0.10.0" description = "Jupyter Event System library" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, - {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, + {file = "jupyter_events-0.10.0-py3-none-any.whl", hash = "sha256:4b72130875e59d57716d327ea70d3ebc3af1944d3717e5a498b8a06c6c159960"}, + {file = "jupyter_events-0.10.0.tar.gz", hash = "sha256:670b8229d3cc882ec782144ed22e0d29e1c2d639263f92ca8383e66682845e22"}, ] [package.dependencies] @@ -2407,14 +2270,13 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p [[package]] name = "jupyter-lsp" -version = "2.2.4" +version = "2.2.5" description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter-lsp-2.2.4.tar.gz", hash = "sha256:5e50033149344065348e688608f3c6d654ef06d9856b67655bd7b6bac9ee2d59"}, - {file = "jupyter_lsp-2.2.4-py3-none-any.whl", hash = "sha256:da61cb63a16b6dff5eac55c2699cc36eac975645adee02c41bdfc03bf4802e77"}, + {file = "jupyter-lsp-2.2.5.tar.gz", hash = "sha256:793147a05ad446f809fd53ef1cd19a9f5256fd0a2d6b7ce943a982cb4f545001"}, + {file = "jupyter_lsp-2.2.5-py3-none-any.whl", hash = "sha256:45fbddbd505f3fbfb0b6cb2f1bc5e15e83ab7c79cd6e89416b248cb3c00c11da"}, ] [package.dependencies] @@ -2423,51 +2285,49 @@ jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "2.13.0" +version = "2.14.0" description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server-2.13.0-py3-none-any.whl", hash = "sha256:77b2b49c3831fbbfbdb5048cef4350d12946191f833a24e5f83e5f8f4803e97b"}, - {file = "jupyter_server-2.13.0.tar.gz", hash = "sha256:c80bfb049ea20053c3d9641c2add4848b38073bf79f1729cea1faed32fc1c78e"}, + {file = "jupyter_server-2.14.0-py3-none-any.whl", hash = "sha256:fb6be52c713e80e004fac34b35a0990d6d36ba06fd0a2b2ed82b899143a64210"}, + {file = "jupyter_server-2.14.0.tar.gz", hash = "sha256:659154cea512083434fd7c93b7fe0897af7a2fd0b9dd4749282b42eaac4ae677"}, ] [package.dependencies] anyio = ">=3.1.0" -argon2-cffi = "*" -jinja2 = "*" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" jupyter-events = ">=0.9.0" -jupyter-server-terminals = "*" +jupyter-server-terminals = ">=0.4.4" nbconvert = ">=6.4.4" nbformat = ">=5.3.0" -overrides = "*" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} +overrides = ">=5.0" +packaging = ">=22.0" +prometheus-client = ">=0.9" +pywinpty = {version = ">=2.0.1", markers = "os_name == \"nt\""} pyzmq = ">=24" send2trash = ">=1.8.2" terminado = ">=0.8.3" tornado = ">=6.2.0" traitlets = ">=5.6.0" -websocket-client = "*" +websocket-client = ">=1.7" [package.extras] docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] +test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] [[package]] name = "jupyter-server-terminals" -version = "0.5.2" +version = "0.5.3" description = "A Jupyter Server Extension Providing Terminals." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyter_server_terminals-0.5.2-py3-none-any.whl", hash = "sha256:1b80c12765da979513c42c90215481bbc39bd8ae7c0350b4f85bc3eb58d0fa80"}, - {file = "jupyter_server_terminals-0.5.2.tar.gz", hash = "sha256:396b5ccc0881e550bf0ee7012c6ef1b53edbde69e67cab1d56e89711b46052e8"}, + {file = "jupyter_server_terminals-0.5.3-py3-none-any.whl", hash = "sha256:41ee0d7dc0ebf2809c668e0fc726dfaf258fcd3e769568996ca731b6194ae9aa"}, + {file = "jupyter_server_terminals-0.5.3.tar.gz", hash = "sha256:5ae0295167220e9ace0edcfdb212afd2b01ee8d179fe6f23c899590e9b8a5269"}, ] [package.dependencies] @@ -2480,21 +2340,20 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.1.4" +version = "4.1.6" description = "JupyterLab computational environment" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.1.4-py3-none-any.whl", hash = "sha256:f92c3f2b12b88efcf767205f49be9b2f86b85544f9c4f342bb5e9904a16cf931"}, - {file = "jupyterlab-4.1.4.tar.gz", hash = "sha256:e03c82c124ad8a0892e498b9dde79c50868b2c267819aca3f55ce47c57ebeb1d"}, + {file = "jupyterlab-4.1.6-py3-none-any.whl", hash = "sha256:cf3e862bc10dbf4331e4eb37438634f813c238cfc62c71c640b3b3b2caa089a8"}, + {file = "jupyterlab-4.1.6.tar.gz", hash = "sha256:7935f36ba26eb615183a4f5c2bbca5791b5108ce2a00b5505f8cfd100d53648e"}, ] [package.dependencies] async-lru = ">=1.0.0" httpx = ">=0.25.0" importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} -ipykernel = "*" +ipykernel = ">=6.5.0" jinja2 = ">=3.0.3" jupyter-core = "*" jupyter-lsp = ">=2.0.0" @@ -2502,7 +2361,7 @@ jupyter-server = ">=2.4.0,<3" jupyterlab-server = ">=2.19.0,<3" notebook-shim = ">=0.2" packaging = "*" -tomli = {version = "*", markers = "python_version < \"3.11\""} +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} tornado = ">=6.2.0" traitlets = "*" @@ -2511,12 +2370,12 @@ dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] +upgrade-extension = ["copier (>=8.0,<9.0)", "jinja2-time (<0.3)", "pydantic (<2.0)", "pyyaml-include (<2.0)", "tomli-w (<2.0)"] [[package]] name = "jupyterlab-pygments" version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -2526,14 +2385,13 @@ files = [ [[package]] name = "jupyterlab-server" -version = "2.25.3" +version = "2.26.0" description = "A set of server components for JupyterLab and JupyterLab like applications." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab_server-2.25.3-py3-none-any.whl", hash = "sha256:c48862519fded9b418c71645d85a49b2f0ec50d032ba8316738e9276046088c1"}, - {file = "jupyterlab_server-2.25.3.tar.gz", hash = "sha256:846f125a8a19656611df5b03e5912c8393cea6900859baa64fa515eb64a8dc40"}, + {file = "jupyterlab_server-2.26.0-py3-none-any.whl", hash = "sha256:54622cbd330526a385ee0c1fdccdff3a1e7219bf3e864a335284a1270a1973df"}, + {file = "jupyterlab_server-2.26.0.tar.gz", hash = "sha256:9b3ba91cf2837f7f124fca36d63f3ca80ace2bed4898a63dd47e6598c1ab006f"}, ] [package.dependencies] @@ -2549,13 +2407,12 @@ requests = ">=2.31" [package.extras] docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] +test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0,<8)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] [[package]] name = "jupyterlab-widgets" version = "3.0.10" description = "Jupyter interactive widgets for JupyterLab" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2567,7 +2424,6 @@ files = [ name = "kgcl-rdflib" version = "0.5.0" description = "Schema for the KGCL project." -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -2583,7 +2439,6 @@ linkml-runtime = ">=1.1.24" name = "kgcl-schema" version = "0.6.8" description = "Schema for the KGCL project." -category = "main" optional = false python-versions = "<4.0,>=3.9" files = [ @@ -2601,7 +2456,6 @@ prefixmaps = ">=0.2.0,<0.3.0" name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2715,7 +2569,6 @@ files = [ name = "lark" version = "1.1.9" description = "a modern parsing library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2731,14 +2584,13 @@ regex = ["regex"] [[package]] name = "linkml" -version = "1.7.5" +version = "1.7.8" description = "Linked Open Data Modeling Language" -category = "dev" optional = false -python-versions = ">=3.8.1,<4.0.0" +python-versions = "<4.0.0,>=3.8.1" files = [ - {file = "linkml-1.7.5-py3-none-any.whl", hash = "sha256:4c0e26c1ab8256a297039ea2e7c378a12a3daae145464234b601548317dcc56a"}, - {file = "linkml-1.7.5.tar.gz", hash = "sha256:bfaed8f7daaf44b10a0e1450b88a9c146975290280c79938b7f7151481ed5a99"}, + {file = "linkml-1.7.8-py3-none-any.whl", hash = "sha256:4b8ebe33b422517b08ca01802dc2899ac133c502a71d811c58fa6f4263130709"}, + {file = "linkml-1.7.8.tar.gz", hash = "sha256:af48ee1ad6751c8d20de2832dbeefe225da9be5f39a7f8ea7821a691cf7c0148"}, ] [package.dependencies] @@ -2751,11 +2603,11 @@ jinja2 = ">=3.1.0" jsonasobj2 = ">=1.0.3,<2.0.0" jsonschema = {version = ">=4.0.0", extras = ["format"]} linkml-dataops = "*" -linkml-runtime = ">=1.7.0" +linkml-runtime = ">=1.7.4" openpyxl = "*" parse = "*" prefixcommons = ">=0.1.7" -prefixmaps = ">=0.1.3" +prefixmaps = ">=0.2.2" pydantic = ">=1.0.0,<3.0.0" pyjsg = ">=0.11.6" pyshex = ">=0.7.20" @@ -2767,11 +2619,15 @@ requests = ">=2.22" sqlalchemy = ">=1.4.31" watchdog = ">=0.9.0" +[package.extras] +black = ["black (>=24.0.0)"] +shacl = ["pyshacl (>=0.25.0,<0.26.0)"] +tests = ["black (>=24.0.0)", "pyshacl (>=0.25.0,<0.26.0)"] + [[package]] name = "linkml-dataops" version = "0.1.0" description = "LinkML Data Operations API" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2790,7 +2646,6 @@ linkml-runtime = ">=1.1.6" name = "linkml-renderer" version = "0.3.0" description = "linkml-renderer" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -2806,14 +2661,13 @@ pydantic = "*" [[package]] name = "linkml-runtime" -version = "1.7.2" +version = "1.7.5" description = "Runtime environment for LinkML, the Linked open data modeling language" -category = "main" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "linkml_runtime-1.7.2-py3-none-any.whl", hash = "sha256:45087530e6c89ec426be0e07a2b936f1b8f72f95caa9e8be347aeb934bf96e57"}, - {file = "linkml_runtime-1.7.2.tar.gz", hash = "sha256:216f5b6511ae1b11a5ba1a69f19fb729c06bc5bdbf7232ffd3149b2e03e1604c"}, + {file = "linkml_runtime-1.7.5-py3-none-any.whl", hash = "sha256:c58000c7c68fa97b7d76c50421a85a64e25f07eec5bcac464bc00c4cd79007a6"}, + {file = "linkml_runtime-1.7.5.tar.gz", hash = "sha256:b31197a5398359441ae1ed43470c54377a1d08db961366dda670300dddcd71d7"}, ] [package.dependencies] @@ -2835,7 +2689,6 @@ requests = "*" name = "llm" version = "0.13.1" description = "A CLI utility and Python library for interacting with Large Language Models, including OpenAI, PaLM and local models installed on your own machine." -category = "main" optional = true python-versions = ">=3.8" files = [ @@ -2862,122 +2715,178 @@ test = ["black (>=24.1.0)", "cogapp", "mypy", "numpy", "pytest", "pytest-httpx", [[package]] name = "lxml" -version = "5.1.0" +version = "5.2.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = false python-versions = ">=3.6" files = [ - {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:704f5572ff473a5f897745abebc6df40f22d4133c1e0a1f124e4f2bd3330ff7e"}, - {file = "lxml-5.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9d3c0f8567ffe7502d969c2c1b809892dc793b5d0665f602aad19895f8d508da"}, - {file = "lxml-5.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5fcfbebdb0c5d8d18b84118842f31965d59ee3e66996ac842e21f957eb76138c"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2f37c6d7106a9d6f0708d4e164b707037b7380fcd0b04c5bd9cae1fb46a856fb"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2befa20a13f1a75c751f47e00929fb3433d67eb9923c2c0b364de449121f447c"}, - {file = "lxml-5.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:22b7ee4c35f374e2c20337a95502057964d7e35b996b1c667b5c65c567d2252a"}, - {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:bf8443781533b8d37b295016a4b53c1494fa9a03573c09ca5104550c138d5c05"}, - {file = "lxml-5.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:82bddf0e72cb2af3cbba7cec1d2fd11fda0de6be8f4492223d4a268713ef2147"}, - {file = "lxml-5.1.0-cp310-cp310-win32.whl", hash = "sha256:b66aa6357b265670bb574f050ffceefb98549c721cf28351b748be1ef9577d93"}, - {file = "lxml-5.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:4946e7f59b7b6a9e27bef34422f645e9a368cb2be11bf1ef3cafc39a1f6ba68d"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:14deca1460b4b0f6b01f1ddc9557704e8b365f55c63070463f6c18619ebf964f"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ed8c3d2cd329bf779b7ed38db176738f3f8be637bb395ce9629fc76f78afe3d4"}, - {file = "lxml-5.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:436a943c2900bb98123b06437cdd30580a61340fbdb7b28aaf345a459c19046a"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:acb6b2f96f60f70e7f34efe0c3ea34ca63f19ca63ce90019c6cbca6b676e81fa"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af8920ce4a55ff41167ddbc20077f5698c2e710ad3353d32a07d3264f3a2021e"}, - {file = "lxml-5.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cfced4a069003d8913408e10ca8ed092c49a7f6cefee9bb74b6b3e860683b45"}, - {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9e5ac3437746189a9b4121db2a7b86056ac8786b12e88838696899328fc44bb2"}, - {file = "lxml-5.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f4c9bda132ad108b387c33fabfea47866af87f4ea6ffb79418004f0521e63204"}, - {file = "lxml-5.1.0-cp311-cp311-win32.whl", hash = "sha256:bc64d1b1dab08f679fb89c368f4c05693f58a9faf744c4d390d7ed1d8223869b"}, - {file = "lxml-5.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:a5ab722ae5a873d8dcee1f5f45ddd93c34210aed44ff2dc643b5025981908cda"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9aa543980ab1fbf1720969af1d99095a548ea42e00361e727c58a40832439114"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6f11b77ec0979f7e4dc5ae081325a2946f1fe424148d3945f943ceaede98adb8"}, - {file = "lxml-5.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a36c506e5f8aeb40680491d39ed94670487ce6614b9d27cabe45d94cd5d63e1e"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f643ffd2669ffd4b5a3e9b41c909b72b2a1d5e4915da90a77e119b8d48ce867a"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16dd953fb719f0ffc5bc067428fc9e88f599e15723a85618c45847c96f11f431"}, - {file = "lxml-5.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:16018f7099245157564d7148165132c70adb272fb5a17c048ba70d9cc542a1a1"}, - {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82cd34f1081ae4ea2ede3d52f71b7be313756e99b4b5f829f89b12da552d3aa3"}, - {file = "lxml-5.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:19a1bc898ae9f06bccb7c3e1dfd73897ecbbd2c96afe9095a6026016e5ca97b8"}, - {file = "lxml-5.1.0-cp312-cp312-win32.whl", hash = "sha256:13521a321a25c641b9ea127ef478b580b5ec82aa2e9fc076c86169d161798b01"}, - {file = "lxml-5.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:1ad17c20e3666c035db502c78b86e58ff6b5991906e55bdbef94977700c72623"}, - {file = "lxml-5.1.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:24ef5a4631c0b6cceaf2dbca21687e29725b7c4e171f33a8f8ce23c12558ded1"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d2900b7f5318bc7ad8631d3d40190b95ef2aa8cc59473b73b294e4a55e9f30f"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:601f4a75797d7a770daed8b42b97cd1bb1ba18bd51a9382077a6a247a12aa38d"}, - {file = "lxml-5.1.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4b68c961b5cc402cbd99cca5eb2547e46ce77260eb705f4d117fd9c3f932b95"}, - {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:afd825e30f8d1f521713a5669b63657bcfe5980a916c95855060048b88e1adb7"}, - {file = "lxml-5.1.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:262bc5f512a66b527d026518507e78c2f9c2bd9eb5c8aeeb9f0eb43fcb69dc67"}, - {file = "lxml-5.1.0-cp36-cp36m-win32.whl", hash = "sha256:e856c1c7255c739434489ec9c8aa9cdf5179785d10ff20add308b5d673bed5cd"}, - {file = "lxml-5.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:c7257171bb8d4432fe9d6fdde4d55fdbe663a63636a17f7f9aaba9bcb3153ad7"}, - {file = "lxml-5.1.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b9e240ae0ba96477682aa87899d94ddec1cc7926f9df29b1dd57b39e797d5ab5"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a96f02ba1bcd330807fc060ed91d1f7a20853da6dd449e5da4b09bfcc08fdcf5"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e3898ae2b58eeafedfe99e542a17859017d72d7f6a63de0f04f99c2cb125936"}, - {file = "lxml-5.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61c5a7edbd7c695e54fca029ceb351fc45cd8860119a0f83e48be44e1c464862"}, - {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3aeca824b38ca78d9ee2ab82bd9883083d0492d9d17df065ba3b94e88e4d7ee6"}, - {file = "lxml-5.1.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8f52fe6859b9db71ee609b0c0a70fea5f1e71c3462ecf144ca800d3f434f0764"}, - {file = "lxml-5.1.0-cp37-cp37m-win32.whl", hash = "sha256:d42e3a3fc18acc88b838efded0e6ec3edf3e328a58c68fbd36a7263a874906c8"}, - {file = "lxml-5.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:eac68f96539b32fce2c9b47eb7c25bb2582bdaf1bbb360d25f564ee9e04c542b"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ae15347a88cf8af0949a9872b57a320d2605ae069bcdf047677318bc0bba45b1"}, - {file = "lxml-5.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c26aab6ea9c54d3bed716b8851c8bfc40cb249b8e9880e250d1eddde9f709bf5"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:342e95bddec3a698ac24378d61996b3ee5ba9acfeb253986002ac53c9a5f6f84"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725e171e0b99a66ec8605ac77fa12239dbe061482ac854d25720e2294652eeaa"}, - {file = "lxml-5.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d184e0d5c918cff04cdde9dbdf9600e960161d773666958c9d7b565ccc60c45"}, - {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:98f3f020a2b736566c707c8e034945c02aa94e124c24f77ca097c446f81b01f1"}, - {file = "lxml-5.1.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6d48fc57e7c1e3df57be5ae8614bab6d4e7b60f65c5457915c26892c41afc59e"}, - {file = "lxml-5.1.0-cp38-cp38-win32.whl", hash = "sha256:7ec465e6549ed97e9f1e5ed51c657c9ede767bc1c11552f7f4d022c4df4a977a"}, - {file = "lxml-5.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:b21b4031b53d25b0858d4e124f2f9131ffc1530431c6d1321805c90da78388d1"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:52427a7eadc98f9e62cb1368a5079ae826f94f05755d2d567d93ee1bc3ceb354"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6a2a2c724d97c1eb8cf966b16ca2915566a4904b9aad2ed9a09c748ffe14f969"}, - {file = "lxml-5.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:843b9c835580d52828d8f69ea4302537337a21e6b4f1ec711a52241ba4a824f3"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9b99f564659cfa704a2dd82d0684207b1aadf7d02d33e54845f9fc78e06b7581"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f8b0c78e7aac24979ef09b7f50da871c2de2def043d468c4b41f512d831e912"}, - {file = "lxml-5.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bcf86dfc8ff3e992fed847c077bd875d9e0ba2fa25d859c3a0f0f76f07f0c8d"}, - {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:49a9b4af45e8b925e1cd6f3b15bbba2c81e7dba6dce170c677c9cda547411e14"}, - {file = "lxml-5.1.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:280f3edf15c2a967d923bcfb1f8f15337ad36f93525828b40a0f9d6c2ad24890"}, - {file = "lxml-5.1.0-cp39-cp39-win32.whl", hash = "sha256:ed7326563024b6e91fef6b6c7a1a2ff0a71b97793ac33dbbcf38f6005e51ff6e"}, - {file = "lxml-5.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8d7b4beebb178e9183138f552238f7e6613162a42164233e2bda00cb3afac58f"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9bd0ae7cc2b85320abd5e0abad5ccee5564ed5f0cc90245d2f9a8ef330a8deae"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8c1d679df4361408b628f42b26a5d62bd3e9ba7f0c0e7969f925021554755aa"}, - {file = "lxml-5.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2ad3a8ce9e8a767131061a22cd28fdffa3cd2dc193f399ff7b81777f3520e372"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:304128394c9c22b6569eba2a6d98392b56fbdfbad58f83ea702530be80d0f9df"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d74fcaf87132ffc0447b3c685a9f862ffb5b43e70ea6beec2fb8057d5d2a1fea"}, - {file = "lxml-5.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:8cf5877f7ed384dabfdcc37922c3191bf27e55b498fecece9fd5c2c7aaa34c33"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:877efb968c3d7eb2dad540b6cabf2f1d3c0fbf4b2d309a3c141f79c7e0061324"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f14a4fb1c1c402a22e6a341a24c1341b4a3def81b41cd354386dcb795f83897"}, - {file = "lxml-5.1.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:25663d6e99659544ee8fe1b89b1a8c0aaa5e34b103fab124b17fa958c4a324a6"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:8b9f19df998761babaa7f09e6bc169294eefafd6149aaa272081cbddc7ba4ca3"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e53d7e6a98b64fe54775d23a7c669763451340c3d44ad5e3a3b48a1efbdc96f"}, - {file = "lxml-5.1.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c3cd1fc1dc7c376c54440aeaaa0dcc803d2126732ff5c6b68ccd619f2e64be4f"}, - {file = "lxml-5.1.0.tar.gz", hash = "sha256:3eea6ed6e6c918e468e693c41ef07f3c3acc310b70ddd9cc72d9ef84bc9564ca"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1f7785f4f789fdb522729ae465adcaa099e2a3441519df750ebdccc481d961a1"}, + {file = "lxml-5.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6cc6ee342fb7fa2471bd9b6d6fdfc78925a697bf5c2bcd0a302e98b0d35bfad3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:794f04eec78f1d0e35d9e0c36cbbb22e42d370dda1609fb03bcd7aeb458c6377"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817d420c60a5183953c783b0547d9eb43b7b344a2c46f69513d5952a78cddf3"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2213afee476546a7f37c7a9b4ad4d74b1e112a6fafffc9185d6d21f043128c81"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b070bbe8d3f0f6147689bed981d19bbb33070225373338df755a46893528104a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e02c5175f63effbd7c5e590399c118d5db6183bbfe8e0d118bdb5c2d1b48d937"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:3dc773b2861b37b41a6136e0b72a1a44689a9c4c101e0cddb6b854016acc0aa8"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:d7520db34088c96cc0e0a3ad51a4fd5b401f279ee112aa2b7f8f976d8582606d"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:bcbf4af004f98793a95355980764b3d80d47117678118a44a80b721c9913436a"}, + {file = "lxml-5.2.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:a2b44bec7adf3e9305ce6cbfa47a4395667e744097faed97abb4728748ba7d47"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:1c5bb205e9212d0ebddf946bc07e73fa245c864a5f90f341d11ce7b0b854475d"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2c9d147f754b1b0e723e6afb7ba1566ecb162fe4ea657f53d2139bbf894d050a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:3545039fa4779be2df51d6395e91a810f57122290864918b172d5dc7ca5bb433"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a91481dbcddf1736c98a80b122afa0f7296eeb80b72344d7f45dc9f781551f56"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2ddfe41ddc81f29a4c44c8ce239eda5ade4e7fc305fb7311759dd6229a080052"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a7baf9ffc238e4bf401299f50e971a45bfcc10a785522541a6e3179c83eabf0a"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:31e9a882013c2f6bd2f2c974241bf4ba68c85eba943648ce88936d23209a2e01"}, + {file = "lxml-5.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0a15438253b34e6362b2dc41475e7f80de76320f335e70c5528b7148cac253a1"}, + {file = "lxml-5.2.1-cp310-cp310-win32.whl", hash = "sha256:6992030d43b916407c9aa52e9673612ff39a575523c5f4cf72cdef75365709a5"}, + {file = "lxml-5.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:da052e7962ea2d5e5ef5bc0355d55007407087392cf465b7ad84ce5f3e25fe0f"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:70ac664a48aa64e5e635ae5566f5227f2ab7f66a3990d67566d9907edcbbf867"}, + {file = "lxml-5.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1ae67b4e737cddc96c99461d2f75d218bdf7a0c3d3ad5604d1f5e7464a2f9ffe"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f18a5a84e16886898e51ab4b1d43acb3083c39b14c8caeb3589aabff0ee0b270"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6f2c8372b98208ce609c9e1d707f6918cc118fea4e2c754c9f0812c04ca116d"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:394ed3924d7a01b5bd9a0d9d946136e1c2f7b3dc337196d99e61740ed4bc6fe1"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d077bc40a1fe984e1a9931e801e42959a1e6598edc8a3223b061d30fbd26bbc"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:764b521b75701f60683500d8621841bec41a65eb739b8466000c6fdbc256c240"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:3a6b45da02336895da82b9d472cd274b22dc27a5cea1d4b793874eead23dd14f"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:5ea7b6766ac2dfe4bcac8b8595107665a18ef01f8c8343f00710b85096d1b53a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:e196a4ff48310ba62e53a8e0f97ca2bca83cdd2fe2934d8b5cb0df0a841b193a"}, + {file = "lxml-5.2.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:200e63525948e325d6a13a76ba2911f927ad399ef64f57898cf7c74e69b71095"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:dae0ed02f6b075426accbf6b2863c3d0a7eacc1b41fb40f2251d931e50188dad"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:ab31a88a651039a07a3ae327d68ebdd8bc589b16938c09ef3f32a4b809dc96ef"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:df2e6f546c4df14bc81f9498bbc007fbb87669f1bb707c6138878c46b06f6510"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5dd1537e7cc06efd81371f5d1a992bd5ab156b2b4f88834ca852de4a8ea523fa"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b9ec9c9978b708d488bec36b9e4c94d88fd12ccac3e62134a9d17ddba910ea9"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:8e77c69d5892cb5ba71703c4057091e31ccf534bd7f129307a4d084d90d014b8"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a8d5c70e04aac1eda5c829a26d1f75c6e5286c74743133d9f742cda8e53b9c2f"}, + {file = "lxml-5.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:c94e75445b00319c1fad60f3c98b09cd63fe1134a8a953dcd48989ef42318534"}, + {file = "lxml-5.2.1-cp311-cp311-win32.whl", hash = "sha256:4951e4f7a5680a2db62f7f4ab2f84617674d36d2d76a729b9a8be4b59b3659be"}, + {file = "lxml-5.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:5c670c0406bdc845b474b680b9a5456c561c65cf366f8db5a60154088c92d102"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:abc25c3cab9ec7fcd299b9bcb3b8d4a1231877e425c650fa1c7576c5107ab851"}, + {file = "lxml-5.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6935bbf153f9a965f1e07c2649c0849d29832487c52bb4a5c5066031d8b44fd5"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d793bebb202a6000390a5390078e945bbb49855c29c7e4d56a85901326c3b5d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afd5562927cdef7c4f5550374acbc117fd4ecc05b5007bdfa57cc5355864e0a4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0e7259016bc4345a31af861fdce942b77c99049d6c2107ca07dc2bba2435c1d9"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:530e7c04f72002d2f334d5257c8a51bf409db0316feee7c87e4385043be136af"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59689a75ba8d7ffca577aefd017d08d659d86ad4585ccc73e43edbfc7476781a"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:f9737bf36262046213a28e789cc82d82c6ef19c85a0cf05e75c670a33342ac2c"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:3a74c4f27167cb95c1d4af1c0b59e88b7f3e0182138db2501c353555f7ec57f4"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:68a2610dbe138fa8c5826b3f6d98a7cfc29707b850ddcc3e21910a6fe51f6ca0"}, + {file = "lxml-5.2.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f0a1bc63a465b6d72569a9bba9f2ef0334c4e03958e043da1920299100bc7c08"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c2d35a1d047efd68027817b32ab1586c1169e60ca02c65d428ae815b593e65d4"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:79bd05260359170f78b181b59ce871673ed01ba048deef4bf49a36ab3e72e80b"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:865bad62df277c04beed9478fe665b9ef63eb28fe026d5dedcb89b537d2e2ea6"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:44f6c7caff88d988db017b9b0e4ab04934f11e3e72d478031efc7edcac6c622f"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:71e97313406ccf55d32cc98a533ee05c61e15d11b99215b237346171c179c0b0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:057cdc6b86ab732cf361f8b4d8af87cf195a1f6dc5b0ff3de2dced242c2015e0"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:f3bbbc998d42f8e561f347e798b85513ba4da324c2b3f9b7969e9c45b10f6169"}, + {file = "lxml-5.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:491755202eb21a5e350dae00c6d9a17247769c64dcf62d8c788b5c135e179dc4"}, + {file = "lxml-5.2.1-cp312-cp312-win32.whl", hash = "sha256:8de8f9d6caa7f25b204fc861718815d41cbcf27ee8f028c89c882a0cf4ae4134"}, + {file = "lxml-5.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:f2a9efc53d5b714b8df2b4b3e992accf8ce5bbdfe544d74d5c6766c9e1146a3a"}, + {file = "lxml-5.2.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:70a9768e1b9d79edca17890175ba915654ee1725975d69ab64813dd785a2bd5c"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c38d7b9a690b090de999835f0443d8aa93ce5f2064035dfc48f27f02b4afc3d0"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5670fb70a828663cc37552a2a85bf2ac38475572b0e9b91283dc09efb52c41d1"}, + {file = "lxml-5.2.1-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:958244ad566c3ffc385f47dddde4145088a0ab893504b54b52c041987a8c1863"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2a66bf12fbd4666dd023b6f51223aed3d9f3b40fef06ce404cb75bafd3d89536"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:9123716666e25b7b71c4e1789ec829ed18663152008b58544d95b008ed9e21e9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:0c3f67e2aeda739d1cc0b1102c9a9129f7dc83901226cc24dd72ba275ced4218"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5d5792e9b3fb8d16a19f46aa8208987cfeafe082363ee2745ea8b643d9cc5b45"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_aarch64.whl", hash = "sha256:88e22fc0a6684337d25c994381ed8a1580a6f5ebebd5ad41f89f663ff4ec2885"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_ppc64le.whl", hash = "sha256:21c2e6b09565ba5b45ae161b438e033a86ad1736b8c838c766146eff8ceffff9"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_s390x.whl", hash = "sha256:afbbdb120d1e78d2ba8064a68058001b871154cc57787031b645c9142b937a62"}, + {file = "lxml-5.2.1-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:627402ad8dea044dde2eccde4370560a2b750ef894c9578e1d4f8ffd54000461"}, + {file = "lxml-5.2.1-cp36-cp36m-win32.whl", hash = "sha256:e89580a581bf478d8dcb97d9cd011d567768e8bc4095f8557b21c4d4c5fea7d0"}, + {file = "lxml-5.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:59565f10607c244bc4c05c0c5fa0c190c990996e0c719d05deec7030c2aa8289"}, + {file = "lxml-5.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:857500f88b17a6479202ff5fe5f580fc3404922cd02ab3716197adf1ef628029"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:56c22432809085b3f3ae04e6e7bdd36883d7258fcd90e53ba7b2e463efc7a6af"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a55ee573116ba208932e2d1a037cc4b10d2c1cb264ced2184d00b18ce585b2c0"}, + {file = "lxml-5.2.1-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:6cf58416653c5901e12624e4013708b6e11142956e7f35e7a83f1ab02f3fe456"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:64c2baa7774bc22dd4474248ba16fe1a7f611c13ac6123408694d4cc93d66dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:74b28c6334cca4dd704e8004cba1955af0b778cf449142e581e404bd211fb619"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:7221d49259aa1e5a8f00d3d28b1e0b76031655ca74bb287123ef56c3db92f213"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:3dbe858ee582cbb2c6294dc85f55b5f19c918c2597855e950f34b660f1a5ede6"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:04ab5415bf6c86e0518d57240a96c4d1fcfc3cb370bb2ac2a732b67f579e5a04"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:6ab833e4735a7e5533711a6ea2df26459b96f9eec36d23f74cafe03631647c41"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:f443cdef978430887ed55112b491f670bba6462cea7a7742ff8f14b7abb98d75"}, + {file = "lxml-5.2.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:9e2addd2d1866fe112bc6f80117bcc6bc25191c5ed1bfbcf9f1386a884252ae8"}, + {file = "lxml-5.2.1-cp37-cp37m-win32.whl", hash = "sha256:f51969bac61441fd31f028d7b3b45962f3ecebf691a510495e5d2cd8c8092dbd"}, + {file = "lxml-5.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:b0b58fbfa1bf7367dde8a557994e3b1637294be6cf2169810375caf8571a085c"}, + {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3e183c6e3298a2ed5af9d7a356ea823bccaab4ec2349dc9ed83999fd289d14d5"}, + {file = "lxml-5.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:804f74efe22b6a227306dd890eecc4f8c59ff25ca35f1f14e7482bbce96ef10b"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:08802f0c56ed150cc6885ae0788a321b73505d2263ee56dad84d200cab11c07a"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f8c09ed18ecb4ebf23e02b8e7a22a05d6411911e6fabef3a36e4f371f4f2585"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d30321949861404323c50aebeb1943461a67cd51d4200ab02babc58bd06a86"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b560e3aa4b1d49e0e6c847d72665384db35b2f5d45f8e6a5c0072e0283430533"}, + {file = "lxml-5.2.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:058a1308914f20784c9f4674036527e7c04f7be6fb60f5d61353545aa7fcb739"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:adfb84ca6b87e06bc6b146dc7da7623395db1e31621c4785ad0658c5028b37d7"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:417d14450f06d51f363e41cace6488519038f940676ce9664b34ebf5653433a5"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a2dfe7e2473f9b59496247aad6e23b405ddf2e12ef0765677b0081c02d6c2c0b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bf2e2458345d9bffb0d9ec16557d8858c9c88d2d11fed53998512504cd9df49b"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:58278b29cb89f3e43ff3e0c756abbd1518f3ee6adad9e35b51fb101c1c1daaec"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:64641a6068a16201366476731301441ce93457eb8452056f570133a6ceb15fca"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:78bfa756eab503673991bdcf464917ef7845a964903d3302c5f68417ecdc948c"}, + {file = "lxml-5.2.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:11a04306fcba10cd9637e669fd73aa274c1c09ca64af79c041aa820ea992b637"}, + {file = "lxml-5.2.1-cp38-cp38-win32.whl", hash = "sha256:66bc5eb8a323ed9894f8fa0ee6cb3e3fb2403d99aee635078fd19a8bc7a5a5da"}, + {file = "lxml-5.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:9676bfc686fa6a3fa10cd4ae6b76cae8be26eb5ec6811d2a325636c460da1806"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cf22b41fdae514ee2f1691b6c3cdeae666d8b7fa9434de445f12bbeee0cf48dd"}, + {file = "lxml-5.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec42088248c596dbd61d4ae8a5b004f97a4d91a9fd286f632e42e60b706718d7"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd53553ddad4a9c2f1f022756ae64abe16da1feb497edf4d9f87f99ec7cf86bd"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feaa45c0eae424d3e90d78823f3828e7dc42a42f21ed420db98da2c4ecf0a2cb"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddc678fb4c7e30cf830a2b5a8d869538bc55b28d6c68544d09c7d0d8f17694dc"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:853e074d4931dbcba7480d4dcab23d5c56bd9607f92825ab80ee2bd916edea53"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4691d60512798304acb9207987e7b2b7c44627ea88b9d77489bbe3e6cc3bd4"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:beb72935a941965c52990f3a32d7f07ce869fe21c6af8b34bf6a277b33a345d3"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:6588c459c5627fefa30139be4d2e28a2c2a1d0d1c265aad2ba1935a7863a4913"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:588008b8497667f1ddca7c99f2f85ce8511f8f7871b4a06ceede68ab62dff64b"}, + {file = "lxml-5.2.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6787b643356111dfd4032b5bffe26d2f8331556ecb79e15dacb9275da02866e"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7c17b64b0a6ef4e5affae6a3724010a7a66bda48a62cfe0674dabd46642e8b54"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:27aa20d45c2e0b8cd05da6d4759649170e8dfc4f4e5ef33a34d06f2d79075d57"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:d4f2cc7060dc3646632d7f15fe68e2fa98f58e35dd5666cd525f3b35d3fed7f8"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff46d772d5f6f73564979cd77a4fffe55c916a05f3cb70e7c9c0590059fb29ef"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:96323338e6c14e958d775700ec8a88346014a85e5de73ac7967db0367582049b"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:52421b41ac99e9d91934e4d0d0fe7da9f02bfa7536bb4431b4c05c906c8c6919"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7a7efd5b6d3e30d81ec68ab8a88252d7c7c6f13aaa875009fe3097eb4e30b84c"}, + {file = "lxml-5.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ed777c1e8c99b63037b91f9d73a6aad20fd035d77ac84afcc205225f8f41188"}, + {file = "lxml-5.2.1-cp39-cp39-win32.whl", hash = "sha256:644df54d729ef810dcd0f7732e50e5ad1bd0a135278ed8d6bcb06f33b6b6f708"}, + {file = "lxml-5.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:9ca66b8e90daca431b7ca1408cae085d025326570e57749695d6a01454790e95"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9b0ff53900566bc6325ecde9181d89afadc59c5ffa39bddf084aaedfe3b06a11"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6037392f2d57793ab98d9e26798f44b8b4da2f2464388588f48ac52c489ea1"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b9c07e7a45bb64e21df4b6aa623cb8ba214dfb47d2027d90eac197329bb5e94"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3249cc2989d9090eeac5467e50e9ec2d40704fea9ab72f36b034ea34ee65ca98"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f42038016852ae51b4088b2862126535cc4fc85802bfe30dea3500fdfaf1864e"}, + {file = "lxml-5.2.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:533658f8fbf056b70e434dff7e7aa611bcacb33e01f75de7f821810e48d1bb66"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:622020d4521e22fb371e15f580d153134bfb68d6a429d1342a25f051ec72df1c"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efa7b51824aa0ee957ccd5a741c73e6851de55f40d807f08069eb4c5a26b2baa"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c6ad0fbf105f6bcc9300c00010a2ffa44ea6f555df1a2ad95c88f5656104817"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e233db59c8f76630c512ab4a4daf5a5986da5c3d5b44b8e9fc742f2a24dbd460"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6a014510830df1475176466b6087fc0c08b47a36714823e58d8b8d7709132a96"}, + {file = "lxml-5.2.1-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:d38c8f50ecf57f0463399569aa388b232cf1a2ffb8f0a9a5412d0db57e054860"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5aea8212fb823e006b995c4dda533edcf98a893d941f173f6c9506126188860d"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ff097ae562e637409b429a7ac958a20aab237a0378c42dabaa1e3abf2f896e5f"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f5d65c39f16717a47c36c756af0fb36144069c4718824b7533f803ecdf91138"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3d0c3dd24bb4605439bf91068598d00c6370684f8de4a67c2992683f6c309d6b"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e32be23d538753a8adb6c85bd539f5fd3b15cb987404327c569dfc5fd8366e85"}, + {file = "lxml-5.2.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:cc518cea79fd1e2f6c90baafa28906d4309d24f3a63e801d855e7424c5b34144"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a0af35bd8ebf84888373630f73f24e86bf016642fb8576fba49d3d6b560b7cbc"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8aca2e3a72f37bfc7b14ba96d4056244001ddcc18382bd0daa087fd2e68a354"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ca1e8188b26a819387b29c3895c47a5e618708fe6f787f3b1a471de2c4a94d9"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c8ba129e6d3b0136a0f50345b2cb3db53f6bda5dd8c7f5d83fbccba97fb5dcb5"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:e998e304036198b4f6914e6a1e2b6f925208a20e2042563d9734881150c6c246"}, + {file = "lxml-5.2.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:d3be9b2076112e51b323bdf6d5a7f8a798de55fb8d95fcb64bd179460cdc0704"}, + {file = "lxml-5.2.1.tar.gz", hash = "sha256:3f7765e69bbce0906a7c74d5fe46d2c7a7596147318dbc08e4a2431f3060e306"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.7)"] - -[[package]] -name = "markdown" -version = "3.5.2" -description = "Python implementation of John Gruber's Markdown." -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "Markdown-3.5.2-py3-none-any.whl", hash = "sha256:d43323865d89fc0cb9b20c75fc8ad313af307cc087e84b657d9eec768eddeadd"}, - {file = "Markdown-3.5.2.tar.gz", hash = "sha256:e1ac7b3dc550ee80e602e71c1d168002f062e49f1b11e26a36264dafd4df2ef8"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] -testing = ["coverage", "pyyaml"] +source = ["Cython (>=3.0.10)"] [[package]] name = "markdown-it-py" version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3002,7 +2911,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "markupsafe" version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3070,40 +2978,39 @@ files = [ [[package]] name = "matplotlib" -version = "3.8.3" +version = "3.8.4" description = "Python plotting package" -category = "dev" optional = false python-versions = ">=3.9" files = [ - {file = "matplotlib-3.8.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cf60138ccc8004f117ab2a2bad513cc4d122e55864b4fe7adf4db20ca68a078f"}, - {file = "matplotlib-3.8.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5f557156f7116be3340cdeef7f128fa99b0d5d287d5f41a16e169819dcf22357"}, - {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f386cf162b059809ecfac3bcc491a9ea17da69fa35c8ded8ad154cd4b933d5ec"}, - {file = "matplotlib-3.8.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3c5f96f57b0369c288bf6f9b5274ba45787f7e0589a34d24bdbaf6d3344632f"}, - {file = "matplotlib-3.8.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:83e0f72e2c116ca7e571c57aa29b0fe697d4c6425c4e87c6e994159e0c008635"}, - {file = "matplotlib-3.8.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c5c8290074ba31a41db1dc332dc2b62def469ff33766cbe325d32a3ee291aea"}, - {file = "matplotlib-3.8.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5184e07c7e1d6d1481862ee361905b7059f7fe065fc837f7c3dc11eeb3f2f900"}, - {file = "matplotlib-3.8.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d7e7e0993d0758933b1a241a432b42c2db22dfa37d4108342ab4afb9557cbe3e"}, - {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04b36ad07eac9740fc76c2aa16edf94e50b297d6eb4c081e3add863de4bb19a7"}, - {file = "matplotlib-3.8.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c42dae72a62f14982f1474f7e5c9959fc4bc70c9de11cc5244c6e766200ba65"}, - {file = "matplotlib-3.8.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:bf5932eee0d428192c40b7eac1399d608f5d995f975cdb9d1e6b48539a5ad8d0"}, - {file = "matplotlib-3.8.3-cp311-cp311-win_amd64.whl", hash = "sha256:40321634e3a05ed02abf7c7b47a50be50b53ef3eaa3a573847431a545585b407"}, - {file = "matplotlib-3.8.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:09074f8057917d17ab52c242fdf4916f30e99959c1908958b1fc6032e2d0f6d4"}, - {file = "matplotlib-3.8.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5745f6d0fb5acfabbb2790318db03809a253096e98c91b9a31969df28ee604aa"}, - {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b97653d869a71721b639714b42d87cda4cfee0ee74b47c569e4874c7590c55c5"}, - {file = "matplotlib-3.8.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:242489efdb75b690c9c2e70bb5c6550727058c8a614e4c7716f363c27e10bba1"}, - {file = "matplotlib-3.8.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83c0653c64b73926730bd9ea14aa0f50f202ba187c307a881673bad4985967b7"}, - {file = "matplotlib-3.8.3-cp312-cp312-win_amd64.whl", hash = "sha256:ef6c1025a570354297d6c15f7d0f296d95f88bd3850066b7f1e7b4f2f4c13a39"}, - {file = "matplotlib-3.8.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c4af3f7317f8a1009bbb2d0bf23dfaba859eb7dd4ccbd604eba146dccaaaf0a4"}, - {file = "matplotlib-3.8.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4c6e00a65d017d26009bac6808f637b75ceade3e1ff91a138576f6b3065eeeba"}, - {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7b49ab49a3bea17802df6872f8d44f664ba8f9be0632a60c99b20b6db2165b7"}, - {file = "matplotlib-3.8.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6728dde0a3997396b053602dbd907a9bd64ec7d5cf99e728b404083698d3ca01"}, - {file = "matplotlib-3.8.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:813925d08fb86aba139f2d31864928d67511f64e5945ca909ad5bc09a96189bb"}, - {file = "matplotlib-3.8.3-cp39-cp39-win_amd64.whl", hash = "sha256:cd3a0c2be76f4e7be03d34a14d49ded6acf22ef61f88da600a18a5cd8b3c5f3c"}, - {file = "matplotlib-3.8.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:fa93695d5c08544f4a0dfd0965f378e7afc410d8672816aff1e81be1f45dbf2e"}, - {file = "matplotlib-3.8.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9764df0e8778f06414b9d281a75235c1e85071f64bb5d71564b97c1306a2afc"}, - {file = "matplotlib-3.8.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5e431a09e6fab4012b01fc155db0ce6dccacdbabe8198197f523a4ef4805eb26"}, - {file = "matplotlib-3.8.3.tar.gz", hash = "sha256:7b416239e9ae38be54b028abbf9048aff5054a9aba5416bef0bd17f9162ce161"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:abc9d838f93583650c35eca41cfcec65b2e7cb50fd486da6f0c49b5e1ed23014"}, + {file = "matplotlib-3.8.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f65c9f002d281a6e904976007b2d46a1ee2bcea3a68a8c12dda24709ddc9106"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce1edd9f5383b504dbc26eeea404ed0a00656c526638129028b758fd43fc5f10"}, + {file = "matplotlib-3.8.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecd79298550cba13a43c340581a3ec9c707bd895a6a061a78fa2524660482fc0"}, + {file = "matplotlib-3.8.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:90df07db7b599fe7035d2f74ab7e438b656528c68ba6bb59b7dc46af39ee48ef"}, + {file = "matplotlib-3.8.4-cp310-cp310-win_amd64.whl", hash = "sha256:ac24233e8f2939ac4fd2919eed1e9c0871eac8057666070e94cbf0b33dd9c338"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:72f9322712e4562e792b2961971891b9fbbb0e525011e09ea0d1f416c4645661"}, + {file = "matplotlib-3.8.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:232ce322bfd020a434caaffbd9a95333f7c2491e59cfc014041d95e38ab90d1c"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6addbd5b488aedb7f9bc19f91cd87ea476206f45d7116fcfe3d31416702a82fa"}, + {file = "matplotlib-3.8.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc4ccdc64e3039fc303defd119658148f2349239871db72cd74e2eeaa9b80b71"}, + {file = "matplotlib-3.8.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b7a2a253d3b36d90c8993b4620183b55665a429da8357a4f621e78cd48b2b30b"}, + {file = "matplotlib-3.8.4-cp311-cp311-win_amd64.whl", hash = "sha256:8080d5081a86e690d7688ffa542532e87f224c38a6ed71f8fbed34dd1d9fedae"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6485ac1f2e84676cff22e693eaa4fbed50ef5dc37173ce1f023daef4687df616"}, + {file = "matplotlib-3.8.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c89ee9314ef48c72fe92ce55c4e95f2f39d70208f9f1d9db4e64079420d8d732"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50bac6e4d77e4262c4340d7a985c30912054745ec99756ce213bfbc3cb3808eb"}, + {file = "matplotlib-3.8.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f51c4c869d4b60d769f7b4406eec39596648d9d70246428745a681c327a8ad30"}, + {file = "matplotlib-3.8.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b12ba985837e4899b762b81f5b2845bd1a28f4fdd1a126d9ace64e9c4eb2fb25"}, + {file = "matplotlib-3.8.4-cp312-cp312-win_amd64.whl", hash = "sha256:7a6769f58ce51791b4cb8b4d7642489df347697cd3e23d88266aaaee93b41d9a"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:843cbde2f0946dadd8c5c11c6d91847abd18ec76859dc319362a0964493f0ba6"}, + {file = "matplotlib-3.8.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1c13f041a7178f9780fb61cc3a2b10423d5e125480e4be51beaf62b172413b67"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb44f53af0a62dc80bba4443d9b27f2fde6acfdac281d95bc872dc148a6509cc"}, + {file = "matplotlib-3.8.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:606e3b90897554c989b1e38a258c626d46c873523de432b1462f295db13de6f9"}, + {file = "matplotlib-3.8.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9bb0189011785ea794ee827b68777db3ca3f93f3e339ea4d920315a0e5a78d54"}, + {file = "matplotlib-3.8.4-cp39-cp39-win_amd64.whl", hash = "sha256:6209e5c9aaccc056e63b547a8152661324404dd92340a6e479b3a7f24b42a5d0"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c7064120a59ce6f64103c9cefba8ffe6fba87f2c61d67c401186423c9a20fd35"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0e47eda4eb2614300fc7bb4657fced3e83d6334d03da2173b09e447418d499f"}, + {file = "matplotlib-3.8.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:493e9f6aa5819156b58fce42b296ea31969f2aab71c5b680b4ea7a3cb5c07d94"}, + {file = "matplotlib-3.8.4.tar.gz", hash = "sha256:8aac397d5e9ec158960e31c381c5ffc52ddd52bd9a47717e2a694038167dffea"}, ] [package.dependencies] @@ -3112,7 +3019,7 @@ cycler = ">=0.10" fonttools = ">=4.22.0" importlib-resources = {version = ">=3.2.0", markers = "python_version < \"3.10\""} kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" +numpy = ">=1.21" packaging = ">=20.0" pillow = ">=8" pyparsing = ">=2.3.1" @@ -3122,7 +3029,6 @@ python-dateutil = ">=2.7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -3137,7 +3043,6 @@ traitlets = "*" name = "mdit-py-plugins" version = "0.4.0" description = "Collection of plugins for markdown-it-py" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3157,7 +3062,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3165,23 +3069,10 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "mergedeep" -version = "1.3.4" -description = "A deep merge function for 🐍." -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, - {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, -] - [[package]] name = "mistune" version = "3.0.2" description = "A sane and fast Markdown parser with useful plugins and renderers" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3189,107 +3080,10 @@ files = [ {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, ] -[[package]] -name = "mkdocs" -version = "1.5.3" -description = "Project documentation with Markdown." -category = "main" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, - {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} -ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} -jinja2 = ">=2.11.1" -markdown = ">=3.2.1" -markupsafe = ">=2.0.1" -mergedeep = ">=1.3.4" -packaging = ">=20.5" -pathspec = ">=0.11.1" -platformdirs = ">=2.2.0" -pyyaml = ">=5.1" -pyyaml-env-tag = ">=0.1" -watchdog = ">=2.0" - -[package.extras] -i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] - -[[package]] -name = "mkdocs-material" -version = "9.5.13" -description = "Documentation that simply works" -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mkdocs_material-9.5.13-py3-none-any.whl", hash = "sha256:5cbe17fee4e3b4980c8420a04cc762d8dc052ef1e10532abd4fce88e5ea9ce6a"}, - {file = "mkdocs_material-9.5.13.tar.gz", hash = "sha256:d8e4caae576312a88fd2609b81cf43d233cdbe36860d67a68702b018b425bd87"}, -] - -[package.dependencies] -babel = ">=2.10,<3.0" -colorama = ">=0.4,<1.0" -jinja2 = ">=3.0,<4.0" -markdown = ">=3.2,<4.0" -mkdocs = ">=1.5.3,<1.6.0" -mkdocs-material-extensions = ">=1.3,<2.0" -paginate = ">=0.5,<1.0" -pygments = ">=2.16,<3.0" -pymdown-extensions = ">=10.2,<11.0" -regex = ">=2022.4" -requests = ">=2.26,<3.0" - -[package.extras] -git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] -imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] -recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] - -[[package]] -name = "mkdocs-material-extensions" -version = "1.3.1" -description = "Extension pack for Python Markdown and MkDocs Material." -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, - {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, -] - -[[package]] -name = "mkdocs-mermaid2-plugin" -version = "0.6.0" -description = "A MkDocs plugin for including mermaid graphs in markdown sources" -category = "main" -optional = false -python-versions = ">=3.5" -files = [ - {file = "mkdocs-mermaid2-plugin-0.6.0.tar.gz", hash = "sha256:99cca6db7c6b4a954a701dcb6b507191bc32a7b0b47eacf2885c1bacf77d1af1"}, - {file = "mkdocs_mermaid2_plugin-0.6.0-py3-none-any.whl", hash = "sha256:ffbe8a7daa7ed718cb800c44c5ce4c0ff413caebf7b8b63d9c4a998dfd78a64d"}, -] - -[package.dependencies] -beautifulsoup4 = ">=4.6.3" -jsbeautifier = "*" -mkdocs = ">=1.0.4" -mkdocs-material = "*" -pymdown-extensions = ">=8.0" -pyyaml = "*" -requests = "*" -setuptools = ">=18.5" - [[package]] name = "more-click" version = "0.1.2" description = "More click." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3307,7 +3101,6 @@ tests = ["coverage", "pytest"] name = "multidict" version = "6.0.5" description = "multidict implementation" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3407,7 +3200,6 @@ files = [ name = "myst-parser" version = "2.0.0" description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -3432,37 +3224,35 @@ testing-docutils = ["pygments", "pytest (>=7,<8)", "pytest-param-files (>=0.3.4, [[package]] name = "nbclient" -version = "0.9.0" +version = "0.10.0" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, - {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, + {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, + {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, ] [package.dependencies] jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.0 || >=5.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" nbformat = ">=5.1" traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.16.2" +version = "7.16.3" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.2-py3-none-any.whl", hash = "sha256:0c01c23981a8de0220255706822c40b751438e32467d6a686e26be08ba784382"}, - {file = "nbconvert-7.16.2.tar.gz", hash = "sha256:8310edd41e1c43947e4ecf16614c61469ebc024898eb808cce0999860fc9fb16"}, + {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, + {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, ] [package.dependencies] @@ -3489,25 +3279,24 @@ docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sp qtpdf = ["nbconvert[qtpng]"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.9.2" +version = "5.10.4" description = "The Jupyter Notebook format" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, + {file = "nbformat-5.10.4-py3-none-any.whl", hash = "sha256:3b48d6c8fbca4b299bf3982ea7db1af21580e4fec269ad087b9e81588891200b"}, + {file = "nbformat-5.10.4.tar.gz", hash = "sha256:322168b14f937a5d11362988ecac2a4952d3d8e3a2cbeb2319584631226d5b3a"}, ] [package.dependencies] -fastjsonschema = "*" +fastjsonschema = ">=2.15" jsonschema = ">=2.6" -jupyter-core = "*" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" traitlets = ">=5.1" [package.extras] @@ -3518,7 +3307,6 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] name = "ndex2" version = "3.8.0" description = "Nice CX Python includes a client and a data model." -category = "main" optional = false python-versions = "*" files = [ @@ -3540,7 +3328,6 @@ urllib3 = ">=1.16" name = "nest-asyncio" version = "1.6.0" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -3552,7 +3339,6 @@ files = [ name = "networkx" version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -3571,7 +3357,6 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "nltk" version = "3.8.1" description = "Natural Language Toolkit" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -3595,14 +3380,13 @@ twitter = ["twython"] [[package]] name = "notebook" -version = "7.1.1" +version = "7.1.2" description = "Jupyter Notebook - A web-based notebook environment for interactive computing" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "notebook-7.1.1-py3-none-any.whl", hash = "sha256:197d8e0595acabf4005851c8716e952a81b405f7aefb648067a761fbde267ce7"}, - {file = "notebook-7.1.1.tar.gz", hash = "sha256:818e7420fa21f402e726afb9f02df7f3c10f294c02e383ed19852866c316108b"}, + {file = "notebook-7.1.2-py3-none-any.whl", hash = "sha256:fc6c24b9aef18d0cd57157c9c47e95833b9b0bdc599652639acf0bdb61dc7d5f"}, + {file = "notebook-7.1.2.tar.gz", hash = "sha256:efc2c80043909e0faa17fce9e9b37c059c03af0ec99a4d4db84cb21d9d2e936a"}, ] [package.dependencies] @@ -3621,7 +3405,6 @@ test = ["importlib-resources (>=5.0)", "ipykernel", "jupyter-server[test] (>=2.4 name = "notebook-shim" version = "0.2.4" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -3639,7 +3422,6 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" name = "numpy" version = "1.26.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -3685,7 +3467,6 @@ files = [ name = "ols-client" version = "0.1.4" description = "A client to the EBI Ontology Lookup Service" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3708,7 +3489,6 @@ tests = ["coverage", "pytest"] name = "ontoportal-client" version = "0.0.4" description = "A client to BioPortal and other OntoPortal instances." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3726,14 +3506,13 @@ tests = ["coverage", "pytest", "unittest-templates"] [[package]] name = "openai" -version = "1.13.3" +version = "1.17.1" description = "The official Python library for the openai API" -category = "main" optional = true python-versions = ">=3.7.1" files = [ - {file = "openai-1.13.3-py3-none-any.whl", hash = "sha256:5769b62abd02f350a8dd1a3a242d8972c947860654466171d60fb0972ae0a41c"}, - {file = "openai-1.13.3.tar.gz", hash = "sha256:ff6c6b3bc7327e715e4b3592a923a5a1c7519ff5dd764a83d69f633d49e77a7b"}, + {file = "openai-1.17.1-py3-none-any.whl", hash = "sha256:d42e0d7a692c7b78cbae21598df5ded396abecf6c285325635ec62621e6c82f1"}, + {file = "openai-1.17.1.tar.gz", hash = "sha256:c5a909e70e2b4cd04ef4076b68497c4eb894704cf8ab23d32d6552931fda6e5b"}, ] [package.dependencies] @@ -3752,7 +3531,6 @@ datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] name = "openpyxl" version = "3.1.2" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3767,7 +3545,6 @@ et-xmlfile = "*" name = "overrides" version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -3777,71 +3554,56 @@ files = [ [[package]] name = "packaging" -version = "23.2" +version = "24.0" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - -[[package]] -name = "paginate" -version = "0.5.6" -description = "Divides large result sets into pages for easier browsing" -category = "main" -optional = false -python-versions = "*" -files = [ - {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, + {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, + {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] [[package]] name = "pandas" -version = "2.2.1" +version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "pandas-2.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8df8612be9cd1c7797c93e1c5df861b2ddda0b48b08f2c3eaa0702cf88fb5f88"}, - {file = "pandas-2.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0f573ab277252ed9aaf38240f3b54cfc90fff8e5cab70411ee1d03f5d51f3944"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f02a3a6c83df4026e55b63c1f06476c9aa3ed6af3d89b4f04ea656ccdaaaa359"}, - {file = "pandas-2.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c38ce92cb22a4bea4e3929429aa1067a454dcc9c335799af93ba9be21b6beb51"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:c2ce852e1cf2509a69e98358e8458775f89599566ac3775e70419b98615f4b06"}, - {file = "pandas-2.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:53680dc9b2519cbf609c62db3ed7c0b499077c7fefda564e330286e619ff0dd9"}, - {file = "pandas-2.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:94e714a1cca63e4f5939cdce5f29ba8d415d85166be3441165edd427dc9f6bc0"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f821213d48f4ab353d20ebc24e4faf94ba40d76680642fb7ce2ea31a3ad94f9b"}, - {file = "pandas-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c70e00c2d894cb230e5c15e4b1e1e6b2b478e09cf27cc593a11ef955b9ecc81a"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e97fbb5387c69209f134893abc788a6486dbf2f9e511070ca05eed4b930b1b02"}, - {file = "pandas-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:101d0eb9c5361aa0146f500773395a03839a5e6ecde4d4b6ced88b7e5a1a6403"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:7d2ed41c319c9fb4fd454fe25372028dfa417aacb9790f68171b2e3f06eae8cd"}, - {file = "pandas-2.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:af5d3c00557d657c8773ef9ee702c61dd13b9d7426794c9dfeb1dc4a0bf0ebc7"}, - {file = "pandas-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:06cf591dbaefb6da9de8472535b185cba556d0ce2e6ed28e21d919704fef1a9e"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:88ecb5c01bb9ca927ebc4098136038519aa5d66b44671861ffab754cae75102c"}, - {file = "pandas-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:04f6ec3baec203c13e3f8b139fb0f9f86cd8c0b94603ae3ae8ce9a422e9f5bee"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a935a90a76c44fe170d01e90a3594beef9e9a6220021acfb26053d01426f7dc2"}, - {file = "pandas-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c391f594aae2fd9f679d419e9a4d5ba4bce5bb13f6a989195656e7dc4b95c8f0"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9d1265545f579edf3f8f0cb6f89f234f5e44ba725a34d86535b1a1d38decbccc"}, - {file = "pandas-2.2.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:11940e9e3056576ac3244baef2fedade891977bcc1cb7e5cc8f8cc7d603edc89"}, - {file = "pandas-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:4acf681325ee1c7f950d058b05a820441075b0dd9a2adf5c4835b9bc056bf4fb"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9bd8a40f47080825af4317d0340c656744f2bfdb6819f818e6ba3cd24c0e1397"}, - {file = "pandas-2.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:df0c37ebd19e11d089ceba66eba59a168242fc6b7155cba4ffffa6eccdfb8f16"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:739cc70eaf17d57608639e74d63387b0d8594ce02f69e7a0b046f117974b3019"}, - {file = "pandas-2.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9d3558d263073ed95e46f4650becff0c5e1ffe0fc3a015de3c79283dfbdb3df"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4aa1d8707812a658debf03824016bf5ea0d516afdea29b7dc14cf687bc4d4ec6"}, - {file = "pandas-2.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:76f27a809cda87e07f192f001d11adc2b930e93a2b0c4a236fde5429527423be"}, - {file = "pandas-2.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:1ba21b1d5c0e43416218db63037dbe1a01fc101dc6e6024bcad08123e48004ab"}, - {file = "pandas-2.2.1.tar.gz", hash = "sha256:0ab90f87093c13f3e8fa45b48ba9f39181046e8f3317d3aadb2fffbb1b978572"}, + {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, + {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, + {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8e5a0b00e1e56a842f922e7fae8ae4077aee4af0acb5ae3622bd4b4c30aedf99"}, + {file = "pandas-2.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:ddf818e4e6c7c6f4f7c8a12709696d193976b591cc7dc50588d3d1a6b5dc8772"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:696039430f7a562b74fa45f540aca068ea85fa34c244d0deee539cb6d70aa288"}, + {file = "pandas-2.2.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8e90497254aacacbc4ea6ae5e7a8cd75629d6ad2b30025a4a8b09aa4faf55151"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:58b84b91b0b9f4bafac2a0ac55002280c094dfc6402402332c0913a59654ab2b"}, + {file = "pandas-2.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2123dc9ad6a814bcdea0f099885276b31b24f7edf40f6cdbc0912672e22eee"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:2925720037f06e89af896c70bca73459d7e6a4be96f9de79e2d440bd499fe0db"}, + {file = "pandas-2.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0cace394b6ea70c01ca1595f839cf193df35d1575986e484ad35c4aeae7266c1"}, + {file = "pandas-2.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:873d13d177501a28b2756375d59816c365e42ed8417b41665f346289adc68d24"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:9dfde2a0ddef507a631dc9dc4af6a9489d5e2e740e226ad426a05cabfbd7c8ef"}, + {file = "pandas-2.2.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e9b79011ff7a0f4b1d6da6a61aa1aa604fb312d6647de5bad20013682d1429ce"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cb51fe389360f3b5a4d57dbd2848a5f033350336ca3b340d1c53a1fad33bcad"}, + {file = "pandas-2.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eee3a87076c0756de40b05c5e9a6069c035ba43e8dd71c379e68cab2c20f16ad"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3e374f59e440d4ab45ca2fffde54b81ac3834cf5ae2cdfa69c90bc03bde04d76"}, + {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, + {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, + {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, + {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, + {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92fd6b027924a7e178ac202cfbe25e53368db90d56872d20ffae94b96c7acc57"}, + {file = "pandas-2.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:640cef9aa381b60e296db324337a554aeeb883ead99dc8f6c18e81a93942f5f4"}, + {file = "pandas-2.2.2.tar.gz", hash = "sha256:9e79019aba43cb4fda9e4d983f8e88ca0373adbb697ae9c6c43093218de28b54"}, ] [package.dependencies] numpy = [ - {version = ">=1.22.4,<2", markers = "python_version < \"3.11\""}, - {version = ">=1.23.2,<2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3876,7 +3638,6 @@ xml = ["lxml (>=4.9.2)"] name = "pandocfilters" version = "1.5.1" description = "Utilities for writing pandoc filters in python" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3888,7 +3649,6 @@ files = [ name = "pansql" version = "0.0.1" description = "sqldf for pandas" -category = "main" optional = false python-versions = "*" files = [ @@ -3905,7 +3665,6 @@ sqlalchemy = "*" name = "parse" version = "1.20.1" description = "parse() is the opposite of format()" -category = "dev" optional = false python-versions = "*" files = [ @@ -3915,37 +3674,23 @@ files = [ [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" files = [ @@ -3958,80 +3703,80 @@ ptyprocess = ">=0.5" [[package]] name = "pillow" -version = "10.2.0" +version = "10.3.0" description = "Python Imaging Library (Fork)" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "pillow-10.2.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:7823bdd049099efa16e4246bdf15e5a13dbb18a51b68fa06d6c1d4d8b99a796e"}, - {file = "pillow-10.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:83b2021f2ade7d1ed556bc50a399127d7fb245e725aa0113ebd05cfe88aaf588"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fad5ff2f13d69b7e74ce5b4ecd12cc0ec530fcee76356cac6742785ff71c452"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da2b52b37dad6d9ec64e653637a096905b258d2fc2b984c41ae7d08b938a67e4"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:47c0995fc4e7f79b5cfcab1fc437ff2890b770440f7696a3ba065ee0fd496563"}, - {file = "pillow-10.2.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:322bdf3c9b556e9ffb18f93462e5f749d3444ce081290352c6070d014c93feb2"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:51f1a1bffc50e2e9492e87d8e09a17c5eea8409cda8d3f277eb6edc82813c17c"}, - {file = "pillow-10.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:69ffdd6120a4737710a9eee73e1d2e37db89b620f702754b8f6e62594471dee0"}, - {file = "pillow-10.2.0-cp310-cp310-win32.whl", hash = "sha256:c6dafac9e0f2b3c78df97e79af707cdc5ef8e88208d686a4847bab8266870023"}, - {file = "pillow-10.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:aebb6044806f2e16ecc07b2a2637ee1ef67a11840a66752751714a0d924adf72"}, - {file = "pillow-10.2.0-cp310-cp310-win_arm64.whl", hash = "sha256:7049e301399273a0136ff39b84c3678e314f2158f50f517bc50285fb5ec847ad"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:35bb52c37f256f662abdfa49d2dfa6ce5d93281d323a9af377a120e89a9eafb5"}, - {file = "pillow-10.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9c23f307202661071d94b5e384e1e1dc7dfb972a28a2310e4ee16103e66ddb67"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:773efe0603db30c281521a7c0214cad7836c03b8ccff897beae9b47c0b657d61"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:11fa2e5984b949b0dd6d7a94d967743d87c577ff0b83392f17cb3990d0d2fd6e"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:716d30ed977be8b37d3ef185fecb9e5a1d62d110dfbdcd1e2a122ab46fddb03f"}, - {file = "pillow-10.2.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a086c2af425c5f62a65e12fbf385f7c9fcb8f107d0849dba5839461a129cf311"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c8de2789052ed501dd829e9cae8d3dcce7acb4777ea4a479c14521c942d395b1"}, - {file = "pillow-10.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:609448742444d9290fd687940ac0b57fb35e6fd92bdb65386e08e99af60bf757"}, - {file = "pillow-10.2.0-cp311-cp311-win32.whl", hash = "sha256:823ef7a27cf86df6597fa0671066c1b596f69eba53efa3d1e1cb8b30f3533068"}, - {file = "pillow-10.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:1da3b2703afd040cf65ec97efea81cfba59cdbed9c11d8efc5ab09df9509fc56"}, - {file = "pillow-10.2.0-cp311-cp311-win_arm64.whl", hash = "sha256:edca80cbfb2b68d7b56930b84a0e45ae1694aeba0541f798e908a49d66b837f1"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:1b5e1b74d1bd1b78bc3477528919414874748dd363e6272efd5abf7654e68bef"}, - {file = "pillow-10.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0eae2073305f451d8ecacb5474997c08569fb4eb4ac231ffa4ad7d342fdc25ac"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b7c2286c23cd350b80d2fc9d424fc797575fb16f854b831d16fd47ceec078f2c"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e23412b5c41e58cec602f1135c57dfcf15482013ce6e5f093a86db69646a5aa"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:52a50aa3fb3acb9cf7213573ef55d31d6eca37f5709c69e6858fe3bc04a5c2a2"}, - {file = "pillow-10.2.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:127cee571038f252a552760076407f9cff79761c3d436a12af6000cd182a9d04"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:8d12251f02d69d8310b046e82572ed486685c38f02176bd08baf216746eb947f"}, - {file = "pillow-10.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:54f1852cd531aa981bc0965b7d609f5f6cc8ce8c41b1139f6ed6b3c54ab82bfb"}, - {file = "pillow-10.2.0-cp312-cp312-win32.whl", hash = "sha256:257d8788df5ca62c980314053197f4d46eefedf4e6175bc9412f14412ec4ea2f"}, - {file = "pillow-10.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:154e939c5f0053a383de4fd3d3da48d9427a7e985f58af8e94d0b3c9fcfcf4f9"}, - {file = "pillow-10.2.0-cp312-cp312-win_arm64.whl", hash = "sha256:f379abd2f1e3dddb2b61bc67977a6b5a0a3f7485538bcc6f39ec76163891ee48"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:8373c6c251f7ef8bda6675dd6d2b3a0fcc31edf1201266b5cf608b62a37407f9"}, - {file = "pillow-10.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:870ea1ada0899fd0b79643990809323b389d4d1d46c192f97342eeb6ee0b8483"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4b6b1e20608493548b1f32bce8cca185bf0480983890403d3b8753e44077129"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3031709084b6e7852d00479fd1d310b07d0ba82765f973b543c8af5061cf990e"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:3ff074fc97dd4e80543a3e91f69d58889baf2002b6be64347ea8cf5533188213"}, - {file = "pillow-10.2.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:cb4c38abeef13c61d6916f264d4845fab99d7b711be96c326b84df9e3e0ff62d"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b1b3020d90c2d8e1dae29cf3ce54f8094f7938460fb5ce8bc5c01450b01fbaf6"}, - {file = "pillow-10.2.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:170aeb00224ab3dc54230c797f8404507240dd868cf52066f66a41b33169bdbe"}, - {file = "pillow-10.2.0-cp38-cp38-win32.whl", hash = "sha256:c4225f5220f46b2fde568c74fca27ae9771536c2e29d7c04f4fb62c83275ac4e"}, - {file = "pillow-10.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:0689b5a8c5288bc0504d9fcee48f61a6a586b9b98514d7d29b840143d6734f39"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:b792a349405fbc0163190fde0dc7b3fef3c9268292586cf5645598b48e63dc67"}, - {file = "pillow-10.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c570f24be1e468e3f0ce7ef56a89a60f0e05b30a3669a459e419c6eac2c35364"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8ecd059fdaf60c1963c58ceb8997b32e9dc1b911f5da5307aab614f1ce5c2fb"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c365fd1703040de1ec284b176d6af5abe21b427cb3a5ff68e0759e1e313a5e7e"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:70c61d4c475835a19b3a5aa42492409878bbca7438554a1f89d20d58a7c75c01"}, - {file = "pillow-10.2.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:b6f491cdf80ae540738859d9766783e3b3c8e5bd37f5dfa0b76abdecc5081f13"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d189550615b4948f45252d7f005e53c2040cea1af5b60d6f79491a6e147eef7"}, - {file = "pillow-10.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:49d9ba1ed0ef3e061088cd1e7538a0759aab559e2e0a80a36f9fd9d8c0c21591"}, - {file = "pillow-10.2.0-cp39-cp39-win32.whl", hash = "sha256:babf5acfede515f176833ed6028754cbcd0d206f7f614ea3447d67c33be12516"}, - {file = "pillow-10.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:0304004f8067386b477d20a518b50f3fa658a28d44e4116970abfcd94fac34a8"}, - {file = "pillow-10.2.0-cp39-cp39-win_arm64.whl", hash = "sha256:0fb3e7fc88a14eacd303e90481ad983fd5b69c761e9e6ef94c983f91025da869"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:322209c642aabdd6207517e9739c704dc9f9db943015535783239022002f054a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3eedd52442c0a5ff4f887fab0c1c0bb164d8635b32c894bc1faf4c618dd89df2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb28c753fd5eb3dd859b4ee95de66cc62af91bcff5db5f2571d32a520baf1f04"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:33870dc4653c5017bf4c8873e5488d8f8d5f8935e2f1fb9a2208c47cdd66efd2"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3c31822339516fb3c82d03f30e22b1d038da87ef27b6a78c9549888f8ceda39a"}, - {file = "pillow-10.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a2b56ba36e05f973d450582fb015594aaa78834fefe8dfb8fcd79b93e64ba4c6"}, - {file = "pillow-10.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:d8e6aeb9201e655354b3ad049cb77d19813ad4ece0df1249d3c793de3774f8c7"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2247178effb34a77c11c0e8ac355c7a741ceca0a732b27bf11e747bbc950722f"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15587643b9e5eb26c48e49a7b33659790d28f190fc514a322d55da2fb5c2950e"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753cd8f2086b2b80180d9b3010dd4ed147efc167c90d3bf593fe2af21265e5a5"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:7c8f97e8e7a9009bcacbe3766a36175056c12f9a44e6e6f2d5caad06dcfbf03b"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d1b35bcd6c5543b9cb547dee3150c93008f8dd0f1fef78fc0cd2b141c5baf58a"}, - {file = "pillow-10.2.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fe4c15f6c9285dc54ce6553a3ce908ed37c8f3825b5a51a15c91442bb955b868"}, - {file = "pillow-10.2.0.tar.gz", hash = "sha256:e87f0b2c78157e12d7686b27d63c070fd65d994e8ddae6f328e0dcf4a0cd007e"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, + {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, + {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, + {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, + {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, + {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, + {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, + {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, + {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, + {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, + {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, + {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, + {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, + {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, + {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, + {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, + {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, + {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, + {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, + {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, + {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, + {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, + {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, + {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, + {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, + {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, + {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, + {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, + {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, + {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, + {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, + {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, + {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, ] [package.extras] @@ -4046,7 +3791,6 @@ xmp = ["defusedxml"] name = "pip" version = "24.0" description = "The PyPA recommended tool for installing Python packages." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4058,7 +3802,6 @@ files = [ name = "platformdirs" version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4074,7 +3817,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest- name = "pluggy" version = "1.4.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4090,7 +3832,6 @@ testing = ["pytest", "pytest-benchmark"] name = "ply" version = "3.11" description = "Python Lex & Yacc" -category = "dev" optional = false python-versions = "*" files = [ @@ -4102,7 +3843,6 @@ files = [ name = "prefixcommons" version = "0.1.12" description = "A python API for working with ID prefixes" -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -4118,14 +3858,13 @@ requests = ">=2.28.1,<3.0.0" [[package]] name = "prefixmaps" -version = "0.2.2" +version = "0.2.3" description = "A python library for retrieving semantic prefix maps" -category = "main" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "prefixmaps-0.2.2-py3-none-any.whl", hash = "sha256:4ac2bf3ddb9b27c40c978cf937e9bedb160050d24e8c679b94c9c885e1d73c72"}, - {file = "prefixmaps-0.2.2.tar.gz", hash = "sha256:a36b1554154ef465271bde82dc91cd671e2d31dc1f50c2fd08ccb0d7d5791c33"}, + {file = "prefixmaps-0.2.3-py3-none-any.whl", hash = "sha256:342f13b74c056f5b99bcd55e79710a7cb53a2908a2a424c68d830d8d68bb9491"}, + {file = "prefixmaps-0.2.3.tar.gz", hash = "sha256:b63df4428672e89dc39a7f02816e47b1e8d74653dd3308a69465d6694fad7618"}, ] [package.dependencies] @@ -4136,7 +3875,6 @@ pyyaml = ">=5.3.1" name = "prometheus-client" version = "0.20.0" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4151,7 +3889,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false python-versions = ">=3.7.0" files = [ @@ -4166,7 +3903,6 @@ wcwidth = "*" name = "pronto" version = "2.5.6" description = "Python frontend to ontologies." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4184,7 +3920,6 @@ python-dateutil = ">=2.8,<3.0" name = "psutil" version = "5.9.8" description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -4213,7 +3948,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -4225,7 +3959,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" files = [ @@ -4238,31 +3971,29 @@ tests = ["pytest"] [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydantic" -version = "2.6.3" +version = "2.7.0" description = "Data validation using Python type hints" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.3-py3-none-any.whl", hash = "sha256:72c6034df47f46ccdf81869fddb81aade68056003900a8724a4f160700016a2a"}, - {file = "pydantic-2.6.3.tar.gz", hash = "sha256:e07805c4c7f5c6826e33a1d4c9d47950d7eaf34868e2690f8594d2e30241f11f"}, + {file = "pydantic-2.7.0-py3-none-any.whl", hash = "sha256:9dee74a271705f14f9a1567671d144a851c675b072736f0a7b2608fd9e495352"}, + {file = "pydantic-2.7.0.tar.gz", hash = "sha256:b5ecdd42262ca2462e2624793551e80911a1e989f462910bb81aef974b4bb383"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" +pydantic-core = "2.18.1" typing-extensions = ">=4.6.1" [package.extras] @@ -4270,91 +4001,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.3" -description = "" -category = "main" +version = "2.18.1" +description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, - {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, - {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, - {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, - {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, - {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, - {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, - {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, - {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, - {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, - {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, - {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, - {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, - {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ee9cf33e7fe14243f5ca6977658eb7d1042caaa66847daacbd2117adb258b226"}, + {file = "pydantic_core-2.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6b7bbb97d82659ac8b37450c60ff2e9f97e4eb0f8a8a3645a5568b9334b08b50"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df4249b579e75094f7e9bb4bd28231acf55e308bf686b952f43100a5a0be394c"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d0491006a6ad20507aec2be72e7831a42efc93193d2402018007ff827dc62926"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ae80f72bb7a3e397ab37b53a2b49c62cc5496412e71bc4f1277620a7ce3f52b"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58aca931bef83217fca7a390e0486ae327c4af9c3e941adb75f8772f8eeb03a1"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1be91ad664fc9245404a789d60cba1e91c26b1454ba136d2a1bf0c2ac0c0505a"}, + {file = "pydantic_core-2.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:667880321e916a8920ef49f5d50e7983792cf59f3b6079f3c9dac2b88a311d17"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f7054fdc556f5421f01e39cbb767d5ec5c1139ea98c3e5b350e02e62201740c7"}, + {file = "pydantic_core-2.18.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:030e4f9516f9947f38179249778709a460a3adb516bf39b5eb9066fcfe43d0e6"}, + {file = "pydantic_core-2.18.1-cp310-none-win32.whl", hash = "sha256:2e91711e36e229978d92642bfc3546333a9127ecebb3f2761372e096395fc649"}, + {file = "pydantic_core-2.18.1-cp310-none-win_amd64.whl", hash = "sha256:9a29726f91c6cb390b3c2338f0df5cd3e216ad7a938762d11c994bb37552edb0"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:9ece8a49696669d483d206b4474c367852c44815fca23ac4e48b72b339807f80"}, + {file = "pydantic_core-2.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7a5d83efc109ceddb99abd2c1316298ced2adb4570410defe766851a804fcd5b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f7973c381283783cd1043a8c8f61ea5ce7a3a58b0369f0ee0ee975eaf2f2a1b"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54c7375c62190a7845091f521add19b0f026bcf6ae674bdb89f296972272e86d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd63cec4e26e790b70544ae5cc48d11b515b09e05fdd5eff12e3195f54b8a586"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:561cf62c8a3498406495cfc49eee086ed2bb186d08bcc65812b75fda42c38294"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68717c38a68e37af87c4da20e08f3e27d7e4212e99e96c3d875fbf3f4812abfc"}, + {file = "pydantic_core-2.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2d5728e93d28a3c63ee513d9ffbac9c5989de8c76e049dbcb5bfe4b923a9739d"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f0f17814c505f07806e22b28856c59ac80cee7dd0fbb152aed273e116378f519"}, + {file = "pydantic_core-2.18.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d816f44a51ba5175394bc6c7879ca0bd2be560b2c9e9f3411ef3a4cbe644c2e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win32.whl", hash = "sha256:09f03dfc0ef8c22622eaa8608caa4a1e189cfb83ce847045eca34f690895eccb"}, + {file = "pydantic_core-2.18.1-cp311-none-win_amd64.whl", hash = "sha256:27f1009dc292f3b7ca77feb3571c537276b9aad5dd4efb471ac88a8bd09024e9"}, + {file = "pydantic_core-2.18.1-cp311-none-win_arm64.whl", hash = "sha256:48dd883db92e92519201f2b01cafa881e5f7125666141a49ffba8b9facc072b0"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:b6b0e4912030c6f28bcb72b9ebe4989d6dc2eebcd2a9cdc35fefc38052dd4fe8"}, + {file = "pydantic_core-2.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3202a429fe825b699c57892d4371c74cc3456d8d71b7f35d6028c96dfecad31"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3982b0a32d0a88b3907e4b0dc36809fda477f0757c59a505d4e9b455f384b8b"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25595ac311f20e5324d1941909b0d12933f1fd2171075fcff763e90f43e92a0d"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14fe73881cf8e4cbdaded8ca0aa671635b597e42447fec7060d0868b52d074e6"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca976884ce34070799e4dfc6fbd68cb1d181db1eefe4a3a94798ddfb34b8867f"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:684d840d2c9ec5de9cb397fcb3f36d5ebb6fa0d94734f9886032dd796c1ead06"}, + {file = "pydantic_core-2.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:54764c083bbe0264f0f746cefcded6cb08fbbaaf1ad1d78fb8a4c30cff999a90"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:201713f2f462e5c015b343e86e68bd8a530a4f76609b33d8f0ec65d2b921712a"}, + {file = "pydantic_core-2.18.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fd1a9edb9dd9d79fbeac1ea1f9a8dd527a6113b18d2e9bcc0d541d308dae639b"}, + {file = "pydantic_core-2.18.1-cp312-none-win32.whl", hash = "sha256:d5e6b7155b8197b329dc787356cfd2684c9d6a6b1a197f6bbf45f5555a98d411"}, + {file = "pydantic_core-2.18.1-cp312-none-win_amd64.whl", hash = "sha256:9376d83d686ec62e8b19c0ac3bf8d28d8a5981d0df290196fb6ef24d8a26f0d6"}, + {file = "pydantic_core-2.18.1-cp312-none-win_arm64.whl", hash = "sha256:c562b49c96906b4029b5685075fe1ebd3b5cc2601dfa0b9e16c2c09d6cbce048"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3e352f0191d99fe617371096845070dee295444979efb8f27ad941227de6ad09"}, + {file = "pydantic_core-2.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0295d52b012cbe0d3059b1dba99159c3be55e632aae1999ab74ae2bd86a33d7"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56823a92075780582d1ffd4489a2e61d56fd3ebb4b40b713d63f96dd92d28144"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dd3f79e17b56741b5177bcc36307750d50ea0698df6aa82f69c7db32d968c1c2"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38a5024de321d672a132b1834a66eeb7931959c59964b777e8f32dbe9523f6b1"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ce426ee691319d4767748c8e0895cfc56593d725594e415f274059bcf3cb76"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2adaeea59849ec0939af5c5d476935f2bab4b7f0335b0110f0f069a41024278e"}, + {file = "pydantic_core-2.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9b6431559676a1079eac0f52d6d0721fb8e3c5ba43c37bc537c8c83724031feb"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:85233abb44bc18d16e72dc05bf13848a36f363f83757541f1a97db2f8d58cfd9"}, + {file = "pydantic_core-2.18.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:641a018af4fe48be57a2b3d7a1f0f5dbca07c1d00951d3d7463f0ac9dac66622"}, + {file = "pydantic_core-2.18.1-cp38-none-win32.whl", hash = "sha256:63d7523cd95d2fde0d28dc42968ac731b5bb1e516cc56b93a50ab293f4daeaad"}, + {file = "pydantic_core-2.18.1-cp38-none-win_amd64.whl", hash = "sha256:907a4d7720abfcb1c81619863efd47c8a85d26a257a2dbebdb87c3b847df0278"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:aad17e462f42ddbef5984d70c40bfc4146c322a2da79715932cd8976317054de"}, + {file = "pydantic_core-2.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:94b9769ba435b598b547c762184bcfc4783d0d4c7771b04a3b45775c3589ca44"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80e0e57cc704a52fb1b48f16d5b2c8818da087dbee6f98d9bf19546930dc64b5"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:76b86e24039c35280ceee6dce7e62945eb93a5175d43689ba98360ab31eebc4a"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12a05db5013ec0ca4a32cc6433f53faa2a014ec364031408540ba858c2172bb0"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:250ae39445cb5475e483a36b1061af1bc233de3e9ad0f4f76a71b66231b07f88"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a32204489259786a923e02990249c65b0f17235073149d0033efcebe80095570"}, + {file = "pydantic_core-2.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6395a4435fa26519fd96fdccb77e9d00ddae9dd6c742309bd0b5610609ad7fb2"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2533ad2883f001efa72f3d0e733fb846710c3af6dcdd544fe5bf14fa5fe2d7db"}, + {file = "pydantic_core-2.18.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b560b72ed4816aee52783c66854d96157fd8175631f01ef58e894cc57c84f0f6"}, + {file = "pydantic_core-2.18.1-cp39-none-win32.whl", hash = "sha256:582cf2cead97c9e382a7f4d3b744cf0ef1a6e815e44d3aa81af3ad98762f5a9b"}, + {file = "pydantic_core-2.18.1-cp39-none-win_amd64.whl", hash = "sha256:ca71d501629d1fa50ea7fa3b08ba884fe10cefc559f5c6c8dfe9036c16e8ae89"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e178e5b66a06ec5bf51668ec0d4ac8cfb2bdcb553b2c207d58148340efd00143"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:72722ce529a76a4637a60be18bd789d8fb871e84472490ed7ddff62d5fed620d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fe0c1ce5b129455e43f941f7a46f61f3d3861e571f2905d55cdbb8b5c6f5e2c"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4284c621f06a72ce2cb55f74ea3150113d926a6eb78ab38340c08f770eb9b4d"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a0c3e718f4e064efde68092d9d974e39572c14e56726ecfaeebbe6544521f47"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2027493cc44c23b598cfaf200936110433d9caa84e2c6cf487a83999638a96ac"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:76909849d1a6bffa5a07742294f3fa1d357dc917cb1fe7b470afbc3a7579d539"}, + {file = "pydantic_core-2.18.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ee7ccc7fb7e921d767f853b47814c3048c7de536663e82fbc37f5eb0d532224b"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ee2794111c188548a4547eccc73a6a8527fe2af6cf25e1a4ebda2fd01cdd2e60"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a139fe9f298dc097349fb4f28c8b81cc7a202dbfba66af0e14be5cfca4ef7ce5"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d074b07a10c391fc5bbdcb37b2f16f20fcd9e51e10d01652ab298c0d07908ee2"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c69567ddbac186e8c0aadc1f324a60a564cfe25e43ef2ce81bcc4b8c3abffbae"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:baf1c7b78cddb5af00971ad5294a4583188bda1495b13760d9f03c9483bb6203"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:2684a94fdfd1b146ff10689c6e4e815f6a01141781c493b97342cdc5b06f4d5d"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:73c1bc8a86a5c9e8721a088df234265317692d0b5cd9e86e975ce3bc3db62a59"}, + {file = "pydantic_core-2.18.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e60defc3c15defb70bb38dd605ff7e0fae5f6c9c7cbfe0ad7868582cb7e844a6"}, + {file = "pydantic_core-2.18.1.tar.gz", hash = "sha256:de9d3e8717560eb05e28739d1b35e4eac2e458553a52a301e51352a7ffc86a35"}, ] [package.dependencies] @@ -4364,7 +4094,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" name = "pygments" version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4380,7 +4109,6 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pyjsg" version = "0.11.10" description = "Python JSON Schema Grammar interpreter" -category = "main" optional = false python-versions = "*" files = [ @@ -4392,30 +4120,10 @@ files = [ antlr4-python3-runtime = ">=4.9.3,<4.10.0" jsonasobj = ">=1.2.1" -[[package]] -name = "pymdown-extensions" -version = "10.7.1" -description = "Extension pack for Python Markdown." -category = "main" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, - {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, -] - -[package.dependencies] -markdown = ">=3.5" -pyyaml = "*" - -[package.extras] -extra = ["pygments (>=2.12)"] - [[package]] name = "pyparsing" version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -4430,7 +4138,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pyproject-api" version = "1.6.1" description = "API to interact with the python pyproject.toml based projects" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4450,7 +4157,6 @@ testing = ["covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytes name = "pyreadline3" version = "3.4.1" description = "A python implementation of GNU readline." -category = "main" optional = true python-versions = "*" files = [ @@ -4462,7 +4168,6 @@ files = [ name = "pyshex" version = "0.8.1" description = "Python ShEx Implementation" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4485,7 +4190,6 @@ urllib3 = "*" name = "pyshexc" version = "0.9.1" description = "PyShExC - Python ShEx compiler" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4505,7 +4209,6 @@ shexjsg = ">=0.8.1" name = "pysolr" version = "3.9.0" description = "Lightweight Python client for Apache Solr" -category = "main" optional = false python-versions = "*" files = [ @@ -4520,14 +4223,13 @@ solrcloud = ["kazoo (>=2.5.0)"] [[package]] name = "pystow" -version = "0.5.3" +version = "0.5.4" description = "Easily pick a place to store data for your python package." -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "pystow-0.5.3-py3-none-any.whl", hash = "sha256:53106b299ae22fe5f3ae72f6410696ec9864523eb14f4e7192823bacffbe5722"}, - {file = "pystow-0.5.3.tar.gz", hash = "sha256:3747343be0b154aa15bc02b496f61d7c6f31179c1c210ab1d48b842c7a3aa064"}, + {file = "pystow-0.5.4-py3-none-any.whl", hash = "sha256:c377cc9fff11127007e60eb5c4dc18f2ffd986c0d0cec27134cdcd4c805bc7d8"}, + {file = "pystow-0.5.4.tar.gz", hash = "sha256:2692180cb405bd77259bee6c7f4db545d10e81939980064730609f21750567ff"}, ] [package.dependencies] @@ -4547,7 +4249,6 @@ xml = ["lxml"] name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4570,7 +4271,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-logging" version = "2015.11.4" description = "Configures logging and allows tweaking the log level with a py.test flag" -category = "main" optional = false python-versions = "*" files = [ @@ -4584,7 +4284,6 @@ pytest = ">=2.8.1" name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -4599,7 +4298,6 @@ six = ">=1.5" name = "python-json-logger" version = "2.0.7" description = "A python library adding a json log formatter" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4609,21 +4307,22 @@ files = [ [[package]] name = "python-ulid" -version = "2.2.0" +version = "2.4.0.post0" description = "Universally unique lexicographically sortable identifier" -category = "main" optional = true python-versions = ">=3.9" files = [ - {file = "python_ulid-2.2.0-py3-none-any.whl", hash = "sha256:ec2e69292c0b7c338a07df5e15b05270be6823675c103383e74d1d531945eab5"}, - {file = "python_ulid-2.2.0.tar.gz", hash = "sha256:9ec777177d396880d94be49ac7eb4ae2cd4a7474448bfdbfe911537add970aeb"}, + {file = "python_ulid-2.4.0.post0-py3-none-any.whl", hash = "sha256:e2c739e27e6d760136e5f411f311cdd3ec9c4c89696932fe803fa09a4dcd6ebe"}, + {file = "python_ulid-2.4.0.post0.tar.gz", hash = "sha256:45779c68b9060beb6fca72338a0620114489e1bbe274935149f14d1f776d4c43"}, ] +[package.extras] +pydantic = ["pydantic (>=2.0)"] + [[package]] name = "pytrie" version = "0.4.0" description = "A pure Python implementation of the trie data structure." -category = "main" optional = false python-versions = "*" files = [ @@ -4638,7 +4337,6 @@ sortedcontainers = "*" name = "pytz" version = "2024.1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -4650,7 +4348,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" files = [ @@ -4674,7 +4371,6 @@ files = [ name = "pywinpty" version = "2.0.13" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -4690,7 +4386,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4747,26 +4442,10 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] -[[package]] -name = "pyyaml-env-tag" -version = "0.1" -description = "A custom YAML tag for referencing environment variables in YAML files. " -category = "main" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, - {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, -] - -[package.dependencies] -pyyaml = "*" - [[package]] name = "pyzmq" version = "25.1.2" description = "Python bindings for 0MQ" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -4872,7 +4551,6 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} name = "qtconsole" version = "5.5.1" description = "Jupyter Qt console" -category = "dev" optional = false python-versions = ">= 3.8" files = [ @@ -4898,7 +4576,6 @@ test = ["flaky", "pytest", "pytest-qt"] name = "qtpy" version = "2.4.1" description = "Provides an abstraction layer on top of the various Qt bindings (PyQt5/6 and PySide2/6)." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -4916,7 +4593,6 @@ test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] name = "ratelimit" version = "2.2.1" description = "API rate limit decorator" -category = "main" optional = false python-versions = "*" files = [ @@ -4927,7 +4603,6 @@ files = [ name = "rdflib" version = "7.0.0" description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." -category = "main" optional = false python-versions = ">=3.8.1,<4.0.0" files = [ @@ -4949,7 +4624,6 @@ networkx = ["networkx (>=2.0.0,<3.0.0)"] name = "rdflib-jsonld" version = "0.6.1" description = "rdflib extension adding JSON-LD parser and serializer" -category = "main" optional = false python-versions = "*" files = [ @@ -4964,7 +4638,6 @@ rdflib = ">=5.0.0" name = "rdflib-shim" version = "1.0.3" description = "Shim for rdflib 5 and 6 incompatibilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4978,14 +4651,13 @@ rdflib-jsonld = "0.6.1" [[package]] name = "referencing" -version = "0.33.0" +version = "0.34.0" description = "JSON Referencing + Python" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, - {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, + {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, + {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, ] [package.dependencies] @@ -4996,8 +4668,7 @@ rpds-py = ">=0.7.0" name = "regex" version = "2023.12.25" description = "Alternative regular expression module, to replace re." -category = "main" -optional = false +optional = true python-versions = ">=3.7" files = [ {file = "regex-2023.12.25-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0694219a1d54336fd0445ea382d49d36882415c0134ee1e8332afd1529f0baa5"}, @@ -5099,7 +4770,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5121,7 +4791,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-cache" version = "1.2.0" description = "A persistent cache for python requests" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5152,7 +4821,6 @@ yaml = ["pyyaml (>=6.0.1)"] name = "requests-toolbelt" version = "1.0.0" description = "A utility belt for advanced users of python-requests" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -5167,7 +4835,6 @@ requests = ">=2.0.1,<3.0.0" name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -5182,7 +4849,6 @@ six = "*" name = "rfc3986-validator" version = "0.1.1" description = "Pure python rfc3986 validator" -category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -5194,7 +4860,6 @@ files = [ name = "rfc3987" version = "1.3.8" description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" -category = "main" optional = false python-versions = "*" files = [ @@ -5206,7 +4871,6 @@ files = [ name = "rpds-py" version = "0.18.0" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5315,7 +4979,6 @@ files = [ name = "ruamel-yaml" version = "0.18.6" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5334,7 +4997,6 @@ jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] name = "ruamel-yaml-clib" version = "0.2.8" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -5392,14 +5054,13 @@ files = [ [[package]] name = "s3transfer" -version = "0.10.0" +version = "0.10.1" description = "An Amazon S3 Transfer Manager" -category = "main" optional = true python-versions = ">= 3.8" files = [ - {file = "s3transfer-0.10.0-py3-none-any.whl", hash = "sha256:3cdb40f5cfa6966e812209d0994f2a4709b561c88e90cf00c2696d2df4e56b2e"}, - {file = "s3transfer-0.10.0.tar.gz", hash = "sha256:d0c8bbf672d5eebbe4e57945e23b972d963f07d82f661cabf678a5c88831595b"}, + {file = "s3transfer-0.10.1-py3-none-any.whl", hash = "sha256:ceb252b11bcf87080fb7850a224fb6e05c8a776bab8f2b64b7f25b969464839d"}, + {file = "s3transfer-0.10.1.tar.gz", hash = "sha256:5683916b4c724f799e600f41dd9e10a9ff19871bf87623cc8f491cb4f5fa0a19"}, ] [package.dependencies] @@ -5410,38 +5071,37 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "scikit-learn" -version = "1.4.1.post1" +version = "1.4.2" description = "A set of python modules for machine learning and data mining" -category = "main" optional = true python-versions = ">=3.9" files = [ - {file = "scikit-learn-1.4.1.post1.tar.gz", hash = "sha256:93d3d496ff1965470f9977d05e5ec3376fb1e63b10e4fda5e39d23c2d8969a30"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c540aaf44729ab5cd4bd5e394f2b375e65ceaea9cdd8c195788e70433d91bbc5"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:4310bff71aa98b45b46cd26fa641309deb73a5d1c0461d181587ad4f30ea3c36"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f43dd527dabff5521af2786a2f8de5ba381e182ec7292663508901cf6ceaf6e"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c02e27d65b0c7dc32f2c5eb601aaf5530b7a02bfbe92438188624524878336f2"}, - {file = "scikit_learn-1.4.1.post1-cp310-cp310-win_amd64.whl", hash = "sha256:629e09f772ad42f657ca60a1a52342eef786218dd20cf1369a3b8d085e55ef8f"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6145dfd9605b0b50ae72cdf72b61a2acd87501369a763b0d73d004710ebb76b5"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1afed6951bc9d2053c6ee9a518a466cbc9b07c6a3f9d43bfe734192b6125d508"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce03506ccf5f96b7e9030fea7eb148999b254c44c10182ac55857bc9b5d4815f"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4ba516fcdc73d60e7f48cbb0bccb9acbdb21807de3651531208aac73c758e3ab"}, - {file = "scikit_learn-1.4.1.post1-cp311-cp311-win_amd64.whl", hash = "sha256:78cd27b4669513b50db4f683ef41ea35b5dddc797bd2bbd990d49897fd1c8a46"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a1e289f33f613cefe6707dead50db31930530dc386b6ccff176c786335a7b01c"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:0df87de9ce1c0140f2818beef310fb2e2afdc1e66fc9ad587965577f17733649"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:712c1c69c45b58ef21635360b3d0a680ff7d83ac95b6f9b82cf9294070cda710"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1754b0c2409d6ed5a3380512d0adcf182a01363c669033a2b55cca429ed86a81"}, - {file = "scikit_learn-1.4.1.post1-cp312-cp312-win_amd64.whl", hash = "sha256:1d491ef66e37f4e812db7e6c8286520c2c3fc61b34bf5e59b67b4ce528de93af"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:aa0029b78ef59af22cfbd833e8ace8526e4df90212db7ceccbea582ebb5d6794"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:14e4c88436ac96bf69eb6d746ac76a574c314a23c6961b7d344b38877f20fee1"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7cd3a77c32879311f2aa93466d3c288c955ef71d191503cf0677c3340ae8ae0"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a3ee19211ded1a52ee37b0a7b373a8bfc66f95353af058a210b692bd4cda0dd"}, - {file = "scikit_learn-1.4.1.post1-cp39-cp39-win_amd64.whl", hash = "sha256:234b6bda70fdcae9e4abbbe028582ce99c280458665a155eed0b820599377d25"}, + {file = "scikit-learn-1.4.2.tar.gz", hash = "sha256:daa1c471d95bad080c6e44b4946c9390a4842adc3082572c20e4f8884e39e959"}, + {file = "scikit_learn-1.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8539a41b3d6d1af82eb629f9c57f37428ff1481c1e34dddb3b9d7af8ede67ac5"}, + {file = "scikit_learn-1.4.2-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:68b8404841f944a4a1459b07198fa2edd41a82f189b44f3e1d55c104dbc2e40c"}, + {file = "scikit_learn-1.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81bf5d8bbe87643103334032dd82f7419bc8c8d02a763643a6b9a5c7288c5054"}, + {file = "scikit_learn-1.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36f0ea5d0f693cb247a073d21a4123bdf4172e470e6d163c12b74cbb1536cf38"}, + {file = "scikit_learn-1.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:87440e2e188c87db80ea4023440923dccbd56fbc2d557b18ced00fef79da0727"}, + {file = "scikit_learn-1.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:45dee87ac5309bb82e3ea633955030df9bbcb8d2cdb30383c6cd483691c546cc"}, + {file = "scikit_learn-1.4.2-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:1d0b25d9c651fd050555aadd57431b53d4cf664e749069da77f3d52c5ad14b3b"}, + {file = "scikit_learn-1.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0203c368058ab92efc6168a1507d388d41469c873e96ec220ca8e74079bf62e"}, + {file = "scikit_learn-1.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44c62f2b124848a28fd695db5bc4da019287abf390bfce602ddc8aa1ec186aae"}, + {file = "scikit_learn-1.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:5cd7b524115499b18b63f0c96f4224eb885564937a0b3477531b2b63ce331904"}, + {file = "scikit_learn-1.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:90378e1747949f90c8f385898fff35d73193dfcaec3dd75d6b542f90c4e89755"}, + {file = "scikit_learn-1.4.2-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:ff4effe5a1d4e8fed260a83a163f7dbf4f6087b54528d8880bab1d1377bd78be"}, + {file = "scikit_learn-1.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:671e2f0c3f2c15409dae4f282a3a619601fa824d2c820e5b608d9d775f91780c"}, + {file = "scikit_learn-1.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d36d0bc983336bbc1be22f9b686b50c964f593c8a9a913a792442af9bf4f5e68"}, + {file = "scikit_learn-1.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:d762070980c17ba3e9a4a1e043ba0518ce4c55152032f1af0ca6f39b376b5928"}, + {file = "scikit_learn-1.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d9993d5e78a8148b1d0fdf5b15ed92452af5581734129998c26f481c46586d68"}, + {file = "scikit_learn-1.4.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:426d258fddac674fdf33f3cb2d54d26f49406e2599dbf9a32b4d1696091d4256"}, + {file = "scikit_learn-1.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5460a1a5b043ae5ae4596b3126a4ec33ccba1b51e7ca2c5d36dac2169f62ab1d"}, + {file = "scikit_learn-1.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49d64ef6cb8c093d883e5a36c4766548d974898d378e395ba41a806d0e824db8"}, + {file = "scikit_learn-1.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:c97a50b05c194be9146d61fe87dbf8eac62b203d9e87a3ccc6ae9aed2dfaf361"}, ] [package.dependencies] joblib = ">=1.2.0" -numpy = ">=1.19.5,<2.0" +numpy = ">=1.19.5" scipy = ">=1.6.0" threadpoolctl = ">=2.0.0" @@ -5453,52 +5113,50 @@ tests = ["black (>=23.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.3)", "numpydoc ( [[package]] name = "scipy" -version = "1.12.0" +version = "1.13.0" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, -] - -[package.dependencies] -numpy = ">=1.22.4,<1.29.0" - -[package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<2.3" + +[package.extras] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "seaborn" version = "0.12.2" description = "Statistical data visualization" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5520,7 +5178,6 @@ stats = ["scipy (>=1.3)", "statsmodels (>=0.10)"] name = "semsimian" version = "0.2.15" description = "Sematic similarity calculations for ontologies implemented in Rust." -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -5565,7 +5222,6 @@ files = [ name = "semsql" version = "0.3.3" description = "" -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -5580,14 +5236,13 @@ SQLAlchemy-Utils = ">=0.38.2,<0.39.0" [[package]] name = "send2trash" -version = "1.8.2" +version = "1.8.3" description = "Send file to trash natively under Mac OS X, Windows and Linux" -category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, ] [package.extras] @@ -5597,26 +5252,24 @@ win32 = ["pywin32"] [[package]] name = "setuptools" -version = "69.1.1" +version = "69.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" -optional = false +optional = true python-versions = ">=3.8" files = [ - {file = "setuptools-69.1.1-py3-none-any.whl", hash = "sha256:02fa291a0471b3a18b2b2481ed902af520c69e8ae0919c13da936542754b4c56"}, - {file = "setuptools-69.1.1.tar.gz", hash = "sha256:5c0806c7d9af348e6dd3777b4f4dbb42c7ad85b190104837488eab9a7c945cf8"}, + {file = "setuptools-69.5.0-py3-none-any.whl", hash = "sha256:3b2dbd8f63dcc6b7c327d0243c2d7dc8c96cc507c016f09221f3787e6e528719"}, + {file = "setuptools-69.5.0.tar.gz", hash = "sha256:8d881f842bfc0e29e93bc98a2e650e8845609adff4d2989ba6c748e67b09d5be"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "shexjsg" version = "0.8.2" description = "ShExJSG - Astract Syntax Tree for the ShEx 2.0 language" -category = "dev" optional = false python-versions = "*" files = [ @@ -5631,7 +5284,6 @@ pyjsg = ">=0.11.10" name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -5643,7 +5295,6 @@ files = [ name = "sniffio" version = "1.3.1" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5655,7 +5306,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "dev" optional = false python-versions = "*" files = [ @@ -5667,7 +5317,6 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "main" optional = false python-versions = "*" files = [ @@ -5679,7 +5328,6 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5691,7 +5339,6 @@ files = [ name = "sparqlslurper" version = "0.5.1" description = "SPARQL Slurper for rdflib" -category = "dev" optional = false python-versions = ">=3.7.4" files = [ @@ -5708,7 +5355,6 @@ sparqlwrapper = ">=1.8.2" name = "sparqlwrapper" version = "2.0.0" description = "SPARQL Endpoint interface to Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5729,7 +5375,6 @@ pandas = ["pandas (>=1.3.5)"] name = "sphinx" version = "7.2.6" description = "Python documentation generator" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -5765,7 +5410,6 @@ test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools name = "sphinx-click" version = "5.1.0" description = "Sphinx extension that automatically documents click applications" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -5782,7 +5426,6 @@ sphinx = ">=2.0" name = "sphinx-copybutton" version = "0.5.1" description = "Add a copy button to each of your code cells." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5801,7 +5444,6 @@ rtd = ["ipython", "myst-nb", "sphinx", "sphinx-book-theme", "sphinx-examples"] name = "sphinx-rtd-theme" version = "1.3.0" description = "Read the Docs theme for Sphinx" -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -5821,7 +5463,6 @@ dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] name = "sphinxcontrib-applehelp" version = "1.0.8" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -5838,7 +5479,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.6" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -5855,7 +5495,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.5" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -5872,7 +5511,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jquery" version = "4.1" description = "Extension to include jQuery on newer Sphinx releases" -category = "dev" optional = false python-versions = ">=2.7" files = [ @@ -5887,7 +5525,6 @@ Sphinx = ">=1.8" name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -5902,7 +5539,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-mermaid" version = "0.8.1" description = "Mermaid diagrams in yours Sphinx powered docs" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -5914,7 +5550,6 @@ files = [ name = "sphinxcontrib-qthelp" version = "1.0.7" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -5931,7 +5566,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.10" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -category = "dev" optional = false python-versions = ">=3.9" files = [ @@ -5946,61 +5580,60 @@ test = ["pytest"] [[package]] name = "sqlalchemy" -version = "2.0.28" +version = "2.0.29" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=3.7" files = [ - {file = "SQLAlchemy-2.0.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e0b148ab0438f72ad21cb004ce3bdaafd28465c4276af66df3b9ecd2037bf252"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bbda76961eb8f27e6ad3c84d1dc56d5bc61ba8f02bd20fcf3450bd421c2fcc9c"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:feea693c452d85ea0015ebe3bb9cd15b6f49acc1a31c28b3c50f4db0f8fb1e71"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5da98815f82dce0cb31fd1e873a0cb30934971d15b74e0d78cf21f9e1b05953f"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5adf383c73f2d49ad15ff363a8748319ff84c371eed59ffd0127355d6ea1da"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56856b871146bfead25fbcaed098269d90b744eea5cb32a952df00d542cdd368"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-win32.whl", hash = "sha256:943aa74a11f5806ab68278284a4ddd282d3fb348a0e96db9b42cb81bf731acdc"}, - {file = "SQLAlchemy-2.0.28-cp310-cp310-win_amd64.whl", hash = "sha256:c6c4da4843e0dabde41b8f2e8147438330924114f541949e6318358a56d1875a"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46a3d4e7a472bfff2d28db838669fc437964e8af8df8ee1e4548e92710929adc"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0d3dd67b5d69794cfe82862c002512683b3db038b99002171f624712fa71aeaa"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61e2e41656a673b777e2f0cbbe545323dbe0d32312f590b1bc09da1de6c2a02"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0315d9125a38026227f559488fe7f7cee1bd2fbc19f9fd637739dc50bb6380b2"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af8ce2d31679006e7b747d30a89cd3ac1ec304c3d4c20973f0f4ad58e2d1c4c9"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:81ba314a08c7ab701e621b7ad079c0c933c58cdef88593c59b90b996e8b58fa5"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-win32.whl", hash = "sha256:1ee8bd6d68578e517943f5ebff3afbd93fc65f7ef8f23becab9fa8fb315afb1d"}, - {file = "SQLAlchemy-2.0.28-cp311-cp311-win_amd64.whl", hash = "sha256:ad7acbe95bac70e4e687a4dc9ae3f7a2f467aa6597049eeb6d4a662ecd990bb6"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d3499008ddec83127ab286c6f6ec82a34f39c9817f020f75eca96155f9765097"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9b66fcd38659cab5d29e8de5409cdf91e9986817703e1078b2fdaad731ea66f5"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bea30da1e76cb1acc5b72e204a920a3a7678d9d52f688f087dc08e54e2754c67"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:124202b4e0edea7f08a4db8c81cc7859012f90a0d14ba2bf07c099aff6e96462"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:e23b88c69497a6322b5796c0781400692eca1ae5532821b39ce81a48c395aae9"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b6303bfd78fb3221847723104d152e5972c22367ff66edf09120fcde5ddc2e2"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-win32.whl", hash = "sha256:a921002be69ac3ab2cf0c3017c4e6a3377f800f1fca7f254c13b5f1a2f10022c"}, - {file = "SQLAlchemy-2.0.28-cp312-cp312-win_amd64.whl", hash = "sha256:b4a2cf92995635b64876dc141af0ef089c6eea7e05898d8d8865e71a326c0385"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e91b5e341f8c7f1e5020db8e5602f3ed045a29f8e27f7f565e0bdee3338f2c7"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c7b78dfc7278329f27be02c44abc0d69fe235495bb8e16ec7ef1b1a17952db"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3eba73ef2c30695cb7eabcdb33bb3d0b878595737479e152468f3ba97a9c22a4"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:5df5d1dafb8eee89384fb7a1f79128118bc0ba50ce0db27a40750f6f91aa99d5"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:2858bbab1681ee5406650202950dc8f00e83b06a198741b7c656e63818633526"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-win32.whl", hash = "sha256:9461802f2e965de5cff80c5a13bc945abea7edaa1d29360b485c3d2b56cdb075"}, - {file = "SQLAlchemy-2.0.28-cp37-cp37m-win_amd64.whl", hash = "sha256:a6bec1c010a6d65b3ed88c863d56b9ea5eeefdf62b5e39cafd08c65f5ce5198b"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:843a882cadebecc655a68bd9a5b8aa39b3c52f4a9a5572a3036fb1bb2ccdc197"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dbb990612c36163c6072723523d2be7c3eb1517bbdd63fe50449f56afafd1133"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd7e4baf9161d076b9a7e432fce06217b9bd90cfb8f1d543d6e8c4595627edb9"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0a5354cb4de9b64bccb6ea33162cb83e03dbefa0d892db88a672f5aad638a75"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:fffcc8edc508801ed2e6a4e7b0d150a62196fd28b4e16ab9f65192e8186102b6"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:aca7b6d99a4541b2ebab4494f6c8c2f947e0df4ac859ced575238e1d6ca5716b"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-win32.whl", hash = "sha256:8c7f10720fc34d14abad5b647bc8202202f4948498927d9f1b4df0fb1cf391b7"}, - {file = "SQLAlchemy-2.0.28-cp38-cp38-win_amd64.whl", hash = "sha256:243feb6882b06a2af68ecf4bec8813d99452a1b62ba2be917ce6283852cf701b"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fc4974d3684f28b61b9a90fcb4c41fb340fd4b6a50c04365704a4da5a9603b05"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:87724e7ed2a936fdda2c05dbd99d395c91ea3c96f029a033a4a20e008dd876bf"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68722e6a550f5de2e3cfe9da6afb9a7dd15ef7032afa5651b0f0c6b3adb8815d"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:328529f7c7f90adcd65aed06a161851f83f475c2f664a898af574893f55d9e53"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:df40c16a7e8be7413b885c9bf900d402918cc848be08a59b022478804ea076b8"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:426f2fa71331a64f5132369ede5171c52fd1df1bd9727ce621f38b5b24f48750"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-win32.whl", hash = "sha256:33157920b233bc542ce497a81a2e1452e685a11834c5763933b440fedd1d8e2d"}, - {file = "SQLAlchemy-2.0.28-cp39-cp39-win_amd64.whl", hash = "sha256:2f60843068e432311c886c5f03c4664acaef507cf716f6c60d5fde7265be9d7b"}, - {file = "SQLAlchemy-2.0.28-py3-none-any.whl", hash = "sha256:78bb7e8da0183a8301352d569900d9d3594c48ac21dc1c2ec6b3121ed8b6c986"}, - {file = "SQLAlchemy-2.0.28.tar.gz", hash = "sha256:dd53b6c4e6d960600fd6532b79ee28e2da489322fcf6648738134587faf767b6"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c142852ae192e9fe5aad5c350ea6befe9db14370b34047e1f0f7cf99e63c63b"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:99a1e69d4e26f71e750e9ad6fdc8614fbddb67cfe2173a3628a2566034e223c7"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5ef3fbccb4058355053c51b82fd3501a6e13dd808c8d8cd2561e610c5456013c"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d6753305936eddc8ed190e006b7bb33a8f50b9854823485eed3a886857ab8d1"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0f3ca96af060a5250a8ad5a63699180bc780c2edf8abf96c58af175921df847a"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c4520047006b1d3f0d89e0532978c0688219857eb2fee7c48052560ae76aca1e"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-win32.whl", hash = "sha256:b2a0e3cf0caac2085ff172c3faacd1e00c376e6884b5bc4dd5b6b84623e29e4f"}, + {file = "SQLAlchemy-2.0.29-cp310-cp310-win_amd64.whl", hash = "sha256:01d10638a37460616708062a40c7b55f73e4d35eaa146781c683e0fa7f6c43fb"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:308ef9cb41d099099fffc9d35781638986870b29f744382904bf9c7dadd08513"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:296195df68326a48385e7a96e877bc19aa210e485fa381c5246bc0234c36c78e"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a13b917b4ffe5a0a31b83d051d60477819ddf18276852ea68037a144a506efb9"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f6d971255d9ddbd3189e2e79d743ff4845c07f0633adfd1de3f63d930dbe673"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:61405ea2d563407d316c63a7b5271ae5d274a2a9fbcd01b0aa5503635699fa1e"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:de7202ffe4d4a8c1e3cde1c03e01c1a3772c92858837e8f3879b497158e4cb44"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-win32.whl", hash = "sha256:b5d7ed79df55a731749ce65ec20d666d82b185fa4898430b17cb90c892741520"}, + {file = "SQLAlchemy-2.0.29-cp311-cp311-win_amd64.whl", hash = "sha256:205f5a2b39d7c380cbc3b5dcc8f2762fb5bcb716838e2d26ccbc54330775b003"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d96710d834a6fb31e21381c6d7b76ec729bd08c75a25a5184b1089141356171f"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:52de4736404e53c5c6a91ef2698c01e52333988ebdc218f14c833237a0804f1b"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c7b02525ede2a164c5fa5014915ba3591730f2cc831f5be9ff3b7fd3e30958e"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dfefdb3e54cd15f5d56fd5ae32f1da2d95d78319c1f6dfb9bcd0eb15d603d5d"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a88913000da9205b13f6f195f0813b6ffd8a0c0c2bd58d499e00a30eb508870c"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fecd5089c4be1bcc37c35e9aa678938d2888845a134dd016de457b942cf5a758"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-win32.whl", hash = "sha256:8197d6f7a3d2b468861ebb4c9f998b9df9e358d6e1cf9c2a01061cb9b6cf4e41"}, + {file = "SQLAlchemy-2.0.29-cp312-cp312-win_amd64.whl", hash = "sha256:9b19836ccca0d321e237560e475fd99c3d8655d03da80c845c4da20dda31b6e1"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:87a1d53a5382cdbbf4b7619f107cc862c1b0a4feb29000922db72e5a66a5ffc0"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a0732dffe32333211801b28339d2a0babc1971bc90a983e3035e7b0d6f06b93"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90453597a753322d6aa770c5935887ab1fc49cc4c4fdd436901308383d698b4b"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:ea311d4ee9a8fa67f139c088ae9f905fcf0277d6cd75c310a21a88bf85e130f5"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:5f20cb0a63a3e0ec4e169aa8890e32b949c8145983afa13a708bc4b0a1f30e03"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-win32.whl", hash = "sha256:e5bbe55e8552019c6463709b39634a5fc55e080d0827e2a3a11e18eb73f5cdbd"}, + {file = "SQLAlchemy-2.0.29-cp37-cp37m-win_amd64.whl", hash = "sha256:c2f9c762a2735600654c654bf48dad388b888f8ce387b095806480e6e4ff6907"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7e614d7a25a43a9f54fcce4675c12761b248547f3d41b195e8010ca7297c369c"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:471fcb39c6adf37f820350c28aac4a7df9d3940c6548b624a642852e727ea586"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:988569c8732f54ad3234cf9c561364221a9e943b78dc7a4aaf35ccc2265f1930"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dddaae9b81c88083e6437de95c41e86823d150f4ee94bf24e158a4526cbead01"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:334184d1ab8f4c87f9652b048af3f7abea1c809dfe526fb0435348a6fef3d380"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:38b624e5cf02a69b113c8047cf7f66b5dfe4a2ca07ff8b8716da4f1b3ae81567"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-win32.whl", hash = "sha256:bab41acf151cd68bc2b466deae5deeb9e8ae9c50ad113444151ad965d5bf685b"}, + {file = "SQLAlchemy-2.0.29-cp38-cp38-win_amd64.whl", hash = "sha256:52c8011088305476691b8750c60e03b87910a123cfd9ad48576d6414b6ec2a1d"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3071ad498896907a5ef756206b9dc750f8e57352113c19272bdfdc429c7bd7de"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dba622396a3170974f81bad49aacebd243455ec3cc70615aeaef9e9613b5bca5"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b184e3de58009cc0bf32e20f137f1ec75a32470f5fede06c58f6c355ed42a72"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c37f1050feb91f3d6c32f864d8e114ff5545a4a7afe56778d76a9aec62638ba"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bda7ce59b06d0f09afe22c56714c65c957b1068dee3d5e74d743edec7daba552"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:25664e18bef6dc45015b08f99c63952a53a0a61f61f2e48a9e70cec27e55f699"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-win32.whl", hash = "sha256:77d29cb6c34b14af8a484e831ab530c0f7188f8efed1c6a833a2c674bf3c26ec"}, + {file = "SQLAlchemy-2.0.29-cp39-cp39-win_amd64.whl", hash = "sha256:04c487305ab035a9548f573763915189fc0fe0824d9ba28433196f8436f1449c"}, + {file = "SQLAlchemy-2.0.29-py3-none-any.whl", hash = "sha256:dc4ee2d4ee43251905f88637d5281a8d52e916a021384ec10758826f5cbae305"}, + {file = "SQLAlchemy-2.0.29.tar.gz", hash = "sha256:bd9566b8e58cabd700bc367b60e90d9349cd16f0984973f98a9a09f9c64e86f0"}, ] [package.dependencies] @@ -6036,7 +5669,6 @@ sqlcipher = ["sqlcipher3_binary"] name = "sqlalchemy-utils" version = "0.38.3" description = "Various utility functions for SQLAlchemy." -category = "main" optional = false python-versions = "~=3.6" files = [ @@ -6065,7 +5697,6 @@ url = ["furl (>=0.4.1)"] name = "sqlite-fts4" version = "1.0.3" description = "Python functions for working with SQLite FTS4 search" -category = "main" optional = true python-versions = "*" files = [ @@ -6080,7 +5711,6 @@ test = ["pytest"] name = "sqlite-migrate" version = "0.1b0" description = "A simple database migration system for SQLite, based on sqlite-utils" -category = "main" optional = true python-versions = "*" files = [ @@ -6098,7 +5728,6 @@ test = ["black", "mypy", "pytest", "ruff"] name = "sqlite-utils" version = "3.36" description = "CLI tool and Python library for manipulating SQLite databases" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6123,14 +5752,13 @@ tui = ["trogon"] [[package]] name = "sssom" -version = "0.4.4" +version = "0.4.7" description = "Operations on SSSOM mapping tables" -category = "main" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "sssom-0.4.4-py3-none-any.whl", hash = "sha256:bc2a01865ea2cf1805420d82a1cbd7d0e180fc86af77f4e3eedd4fed5a569fc7"}, - {file = "sssom-0.4.4.tar.gz", hash = "sha256:9395c5614f2d1ff321450100d5448388642dccca6060dd8c03a5664d227da7b0"}, + {file = "sssom-0.4.7-py3-none-any.whl", hash = "sha256:93118cafec7f35948f3bdb17f21612cf94162a500c8f569c8a8564de36e3c040"}, + {file = "sssom-0.4.7.tar.gz", hash = "sha256:c2f8bf418f159f778e4564cdec2a859f2bfae5891a33e0b67b2d8bb56c6221b3"}, ] [package.dependencies] @@ -6138,7 +5766,7 @@ click = ">=8.1.6" curies = ">=0.7.3" deprecation = ">=2.1.0,<3.0.0" importlib-resources = ">=6.1.1,<7.0.0" -linkml-runtime = ">=1.5.5" +linkml-runtime = ">=1.7.5,<2.0.0" networkx = {version = ">=3.1", extras = ["networkx"]} pandas = ">1.0.3" pansql = {version = ">=0.0.1", extras = ["pansql"]} @@ -6146,30 +5774,27 @@ pyyaml = ">=6.0.1,<7.0.0" rdflib = ">=6.0.0" scipy = {version = "*", extras = ["scipy"]} sparqlwrapper = ">=2.0.0" -sssom-schema = ">=0.14.0" +sssom-schema = ">=0.15.2,<0.16.0" validators = ">=0.20.0" [[package]] name = "sssom-schema" -version = "0.15.0" +version = "0.15.2" description = "SSSOM is a Simple Standard for Sharing Ontology Mappings." -category = "main" optional = false -python-versions = ">=3.7.6,<4.0.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "sssom_schema-0.15.0-py3-none-any.whl", hash = "sha256:0ba81a0fe76d28a2c65d65a99e0cd17d8dd08274f9735776a70c8d2f3734e901"}, - {file = "sssom_schema-0.15.0.tar.gz", hash = "sha256:35d56ba6d0350b1e07df2789aebac9c5c70b0888bf88ec3c0592c89e9c13d228"}, + {file = "sssom_schema-0.15.2-py3-none-any.whl", hash = "sha256:41112586160d5e57a7cfedab22dfd0c21d1e3e1a86805f7fe31918a9b664ca15"}, + {file = "sssom_schema-0.15.2.tar.gz", hash = "sha256:c759ee8f9e4a7e5e8249b58198189b2e48e297ff31a918d4af64a89ed30938da"}, ] [package.dependencies] linkml-runtime = "*" -mkdocs-mermaid2-plugin = ">=0.6.0,<0.7.0" [[package]] name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" files = [ @@ -6189,7 +5814,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "tabulate" version = "0.9.0" description = "Pretty-print tabular data" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6204,7 +5828,6 @@ widechars = ["wcwidth"] name = "tenacity" version = "8.2.3" description = "Retry code until it succeeds" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6217,14 +5840,13 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"] [[package]] name = "terminado" -version = "0.18.0" +version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, - {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, ] [package.dependencies] @@ -6239,21 +5861,19 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "threadpoolctl" -version = "3.3.0" +version = "3.4.0" description = "threadpoolctl" -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.3.0-py3-none-any.whl", hash = "sha256:6155be1f4a39f31a18ea70f94a77e0ccd57dced08122ea61109e7da89883781e"}, - {file = "threadpoolctl-3.3.0.tar.gz", hash = "sha256:5dac632b4fa2d43f42130267929af3ba01399ef4bd1882918e92dbc30365d30c"}, + {file = "threadpoolctl-3.4.0-py3-none-any.whl", hash = "sha256:8f4c689a65b23e5ed825c8436a92b818aac005e0f3715f6a1664d7c7ee29d262"}, + {file = "threadpoolctl-3.4.0.tar.gz", hash = "sha256:f11b491a03661d6dd7ef692dd422ab34185d982466c49c8f98c8f716b5c93196"}, ] [[package]] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6272,7 +5892,6 @@ test = ["flake8", "isort", "pytest"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6284,7 +5903,6 @@ files = [ name = "tornado" version = "6.4" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" optional = false python-versions = ">= 3.8" files = [ @@ -6303,14 +5921,13 @@ files = [ [[package]] name = "tox" -version = "4.14.1" +version = "4.14.2" description = "tox is a generic virtualenv management and test command line tool" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "tox-4.14.1-py3-none-any.whl", hash = "sha256:b03754b6ee6dadc70f2611da82b4ed8f625fcafd247e15d1d0cb056f90a06d3b"}, - {file = "tox-4.14.1.tar.gz", hash = "sha256:f0ad758c3bbf7e237059c929d3595479363c3cdd5a06ac3e49d1dd020ffbee45"}, + {file = "tox-4.14.2-py3-none-any.whl", hash = "sha256:2900c4eb7b716af4a928a7fdc2ed248ad6575294ed7cfae2ea41203937422847"}, + {file = "tox-4.14.2.tar.gz", hash = "sha256:0defb44f6dafd911b61788325741cc6b2e12ea71f987ac025ad4d649f1f1a104"}, ] [package.dependencies] @@ -6333,7 +5950,6 @@ testing = ["build[virtualenv] (>=1.0.3)", "covdefaults (>=2.3)", "detect-test-po name = "tqdm" version = "4.66.2" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6352,49 +5968,45 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.14.1" +version = "5.14.2" description = "Traitlets Python configuration system" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, + {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, + {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "types-python-dateutil" -version = "2.8.19.20240106" +version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" -category = "dev" optional = false python-versions = ">=3.8" files = [ - {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, - {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, + {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, + {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] name = "tzdata" version = "2024.1" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -6406,7 +6018,6 @@ files = [ name = "unidecode" version = "1.3.8" description = "ASCII transliterations of Unicode text" -category = "main" optional = true python-versions = ">=3.5" files = [ @@ -6418,7 +6029,6 @@ files = [ name = "uri-template" version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6433,7 +6043,6 @@ dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake name = "url-normalize" version = "1.4.3" description = "URL normalization for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -6448,7 +6057,6 @@ six = "*" name = "urllib3" version = "1.26.18" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -6463,32 +6071,19 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "validators" -version = "0.22.0" +version = "0.28.0" description = "Python Data Validation for Humans™" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.22.0-py3-none-any.whl", hash = "sha256:61cf7d4a62bbae559f2e54aed3b000cea9ff3e2fdbe463f51179b92c58c9585a"}, - {file = "validators-0.22.0.tar.gz", hash = "sha256:77b2689b172eeeb600d9605ab86194641670cdb73b60afd577142a9397873370"}, + {file = "validators-0.28.0-py3-none-any.whl", hash = "sha256:e0184691dea3ba82b52c161ba81d3ec1d8be8da9609f0137d1430b395b366521"}, + {file = "validators-0.28.0.tar.gz", hash = "sha256:85bc82511f6ccd0800f4c15d8c0dc546c15e369640c5ea1f24349ba0b3b17815"}, ] -[package.extras] -docs-offline = ["myst-parser (>=2.0.0)", "pypandoc-binary (>=1.11)", "sphinx (>=7.1.1)"] -docs-online = ["mkdocs (>=1.5.2)", "mkdocs-git-revision-date-localized-plugin (>=1.2.0)", "mkdocs-material (>=9.2.6)", "mkdocstrings[python] (>=0.22.0)", "pyaml (>=23.7.0)"] -hooks = ["pre-commit (>=3.3.3)"] -package = ["build (>=1.0.0)", "twine (>=4.0.2)"] -runner = ["tox (>=4.11.1)"] -sast = ["bandit[toml] (>=1.7.5)"] -testing = ["pytest (>=7.4.0)"] -tooling = ["black (>=23.7.0)", "pyright (>=1.1.325)", "ruff (>=0.0.287)"] -tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4.0)"] - [[package]] name = "virtualenv" version = "20.25.1" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6509,7 +6104,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "watchdog" version = "4.0.0" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -6551,7 +6145,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" files = [ @@ -6563,7 +6156,6 @@ files = [ name = "webcolors" version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6579,7 +6171,6 @@ tests = ["pytest", "pytest-cov"] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" files = [ @@ -6591,7 +6182,6 @@ files = [ name = "websocket-client" version = "1.7.0" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -6606,14 +6196,13 @@ test = ["websockets"] [[package]] name = "werkzeug" -version = "3.0.1" +version = "3.0.2" description = "The comprehensive WSGI web application library." -category = "main" optional = true python-versions = ">=3.8" files = [ - {file = "werkzeug-3.0.1-py3-none-any.whl", hash = "sha256:90a285dc0e42ad56b34e696398b8122ee4c681833fb35b8334a095d82c56da10"}, - {file = "werkzeug-3.0.1.tar.gz", hash = "sha256:507e811ecea72b18a404947aded4b3390e1db8f826b494d76550ef45bb3b1dcc"}, + {file = "werkzeug-3.0.2-py3-none-any.whl", hash = "sha256:3aac3f5da756f93030740bc235d3e09449efcf65f2f55e3602e1d851b8f48795"}, + {file = "werkzeug-3.0.2.tar.gz", hash = "sha256:e39b645a6ac92822588e7b39a692e7828724ceae0b0d702ef96701f90e70128d"}, ] [package.dependencies] @@ -6626,7 +6215,6 @@ watchdog = ["watchdog (>=2.3)"] name = "widgetsnbextension" version = "4.0.10" description = "Jupyter interactive widgets for Jupyter Notebook" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -6638,7 +6226,6 @@ files = [ name = "wrapt" version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6718,7 +6305,6 @@ files = [ name = "yarl" version = "1.9.4" description = "Yet another URL library" -category = "main" optional = true python-versions = ">=3.7" files = [ @@ -6820,28 +6406,27 @@ multidict = ">=4.0" [[package]] name = "zipp" -version = "3.17.0" +version = "3.18.1" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.17.0-py3-none-any.whl", hash = "sha256:0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31"}, - {file = "zipp-3.17.0.tar.gz", hash = "sha256:84e64a1c28cf7e91ed2078bb8cc8c259cb19b76942096c8d7b84947690cabaf0"}, + {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, + {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy (>=0.9.1)", "pytest-ruff"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] docs = [] gilda = ["gilda", "urllib3"] -llm = ["aiohttp", "llm"] +llm = ["aiohttp", "html2text", "llm"] seaborn = [] semsimian = ["semsimian"] [metadata] lock-version = "2.0" python-versions = ">=3.9,<4.0.0" -content-hash = "bf4d23af1cff701ffa0c6be74934f5e821f3d2d13e4ba00f0f6ed9d44bffb9b9" +content-hash = "dc8b9331a49f5c1d4ed9ef745a72682cbda320c802e35f5e90ac7f01348cd500" diff --git a/pyproject.toml b/pyproject.toml index 0d0f68dfc..d50f5bec3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ gilda = {version = ">=1.0.0", optional = true} semsimian = {version = ">=0.2.15", optional = true} kgcl-rdflib = "0.5.0" llm = {version = "*", optional = true} +html2text = {version = "*", optional = true} aiohttp = {version = "*", optional = true} pystow = ">=0.5.0" class-resolver = ">=0.4.2" @@ -74,7 +75,7 @@ boomerang = "oaklib.utilities.mapping.boomer_utils:main" [tool.poetry.extras] docs = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-mermaid", "sphinx-copybutton"] gilda = ["scipy", "gilda", "urllib3"] -llm = ["llm", "aiohttp"] +llm = ["llm", "aiohttp", "html2text"] seaborn = ["seaborn"] semsimian = ["semsimian"] @@ -126,4 +127,4 @@ target-version = "py310" [tool.ruff.lint.mccabe] # Unlike Flake8, default to a complexity level of 10. -max-complexity = 10 \ No newline at end of file +max-complexity = 10 diff --git a/src/oaklib/cli.py b/src/oaklib/cli.py index 411b06614..ff183193f 100644 --- a/src/oaklib/cli.py +++ b/src/oaklib/cli.py @@ -190,6 +190,7 @@ shortest_paths, trim_graph, ) +from oaklib.utilities.publication_utils.pubmed_wrapper import PubmedWrapper from oaklib.utilities.semsim.similarity_utils import load_information_content_map from oaklib.utilities.subsets.slimmer_utils import ( filter_redundant, @@ -197,9 +198,6 @@ ) from oaklib.utilities.table_filler import ColumnDependency, TableFiller, TableMetadata from oaklib.utilities.taxon.taxon_constraint_utils import parse_gain_loss_file -from oaklib.utilities.validation.definition_ontology_rule import ( - TextAndLogicalDefinitionMatchOntologyRule, -) from oaklib.utilities.validation.lint_utils import lint_ontology from oaklib.utilities.validation.rule_runner import RuleRunner @@ -434,6 +432,11 @@ def clear_cli_settings(): "--configuration-file", help="Path to a configuration file. This is typically a YAML file, but may be a JSON file", ) +adapter_mapping_option = click.option( + "--adapter-mapping", + multiple=True, + help="Multiple prefix=selector pairs, e.g. --adapter-mapping uberon=db/uberon.db", +) pivot_languages = click.option( "--pivot-languages/--no-pivot-languages", help="include one column per language", @@ -3295,6 +3298,13 @@ def labels( @if_absent_option @additional_metadata_option @set_value_option +@click.option( + "--lookup-references/--no-lookup-references", + "-P", + default=False, + show_default=True, + help="Lookup references for each term, e.g. PMIDs", +) @autolabel_option def definitions( terms, @@ -3304,6 +3314,7 @@ def definitions( output_type: str, if_absent: bool, autolabel: bool, + lookup_references: bool, set_value, ): """ @@ -3311,12 +3322,14 @@ def definitions( Example: ------- + runoak -i sqlite:obo:envo definitions 'tropical biome' 'temperate biome' You can use the ".all" selector to show all definitions for all terms in the ontology: Example: ------- + runoak -i sqlite:obo:envo definitions .all You can also include definition metadata, such as provenance and source: @@ -3332,6 +3345,9 @@ def definitions( writer = _get_writer(output_type, impl, StreamingCsvWriter) writer.display_options = display.split(",") writer.file = output + if lookup_references and not additional_metadata: + logging.warning("Setting lookup_references to True implies additional_metadata=True") + additional_metadata = True if additional_metadata: writer.heterogeneous_keys = True changes = [] @@ -3350,6 +3366,16 @@ def definitions( if metadata is None: metadata = {} obj = dict(id=curie, label=labels.get(curie, None), definition=defn, **metadata) + if lookup_references: + refs = [] + obj["references"] = refs + pubmed_wrapper = PubmedWrapper() + for _k, vs in metadata.items(): + pmids = [v for v in vs if v.startswith("PMID:")] + if pmids: + objs = pubmed_wrapper.objects_by_ids(pmids) + refs.extend(objs) + if set_value is not None: # set the value by creating a KGCL change object for applying later obj["new_value"] = set_value @@ -5331,10 +5357,19 @@ def validate_multiple(dbs, output, schema, cutoff: int): show_default=True, help="If true, do not parse text annotations", ) +@configuration_file_option +@adapter_mapping_option @output_type_option @output_option @click.argument("terms", nargs=-1) -def validate_definitions(terms, skip_text_annotation, output: str, output_type: str): +def validate_definitions( + terms, + skip_text_annotation, + output: str, + output_type: str, + configuration_file: str, + adapter_mapping: List[str], +): """ Checks presence and structure of text definitions. @@ -5345,10 +5380,11 @@ def validate_definitions(terms, skip_text_annotation, output: str, output_type: By default this will apply basic text mining of text definitions to check against machine actionable OBO text definition guideline rules. This can result in an initial lag - to skip this, and ONLY perform - checks for presence of definitions, use --skip-text-annotation: + checks for *presence* of definitions, use --skip-text-annotation: Example: ------- + runoak validate-definitions -i db/uberon.db --skip-text-annotation Like most OAK commands, this accepts lists of terms or term queries @@ -5357,6 +5393,7 @@ def validate_definitions(terms, skip_text_annotation, output: str, output_type: Example: ------- + runoak validate-definitions -i db/cl.db CL:0002053 Only on CL identifiers: @@ -5377,6 +5414,7 @@ def validate_definitions(terms, skip_text_annotation, output: str, output_type: Notes: ----- + This command is largely redundant with the validate command, but is useful for targeted validation focused solely on definitions @@ -5385,30 +5423,34 @@ def validate_definitions(terms, skip_text_annotation, output: str, output_type: writer = _get_writer( output_type, impl, StreamingCsvWriter, datamodel=datamodels.validation_datamodel ) + writer.autolabel = True writer.output = output - if isinstance(impl, ValidatorInterface): - if terms: - entities = query_terms_iterator(terms, impl) - else: - entities = None - definition_rule = TextAndLogicalDefinitionMatchOntologyRule( - skip_text_annotation=skip_text_annotation - ) - for vr in definition_rule.evaluate(impl, entities=entities): - writer.emit(vr) - writer.finish() - else: + if not isinstance(impl, ValidatorInterface): raise NotImplementedError(f"Cannot execute this using {impl} of type {type(impl)}") + if configuration_file: + config = yaml_loader.load(configuration_file, target_class=ValidationConfiguration) + else: + config = None + adapters = {} + for am in adapter_mapping: + prefix, selector = am.split("=") + adapters[prefix] = get_adapter(selector) + logging.info(f"Loaded adapter for {prefix} => {selector}") + if terms: + entities = query_terms_iterator(terms, impl) + else: + entities = None + for vr in impl.validate_definitions( + entities, adapters=adapters, configuration=config, skip_text_annotation=skip_text_annotation + ): + writer.emit(vr, label_fields=["subject"]) + writer.finish() @main.command() @autolabel_option @output_type_option -@click.option( - "--adapter-mapping", - multiple=True, - help="Multiple prefix=selector pairs, e.g. --adapter-mapping uberon=db/uberon.db", -) +@adapter_mapping_option @output_option @configuration_file_option @click.argument("terms", nargs=-1) @@ -5476,6 +5518,104 @@ def validate_mappings( writer.finish() +@main.command() +@autolabel_option +@output_type_option +@adapter_mapping_option +@output_option +@configuration_file_option +@click.option( + "--rules-file", + "-R", + help="path to rules file. Conforms to rules_datamodel.\ + e.g. https://github.com/INCATools/ontology-access-kit/blob/main/tests/input/matcher_rules.yaml", +) +@click.argument("terms", nargs=-1) +def validate_synonyms( + terms, + autolabel, + adapter_mapping, + output: str, + output_type: str, + rules_file: str, + configuration_file: str, +): + """ + Validates synonyms in ontology using additional ontologies. + + To run: + + runoak validate-synonyms -i db/uberon.db + + You can customize this mapping: + + runoak validate-synonyms -i db/uberon.db --adapter-mapping uberon=db/uberon.db \ + --adapter-mapping zfa=sqlite:obo:zfa + + This will use a remote sqlite file for ZFA:nnnnnnn IDs. + + You can use "*" as a wildcard, in the case where you have an application ontology + with many mapped entities merged in: + + runoak validate-synonyms -i db/uberon.db --adapter-mapping "*"=db/merged.db" + + You can also pass synonymizer rules. For example: + + runoak -i sqlite:obo:go validate-synonyms \ + -R go-strip-activity.synonymizer.yaml GO:0000010 \ + --adapter-mapping ec=sqlite:obo:eccode + + In this case if the synonymizer rule file contains: + + \b + rules: + - match: " activity" + replacement: "" + \b + + Then the GO synonyms will have the word "activity" stripped from them, prior to attempting + to match with EC. + + The default behavior for this command is to perform deterministic rule-based + checks; for example, the mapped IDs should not be obsolete, and if the mapping + is skos:exactMatch, then the cardinality is expected to be 1:1. + + Other adapters may choose to implement bespoke behaviors. In future there + might be a boomer adapter that will perform probabilistic reasoning on the + mappings. The experimental LLM backend will use an LLM to qualitatively + validate mappings (see the LLM how-to guide for more details). + """ + impl = settings.impl + writer = _get_writer(output_type, impl, StreamingCsvWriter) + writer.output = output + writer.autolabel = autolabel + if not isinstance(impl, ValidatorInterface): + raise NotImplementedError(f"Cannot execute this using {impl} of type {type(impl)}") + if terms: + entities = query_terms_iterator(terms, impl) + else: + entities = None + if configuration_file: + config = yaml_loader.load(configuration_file, target_class=ValidationConfiguration) + else: + config = None + if rules_file: + ruleset = synonymizer_datamodel.RuleSet(**yaml.safe_load(open(rules_file))) + else: + ruleset = None + + adapters = {} + for am in adapter_mapping: + prefix, selector = am.split("=") + adapters[prefix] = get_adapter(selector) + logging.info(f"Loaded adapter for {prefix} => {selector}") + for result in impl.validate_synonyms( + entities, adapters=adapters, configuration=config, synonymizer_rules=ruleset + ): + writer.emit_obj(result) + writer.finish() + + @main.command() @click.argument("curie_pairs", nargs=-1) @click.option( @@ -6476,12 +6616,14 @@ def generate_synonyms(terms, rules_file, apply_patch, patch, patch_format, outpu Example: ------- + runoak -i foo.obo generate-synonyms -R foo_rules.yaml --patch patch.kgcl --apply-patch -o foo_syn.obo If the `apply-patch` flag is NOT set then the main input will be KGCL commands Example: ------- + runoak -i foo.obo generate-synonyms -R foo_rules.yaml -o changes.kgcl see https://github.com/INCATools/kgcl. diff --git a/src/oaklib/converters/obo_graph_to_obo_format_converter.py b/src/oaklib/converters/obo_graph_to_obo_format_converter.py index a539dd544..d7411a80b 100644 --- a/src/oaklib/converters/obo_graph_to_obo_format_converter.py +++ b/src/oaklib/converters/obo_graph_to_obo_format_converter.py @@ -2,7 +2,7 @@ import sys from dataclasses import dataclass from io import BytesIO, StringIO -from typing import Any, Dict, List, Tuple +from typing import Any, Dict, List, Optional, Tuple, Union import rdflib @@ -66,14 +66,19 @@ def dump(self, source: GraphDocument, target: str = None, **kwargs) -> None: with open(target, "w", encoding="UTF-8") as f: obodoc.dump(f) - def dumps(self, source: GraphDocument, **kwargs) -> str: + def dumps( + self, + source: Union[GraphDocument, Graph], + aux_graphs: Optional[List[Graph]] = None, + **kwargs, + ) -> str: """ Dump an OBO Graph Document to a string :param source: :return: """ - obodoc = self.convert(source) + obodoc = self.convert(source, aux_graphs=aux_graphs) io = StringIO() obodoc.dump(io) return io.getvalue() @@ -88,22 +93,41 @@ def as_bytes_io(self, source: GraphDocument, **kwargs) -> BytesIO: s = self.dumps(source) return BytesIO(s.encode("UTF-8")) - def convert(self, source: GraphDocument, target: OboDocument = None, **kwargs) -> OboDocument: + def convert( + self, + source: Union[GraphDocument, Graph], + target: OboDocument = None, + aux_graphs: Optional[List[Graph]] = None, + **kwargs, + ) -> OboDocument: """ Convert an OBO Format Document. :param source: :param target: if None, one will be created + :param aux_graphs: additional graphs to use for label lookup :return: """ if target is None: target = OboDocument() + if isinstance(source, Graph): + source = GraphDocument(graphs=[source]) for g in source.graphs: logging.info(f"Converting graph {g.id}, nodes: {len(g.nodes)}, edges: {len(g.edges)}") - self._convert_graph(g, target=target) + self._convert_graph(g, target=target, aux_graphs=aux_graphs) logging.info(f"Converted {len(target.stanzas)} stanzas") return target + def _commentify( + self, curie: CURIE, graph: Graph, aux_graphs: Optional[List[Graph]] = None + ) -> str: + graphs = [graph] + (aux_graphs or []) + for g in graphs: + for n in g.nodes: + if n.id == curie and n.lbl: + return f"{curie} ! {n.lbl}" + return curie + def _id(self, uri_or_curie: CURIE) -> CURIE: if not self.curie_converter: return uri_or_curie @@ -113,7 +137,9 @@ def _predicate_id(self, uri_or_curie: CURIE, target: OboDocument) -> CURIE: curie = self._id(uri_or_curie) return target.curie_to_shorthand_map.get(curie, curie) - def _convert_graph(self, source: Graph, target: OboDocument) -> OboDocument: + def _convert_graph( + self, source: Graph, target: OboDocument, aux_graphs: Optional[List[Graph]] = None + ) -> OboDocument: edges_by_subject = index_graph_edges_by_subject(source) for n in source.nodes: if n.type == "PROPERTY" and n.lbl: @@ -121,7 +147,9 @@ def _convert_graph(self, source: Graph, target: OboDocument) -> OboDocument: target.curie_to_shorthand_map[self._id(n.id)] = shorthand for n in source.nodes: logging.debug(f"Converting node {n.id}") - self._convert_node(n, index=edges_by_subject, target=target, graph=source) + self._convert_node( + n, index=edges_by_subject, target=target, graph=source, aux_graphs=aux_graphs + ) for lda in source.logicalDefinitionAxioms: defined_class_id = self._id(lda.definedClassId) if defined_class_id not in target.stanzas: @@ -129,9 +157,11 @@ def _convert_graph(self, source: Graph, target: OboDocument) -> OboDocument: stanza = target.stanzas[defined_class_id] for g in lda.genusIds: obj = self._id(g) + obj = self._commentify(obj, source, aux_graphs) stanza.add_tag_value(TAG_INTERSECTION_OF, obj) for r in lda.restrictions: filler = self._id(r.fillerId) + filler = self._commentify(filler, source, aux_graphs) pred = self._id(r.propertyId) stanza.add_tag_value_pair(TAG_INTERSECTION_OF, pred, filler) return target @@ -142,6 +172,7 @@ def _convert_node( index: Dict[CURIE, List[Edge]], target: OboDocument, graph: Graph = None, + aux_graphs: Optional[List[Graph]] = None, ) -> None: id = self._id(source.id) shorthand_xref = None @@ -168,20 +199,12 @@ def _convert_node( stanza.add_tag_value(TAG_XREF, shorthand_xref) for e in index.get(source.id, []): obj = self._id(e.obj) - obj_lbl = None - if graph: - nodes = [n for n in graph.nodes if n.id == e.obj] - if nodes: - obj_lbl = nodes[0].lbl - if obj_lbl: - cmt = f" ! {obj_lbl}" - else: - cmt = "" + obj_labeled = self._commentify(obj, graph, aux_graphs) pred = self._predicate_id(e.pred, target) if e.pred in DIRECT_PREDICATE_MAP: - stanza.add_tag_value(DIRECT_PREDICATE_MAP[e.pred], f"{obj}{cmt}") + stanza.add_tag_value(DIRECT_PREDICATE_MAP[e.pred], f"{obj_labeled}") else: - stanza.add_tag_value(TAG_RELATIONSHIP, f"{pred} {obj}{cmt}") + stanza.add_tag_value(TAG_RELATIONSHIP, f"{pred} {obj_labeled}") return def _convert_meta(self, source: Node, target: Stanza): diff --git a/src/oaklib/datamodels/ontology_metadata.py b/src/oaklib/datamodels/ontology_metadata.py index fe42f9975..15409c4af 100644 --- a/src/oaklib/datamodels/ontology_metadata.py +++ b/src/oaklib/datamodels/ontology_metadata.py @@ -1,45 +1,29 @@ -# Auto generated from ontology_metadata.yaml by pythongen.py version: 0.9.0 -# Generation date: 2023-04-09T14:06:34 +# Auto generated from ontology_metadata.yaml by pythongen.py version: 0.0.1 +# Generation date: 2024-04-14T16:59:12 # Schema: Ontology-Metadata # -# id: http://purl.obolibrary.org/obo/omo/schema +# id: https://w3id.org/oak/ontology-metadata # description: Schema for ontology metadata # license: https://creativecommons.org/publicdomain/zero/1.0/ import dataclasses import re -import sys +from jsonasobj2 import JsonObj, as_dict +from typing import Optional, List, Union, Dict, ClassVar, Any from dataclasses import dataclass -from typing import Any, ClassVar, Dict, List, Optional, Union +from datetime import date, datetime +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions -from jsonasobj2 import JsonObj, as_dict -from linkml_runtime.linkml_model.meta import ( - EnumDefinition, - PermissibleValue, - PvFormulaOptions, -) -from linkml_runtime.linkml_model.types import Boolean, Integer, String, Uriorcurie -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.dataclass_extensions_376 import ( - dataclasses_init_fn_with_kwargs, -) -from linkml_runtime.utils.enumerations import EnumDefinitionImpl -from linkml_runtime.utils.formatutils import camelcase, sfx, underscore -from linkml_runtime.utils.metamodelcore import ( - Bool, - URIorCURIE, - bnode, - empty_dict, - empty_list, -) from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.yamlutils import ( - YAMLRoot, - extended_float, - extended_int, - extended_str, -) +from linkml_runtime.utils.metamodelcore import empty_list, empty_dict, bnode +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str, extended_float, extended_int +from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs +from linkml_runtime.utils.formatutils import camelcase, underscore, sfx +from linkml_runtime.utils.enumerations import EnumDefinitionImpl from rdflib import Namespace, URIRef +from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.linkml_model.types import Boolean, Integer, String, Uriorcurie +from linkml_runtime.utils.metamodelcore import Bool, URIorCURIE metamodel_version = "1.7.0" version = "0.0.1" @@ -48,87 +32,82 @@ dataclasses._init_fn = dataclasses_init_fn_with_kwargs # Namespaces -IAO = CurieNamespace("IAO", "http://purl.obolibrary.org/obo/IAO_") -NCBITAXON = CurieNamespace("NCBITaxon", "http://purl.obolibrary.org/obo/NCBITaxon_") -NCIT = CurieNamespace("NCIT", "http://purl.obolibrary.org/obo/NCIT_") -OBI = CurieNamespace("OBI", "http://purl.obolibrary.org/obo/OBI_") -OIO = CurieNamespace("OIO", "http://www.geneontology.org/formats/oboInOwl#") -OMO = CurieNamespace("OMO", "http://purl.obolibrary.org/obo/OMO_") -RO = CurieNamespace("RO", "http://purl.obolibrary.org/obo/RO_") -BIOLINK = CurieNamespace("biolink", "https://w3id.org/biolink/vocab/") -DCE = CurieNamespace("dce", "http://example.org/UNKNOWN/dce/") -DCTERMS = CurieNamespace("dcterms", "http://purl.org/dc/terms/") -FOAF = CurieNamespace("foaf", "http://xmlns.com/foaf/0.1/") -LINKML = CurieNamespace("linkml", "https://w3id.org/linkml/") -OBO = CurieNamespace("obo", "http://purl.obolibrary.org/obo/") -OIO = CurieNamespace("oio", "http://www.geneontology.org/formats/oboInOwl#") -OMOSCHEMA = CurieNamespace("omoschema", "http://purl.obolibrary.org/obo/omo/schema/") -ORCID = CurieNamespace("orcid", "https://orcid.org/") -OWL = CurieNamespace("owl", "http://www.w3.org/2002/07/owl#") -PAV = CurieNamespace("pav", "http://purl.org/pav/") -PROTEGE = CurieNamespace("protege", "http://example.org/UNKNOWN/protege/") -PROV = CurieNamespace("prov", "http://www.w3.org/ns/prov-o#") -RDF = CurieNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") -RDFS = CurieNamespace("rdfs", "http://www.w3.org/2000/01/rdf-schema#") -SDO = CurieNamespace("sdo", "http://schema.org/") -SKOS = CurieNamespace("skos", "http://www.w3.org/2004/02/skos/core#") -XSD = CurieNamespace("xsd", "http://www.w3.org/2001/XMLSchema#") +IAO = CurieNamespace('IAO', 'http://purl.obolibrary.org/obo/IAO_') +NCBITAXON = CurieNamespace('NCBITaxon', 'http://purl.obolibrary.org/obo/NCBITaxon_') +NCIT = CurieNamespace('NCIT', 'http://purl.obolibrary.org/obo/NCIT_') +OBI = CurieNamespace('OBI', 'http://purl.obolibrary.org/obo/OBI_') +OIO = CurieNamespace('OIO', 'http://www.geneontology.org/formats/oboInOwl#') +OMO = CurieNamespace('OMO', 'http://purl.obolibrary.org/obo/OMO_') +RO = CurieNamespace('RO', 'http://purl.obolibrary.org/obo/RO_') +BIOLINK = CurieNamespace('biolink', 'https://w3id.org/biolink/vocab/') +DCE = CurieNamespace('dce', 'http://example.org/UNKNOWN/dce/') +DCTERMS = CurieNamespace('dcterms', 'http://purl.org/dc/terms/') +FOAF = CurieNamespace('foaf', 'http://xmlns.com/foaf/0.1/') +LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') +OBO = CurieNamespace('obo', 'http://purl.obolibrary.org/obo/') +OIO = CurieNamespace('oio', 'http://www.geneontology.org/formats/oboInOwl#') +OMOSCHEMA = CurieNamespace('omoschema', 'https://w3id.org/oak/ontology-metadata/') +ORCID = CurieNamespace('orcid', 'https://orcid.org/') +OWL = CurieNamespace('owl', 'http://www.w3.org/2002/07/owl#') +PAV = CurieNamespace('pav', 'http://purl.org/pav/') +PROTEGE = CurieNamespace('protege', 'http://example.org/UNKNOWN/protege/') +PROV = CurieNamespace('prov', 'http://www.w3.org/ns/prov-o#') +RDF = CurieNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#') +RDFS = CurieNamespace('rdfs', 'http://www.w3.org/2000/01/rdf-schema#') +SDO = CurieNamespace('sdo', 'http://schema.org/') +SKOS = CurieNamespace('skos', 'http://www.w3.org/2004/02/skos/core#') +XSD = CurieNamespace('xsd', 'http://www.w3.org/2001/XMLSchema#') DEFAULT_ = OMOSCHEMA # Types class IriType(Uriorcurie): - """An IRI""" - - type_class_uri = XSD.anyURI + """ An IRI """ + type_class_uri = XSD["anyURI"] type_class_curie = "xsd:anyURI" type_name = "iri type" type_model_uri = OMOSCHEMA.IriType class CURIELiteral(String): - """A string representation of a CURIE""" - - type_class_uri = XSD.string + """ A string representation of a CURIE """ + type_class_uri = XSD["string"] type_class_curie = "xsd:string" type_name = "CURIELiteral" type_model_uri = OMOSCHEMA.CURIELiteral class URLLiteral(String): - """A URL representation of a CURIE""" - - type_class_uri = XSD.string + """ A URL representation of a CURIE """ + type_class_uri = XSD["string"] type_class_curie = "xsd:string" type_name = "URLLiteral" type_model_uri = OMOSCHEMA.URLLiteral class TidyString(String): - type_class_uri = XSD.string + type_class_uri = XSD["string"] type_class_curie = "xsd:string" type_name = "tidy string" type_model_uri = OMOSCHEMA.TidyString -class LabelType(TidyString): - """A string that provides a human-readable name for an entity""" - - type_class_uri = XSD.string - type_class_curie = "xsd:string" - type_name = "label type" - type_model_uri = OMOSCHEMA.LabelType - - class NarrativeText(String): - """A string that provides a human-readable description of something""" - - type_class_uri = XSD.string + """ A string that provides a human-readable description of something """ + type_class_uri = XSD["string"] type_class_curie = "xsd:string" type_name = "narrative text" type_model_uri = OMOSCHEMA.NarrativeText +class LabelType(TidyString): + """ A string that provides a human-readable name for an entity """ + type_class_uri = XSD["string"] + type_class_curie = "xsd:string" + type_name = "label type" + type_model_uri = OMOSCHEMA.LabelType + + # Class references class NamedObjectId(URIorCURIE): pass @@ -184,15 +163,13 @@ class SubsetId(AnnotationPropertyId): Any = Any - class AnnotationPropertyMixin(YAMLRoot): """ Groups all annotation property bundles """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.AnnotationPropertyMixin + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["AnnotationPropertyMixin"] class_class_curie: ClassVar[str] = "omoschema:AnnotationPropertyMixin" class_name: ClassVar[str] = "AnnotationPropertyMixin" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.AnnotationPropertyMixin @@ -203,18 +180,15 @@ class HasMinimalMetadata(AnnotationPropertyMixin): """ Absolute minimum metadata model """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasMinimalMetadata + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasMinimalMetadata"] class_class_curie: ClassVar[str] = "omoschema:HasMinimalMetadata" class_name: ClassVar[str] = "HasMinimalMetadata" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasMinimalMetadata label: Optional[Union[str, LabelType]] = None - definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = ( - empty_list() - ) + definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.label is not None and not isinstance(self.label, LabelType): @@ -222,9 +196,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.definition, list): self.definition = [self.definition] if self.definition is not None else [] - self.definition = [ - v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition - ] + self.definition = [v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition] super().__post_init__(**kwargs) @@ -234,26 +206,17 @@ class HasSynonyms(AnnotationPropertyMixin): """ a mixin for a class whose members can have synonyms """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasSynonyms + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasSynonyms"] class_class_curie: ClassVar[str] = "omoschema:HasSynonyms" class_name: ClassVar[str] = "HasSynonyms" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasSynonyms - has_exact_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_narrow_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_broad_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_related_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) + has_exact_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_narrow_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_broad_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_related_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() alternative_term: Optional[Union[str, List[str]]] = empty_list() ISA_alternative_term: Optional[Union[str, List[str]]] = empty_list() IEDB_alternative_term: Optional[Union[str, List[str]]] = empty_list() @@ -262,74 +225,40 @@ class HasSynonyms(AnnotationPropertyMixin): def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.has_exact_synonym, list): - self.has_exact_synonym = ( - [self.has_exact_synonym] if self.has_exact_synonym is not None else [] - ) - self.has_exact_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_exact_synonym - ] + self.has_exact_synonym = [self.has_exact_synonym] if self.has_exact_synonym is not None else [] + self.has_exact_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_exact_synonym] if not isinstance(self.has_narrow_synonym, list): - self.has_narrow_synonym = ( - [self.has_narrow_synonym] if self.has_narrow_synonym is not None else [] - ) - self.has_narrow_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_narrow_synonym - ] + self.has_narrow_synonym = [self.has_narrow_synonym] if self.has_narrow_synonym is not None else [] + self.has_narrow_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_narrow_synonym] if not isinstance(self.has_broad_synonym, list): - self.has_broad_synonym = ( - [self.has_broad_synonym] if self.has_broad_synonym is not None else [] - ) - self.has_broad_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_broad_synonym - ] + self.has_broad_synonym = [self.has_broad_synonym] if self.has_broad_synonym is not None else [] + self.has_broad_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_broad_synonym] if not isinstance(self.has_related_synonym, list): - self.has_related_synonym = ( - [self.has_related_synonym] if self.has_related_synonym is not None else [] - ) - self.has_related_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_related_synonym - ] + self.has_related_synonym = [self.has_related_synonym] if self.has_related_synonym is not None else [] + self.has_related_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_related_synonym] if not isinstance(self.alternative_term, list): - self.alternative_term = ( - [self.alternative_term] if self.alternative_term is not None else [] - ) + self.alternative_term = [self.alternative_term] if self.alternative_term is not None else [] self.alternative_term = [v if isinstance(v, str) else str(v) for v in self.alternative_term] if not isinstance(self.ISA_alternative_term, list): - self.ISA_alternative_term = ( - [self.ISA_alternative_term] if self.ISA_alternative_term is not None else [] - ) - self.ISA_alternative_term = [ - v if isinstance(v, str) else str(v) for v in self.ISA_alternative_term - ] + self.ISA_alternative_term = [self.ISA_alternative_term] if self.ISA_alternative_term is not None else [] + self.ISA_alternative_term = [v if isinstance(v, str) else str(v) for v in self.ISA_alternative_term] if not isinstance(self.IEDB_alternative_term, list): - self.IEDB_alternative_term = ( - [self.IEDB_alternative_term] if self.IEDB_alternative_term is not None else [] - ) - self.IEDB_alternative_term = [ - v if isinstance(v, str) else str(v) for v in self.IEDB_alternative_term - ] + self.IEDB_alternative_term = [self.IEDB_alternative_term] if self.IEDB_alternative_term is not None else [] + self.IEDB_alternative_term = [v if isinstance(v, str) else str(v) for v in self.IEDB_alternative_term] if not isinstance(self.editor_preferred_term, list): - self.editor_preferred_term = ( - [self.editor_preferred_term] if self.editor_preferred_term is not None else [] - ) - self.editor_preferred_term = [ - v if isinstance(v, str) else str(v) for v in self.editor_preferred_term - ] + self.editor_preferred_term = [self.editor_preferred_term] if self.editor_preferred_term is not None else [] + self.editor_preferred_term = [v if isinstance(v, str) else str(v) for v in self.editor_preferred_term] if not isinstance(self.OBO_foundry_unique_label, list): - self.OBO_foundry_unique_label = ( - [self.OBO_foundry_unique_label] if self.OBO_foundry_unique_label is not None else [] - ) - self.OBO_foundry_unique_label = [ - v if isinstance(v, str) else str(v) for v in self.OBO_foundry_unique_label - ] + self.OBO_foundry_unique_label = [self.OBO_foundry_unique_label] if self.OBO_foundry_unique_label is not None else [] + self.OBO_foundry_unique_label = [v if isinstance(v, str) else str(v) for v in self.OBO_foundry_unique_label] super().__post_init__(**kwargs) @@ -338,7 +267,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class HasMappings(AnnotationPropertyMixin): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasMappings + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasMappings"] class_class_curie: ClassVar[str] = "omoschema:HasMappings" class_name: ClassVar[str] = "HasMappings" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasMappings @@ -347,43 +276,28 @@ class HasMappings(AnnotationPropertyMixin): closeMatch: Optional[Union[Union[dict, "Thing"], List[Union[dict, "Thing"]]]] = empty_list() exactMatch: Optional[Union[Union[dict, "Thing"], List[Union[dict, "Thing"]]]] = empty_list() narrowMatch: Optional[Union[Union[dict, "Thing"], List[Union[dict, "Thing"]]]] = empty_list() - database_cross_reference: Optional[ - Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]] - ] = empty_list() + database_cross_reference: Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.broadMatch, list): self.broadMatch = [self.broadMatch] if self.broadMatch is not None else [] - self.broadMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.broadMatch - ] + self.broadMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.broadMatch] if not isinstance(self.closeMatch, list): self.closeMatch = [self.closeMatch] if self.closeMatch is not None else [] - self.closeMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.closeMatch - ] + self.closeMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.closeMatch] if not isinstance(self.exactMatch, list): self.exactMatch = [self.exactMatch] if self.exactMatch is not None else [] - self.exactMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.exactMatch - ] + self.exactMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.exactMatch] if not isinstance(self.narrowMatch, list): self.narrowMatch = [self.narrowMatch] if self.narrowMatch is not None else [] - self.narrowMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.narrowMatch - ] + self.narrowMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.narrowMatch] if not isinstance(self.database_cross_reference, list): - self.database_cross_reference = ( - [self.database_cross_reference] if self.database_cross_reference is not None else [] - ) - self.database_cross_reference = [ - v if isinstance(v, CURIELiteral) else CURIELiteral(v) - for v in self.database_cross_reference - ] + self.database_cross_reference = [self.database_cross_reference] if self.database_cross_reference is not None else [] + self.database_cross_reference = [v if isinstance(v, CURIELiteral) else CURIELiteral(v) for v in self.database_cross_reference] super().__post_init__(**kwargs) @@ -392,7 +306,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class HasProvenance(AnnotationPropertyMixin): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasProvenance + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasProvenance"] class_class_curie: ClassVar[str] = "omoschema:HasProvenance" class_name: ClassVar[str] = "HasProvenance" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasProvenance @@ -404,15 +318,11 @@ class HasProvenance(AnnotationPropertyMixin): created: Optional[str] = None date: Optional[Union[str, List[str]]] = empty_list() isDefinedBy: Optional[Union[str, OntologyId]] = None - editor_note: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = ( - empty_list() - ) + editor_note: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = empty_list() term_editor: Optional[Union[str, List[str]]] = empty_list() definition_source: Optional[Union[str, List[str]]] = empty_list() ontology_term_requester: Optional[str] = None - imported_from: Optional[ - Union[Union[str, NamedIndividualId], List[Union[str, NamedIndividualId]]] - ] = empty_list() + imported_from: Optional[Union[Union[str, NamedIndividualId], List[Union[str, NamedIndividualId]]]] = empty_list() term_tracker_item: Optional[Union[str, List[str]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -443,41 +353,26 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.editor_note, list): self.editor_note = [self.editor_note] if self.editor_note is not None else [] - self.editor_note = [ - v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.editor_note - ] + self.editor_note = [v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.editor_note] if not isinstance(self.term_editor, list): self.term_editor = [self.term_editor] if self.term_editor is not None else [] self.term_editor = [v if isinstance(v, str) else str(v) for v in self.term_editor] if not isinstance(self.definition_source, list): - self.definition_source = ( - [self.definition_source] if self.definition_source is not None else [] - ) - self.definition_source = [ - v if isinstance(v, str) else str(v) for v in self.definition_source - ] - - if self.ontology_term_requester is not None and not isinstance( - self.ontology_term_requester, str - ): + self.definition_source = [self.definition_source] if self.definition_source is not None else [] + self.definition_source = [v if isinstance(v, str) else str(v) for v in self.definition_source] + + if self.ontology_term_requester is not None and not isinstance(self.ontology_term_requester, str): self.ontology_term_requester = str(self.ontology_term_requester) if not isinstance(self.imported_from, list): self.imported_from = [self.imported_from] if self.imported_from is not None else [] - self.imported_from = [ - v if isinstance(v, NamedIndividualId) else NamedIndividualId(v) - for v in self.imported_from - ] + self.imported_from = [v if isinstance(v, NamedIndividualId) else NamedIndividualId(v) for v in self.imported_from] if not isinstance(self.term_tracker_item, list): - self.term_tracker_item = ( - [self.term_tracker_item] if self.term_tracker_item is not None else [] - ) - self.term_tracker_item = [ - v if isinstance(v, str) else str(v) for v in self.term_tracker_item - ] + self.term_tracker_item = [self.term_tracker_item] if self.term_tracker_item is not None else [] + self.term_tracker_item = [v if isinstance(v, str) else str(v) for v in self.term_tracker_item] super().__post_init__(**kwargs) @@ -486,7 +381,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class HasLifeCycle(AnnotationPropertyMixin): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasLifeCycle + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasLifeCycle"] class_class_curie: ClassVar[str] = "omoschema:HasLifeCycle" class_name: ClassVar[str] = "HasLifeCycle" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasLifeCycle @@ -495,13 +390,9 @@ class HasLifeCycle(AnnotationPropertyMixin): has_obsolescence_reason: Optional[str] = None term_replaced_by: Optional[Union[dict, Any]] = None consider: Optional[Union[Union[dict, Any], List[Union[dict, Any]]]] = empty_list() - has_alternative_id: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = ( - empty_list() - ) + has_alternative_id: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list() excluded_from_QC_check: Optional[Union[dict, "Thing"]] = None - excluded_subClassOf: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = ( - empty_list() - ) + excluded_subClassOf: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() excluded_synonym: Optional[Union[str, List[str]]] = empty_list() should_conform_to: Optional[Union[dict, "Thing"]] = None @@ -509,36 +400,22 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.deprecated is not None and not isinstance(self.deprecated, Bool): self.deprecated = Bool(self.deprecated) - if self.has_obsolescence_reason is not None and not isinstance( - self.has_obsolescence_reason, str - ): + if self.has_obsolescence_reason is not None and not isinstance(self.has_obsolescence_reason, str): self.has_obsolescence_reason = str(self.has_obsolescence_reason) if not isinstance(self.has_alternative_id, list): - self.has_alternative_id = ( - [self.has_alternative_id] if self.has_alternative_id is not None else [] - ) - self.has_alternative_id = [ - v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.has_alternative_id - ] - - if self.excluded_from_QC_check is not None and not isinstance( - self.excluded_from_QC_check, Thing - ): + self.has_alternative_id = [self.has_alternative_id] if self.has_alternative_id is not None else [] + self.has_alternative_id = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.has_alternative_id] + + if self.excluded_from_QC_check is not None and not isinstance(self.excluded_from_QC_check, Thing): self.excluded_from_QC_check = Thing(**as_dict(self.excluded_from_QC_check)) if not isinstance(self.excluded_subClassOf, list): - self.excluded_subClassOf = ( - [self.excluded_subClassOf] if self.excluded_subClassOf is not None else [] - ) - self.excluded_subClassOf = [ - v if isinstance(v, ClassId) else ClassId(v) for v in self.excluded_subClassOf - ] + self.excluded_subClassOf = [self.excluded_subClassOf] if self.excluded_subClassOf is not None else [] + self.excluded_subClassOf = [v if isinstance(v, ClassId) else ClassId(v) for v in self.excluded_subClassOf] if not isinstance(self.excluded_synonym, list): - self.excluded_synonym = ( - [self.excluded_synonym] if self.excluded_synonym is not None else [] - ) + self.excluded_synonym = [self.excluded_synonym] if self.excluded_synonym is not None else [] self.excluded_synonym = [v if isinstance(v, str) else str(v) for v in self.excluded_synonym] if self.should_conform_to is not None and not isinstance(self.should_conform_to, Thing): @@ -551,7 +428,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class HasCategory(AnnotationPropertyMixin): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasCategory + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasCategory"] class_class_curie: ClassVar[str] = "omoschema:HasCategory" class_name: ClassVar[str] = "HasCategory" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasCategory @@ -563,12 +440,8 @@ class HasCategory(AnnotationPropertyMixin): def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.has_obo_namespace, list): - self.has_obo_namespace = ( - [self.has_obo_namespace] if self.has_obo_namespace is not None else [] - ) - self.has_obo_namespace = [ - v if isinstance(v, str) else str(v) for v in self.has_obo_namespace - ] + self.has_obo_namespace = [self.has_obo_namespace] if self.has_obo_namespace is not None else [] + self.has_obo_namespace = [v if isinstance(v, str) else str(v) for v in self.has_obo_namespace] if self.category is not None and not isinstance(self.category, str): self.category = str(self.category) @@ -579,9 +452,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.conformsTo, list): self.conformsTo = [self.conformsTo] if self.conformsTo is not None else [] - self.conformsTo = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.conformsTo - ] + self.conformsTo = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.conformsTo] super().__post_init__(**kwargs) @@ -590,7 +461,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class HasUserInformation(AnnotationPropertyMixin): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.HasUserInformation + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["HasUserInformation"] class_class_curie: ClassVar[str] = "omoschema:HasUserInformation" class_name: ClassVar[str] = "HasUserInformation" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.HasUserInformation @@ -617,9 +488,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.image = Thing(**as_dict(self.image)) if not isinstance(self.example_of_usage, list): - self.example_of_usage = ( - [self.example_of_usage] if self.example_of_usage is not None else [] - ) + self.example_of_usage = [self.example_of_usage] if self.example_of_usage is not None else [] self.example_of_usage = [v if isinstance(v, str) else str(v) for v in self.example_of_usage] if not isinstance(self.curator_note, list): @@ -644,7 +513,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class Thing(YAMLRoot): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.Thing + class_class_uri: ClassVar[URIRef] = OWL["Thing"] class_class_curie: ClassVar[str] = "owl:Thing" class_name: ClassVar[str] = "Thing" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Thing @@ -659,15 +528,39 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) + def __new__(cls, *args, **kwargs): + + type_designator = "type" + if not type_designator in kwargs: + return super().__new__(cls,*args,**kwargs) + else: + type_designator_value = kwargs[type_designator] + target_cls = cls._class_for("class_class_curie", type_designator_value) + + + if target_cls is None: + target_cls = cls._class_for("class_class_uri", type_designator_value) + + + if target_cls is None: + target_cls = cls._class_for("class_model_uri", type_designator_value) + + + if target_cls is None: + raise ValueError(f"Wrong type designator value: class {cls.__name__} " + f"has no subclass with ['class_class_curie', 'class_class_uri', 'class_model_uri']='{kwargs[type_designator]}'") + return super().__new__(target_cls,*args,**kwargs) + + + @dataclass class NamedObject(Thing): """ Anything with an IRI """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.NamedObject + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["NamedObject"] class_class_curie: ClassVar[str] = "omoschema:NamedObject" class_name: ClassVar[str] = "NamedObject" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.NamedObject @@ -681,6 +574,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = NamedObjectId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -688,10 +584,9 @@ class Ontology(NamedObject): """ An OWL ontology """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.Ontology + class_class_uri: ClassVar[URIRef] = OWL["Ontology"] class_class_curie: ClassVar[str] = "owl:Ontology" class_name: ClassVar[str] = "Ontology" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Ontology @@ -701,9 +596,7 @@ class Ontology(NamedObject): license: Union[dict, Thing] = None versionIRI: Union[str, URIorCURIE] = None versionInfo: str = None - has_ontology_root_term: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = ( - empty_list() - ) + has_ontology_root_term: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() source: Optional[Union[str, List[str]]] = empty_list() comment: Optional[Union[str, List[str]]] = empty_list() creator: Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]] = empty_list() @@ -737,12 +630,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.versionInfo = str(self.versionInfo) if not isinstance(self.has_ontology_root_term, list): - self.has_ontology_root_term = ( - [self.has_ontology_root_term] if self.has_ontology_root_term is not None else [] - ) - self.has_ontology_root_term = [ - v if isinstance(v, ClassId) else ClassId(v) for v in self.has_ontology_root_term - ] + self.has_ontology_root_term = [self.has_ontology_root_term] if self.has_ontology_root_term is not None else [] + self.has_ontology_root_term = [v if isinstance(v, ClassId) else ClassId(v) for v in self.has_ontology_root_term] if not isinstance(self.source, list): self.source = [self.source] if self.source is not None else [] @@ -763,6 +652,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.imports = str(self.imports) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -770,27 +662,18 @@ class Term(NamedObject): """ A NamedThing that includes classes, properties, but not ontologies """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.Term + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["Term"] class_class_curie: ClassVar[str] = "omoschema:Term" class_name: ClassVar[str] = "Term" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Term id: Union[str, TermId] = None - has_exact_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_narrow_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_broad_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_related_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) + has_exact_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_narrow_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_broad_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_related_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() alternative_term: Optional[Union[str, List[str]]] = empty_list() ISA_alternative_term: Optional[Union[str, List[str]]] = empty_list() IEDB_alternative_term: Optional[Union[str, List[str]]] = empty_list() @@ -800,13 +683,9 @@ class Term(NamedObject): has_obsolescence_reason: Optional[str] = None term_replaced_by: Optional[Union[dict, Any]] = None consider: Optional[Union[Union[dict, Any], List[Union[dict, Any]]]] = empty_list() - has_alternative_id: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = ( - empty_list() - ) + has_alternative_id: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list() excluded_from_QC_check: Optional[Union[dict, Thing]] = None - excluded_subClassOf: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = ( - empty_list() - ) + excluded_subClassOf: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() excluded_synonym: Optional[Union[str, List[str]]] = empty_list() should_conform_to: Optional[Union[dict, Thing]] = None created_by: Optional[str] = None @@ -816,23 +695,17 @@ class Term(NamedObject): created: Optional[str] = None date: Optional[Union[str, List[str]]] = empty_list() isDefinedBy: Optional[Union[str, OntologyId]] = None - editor_note: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = ( - empty_list() - ) + editor_note: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = empty_list() term_editor: Optional[Union[str, List[str]]] = empty_list() definition_source: Optional[Union[str, List[str]]] = empty_list() ontology_term_requester: Optional[str] = None - imported_from: Optional[ - Union[Union[str, NamedIndividualId], List[Union[str, NamedIndividualId]]] - ] = empty_list() + imported_from: Optional[Union[Union[str, NamedIndividualId], List[Union[str, NamedIndividualId]]]] = empty_list() term_tracker_item: Optional[Union[str, List[str]]] = empty_list() broadMatch: Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]] = empty_list() closeMatch: Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]] = empty_list() exactMatch: Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]] = empty_list() narrowMatch: Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]] = empty_list() - database_cross_reference: Optional[ - Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]] - ] = empty_list() + database_cross_reference: Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]] = empty_list() has_obo_namespace: Optional[Union[str, List[str]]] = empty_list() category: Optional[str] = None in_subset: Optional[Union[Union[str, SubsetId], List[Union[str, SubsetId]]]] = empty_list() @@ -846,114 +719,64 @@ class Term(NamedObject): depicted_by: Optional[Union[Union[str, ImageId], List[Union[str, ImageId]]]] = empty_list() page: Optional[Union[str, List[str]]] = empty_list() label: Optional[Union[str, LabelType]] = None - definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = ( - empty_list() - ) + definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.has_exact_synonym, list): - self.has_exact_synonym = ( - [self.has_exact_synonym] if self.has_exact_synonym is not None else [] - ) - self.has_exact_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_exact_synonym - ] + self.has_exact_synonym = [self.has_exact_synonym] if self.has_exact_synonym is not None else [] + self.has_exact_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_exact_synonym] if not isinstance(self.has_narrow_synonym, list): - self.has_narrow_synonym = ( - [self.has_narrow_synonym] if self.has_narrow_synonym is not None else [] - ) - self.has_narrow_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_narrow_synonym - ] + self.has_narrow_synonym = [self.has_narrow_synonym] if self.has_narrow_synonym is not None else [] + self.has_narrow_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_narrow_synonym] if not isinstance(self.has_broad_synonym, list): - self.has_broad_synonym = ( - [self.has_broad_synonym] if self.has_broad_synonym is not None else [] - ) - self.has_broad_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_broad_synonym - ] + self.has_broad_synonym = [self.has_broad_synonym] if self.has_broad_synonym is not None else [] + self.has_broad_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_broad_synonym] if not isinstance(self.has_related_synonym, list): - self.has_related_synonym = ( - [self.has_related_synonym] if self.has_related_synonym is not None else [] - ) - self.has_related_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_related_synonym - ] + self.has_related_synonym = [self.has_related_synonym] if self.has_related_synonym is not None else [] + self.has_related_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_related_synonym] if not isinstance(self.alternative_term, list): - self.alternative_term = ( - [self.alternative_term] if self.alternative_term is not None else [] - ) + self.alternative_term = [self.alternative_term] if self.alternative_term is not None else [] self.alternative_term = [v if isinstance(v, str) else str(v) for v in self.alternative_term] if not isinstance(self.ISA_alternative_term, list): - self.ISA_alternative_term = ( - [self.ISA_alternative_term] if self.ISA_alternative_term is not None else [] - ) - self.ISA_alternative_term = [ - v if isinstance(v, str) else str(v) for v in self.ISA_alternative_term - ] + self.ISA_alternative_term = [self.ISA_alternative_term] if self.ISA_alternative_term is not None else [] + self.ISA_alternative_term = [v if isinstance(v, str) else str(v) for v in self.ISA_alternative_term] if not isinstance(self.IEDB_alternative_term, list): - self.IEDB_alternative_term = ( - [self.IEDB_alternative_term] if self.IEDB_alternative_term is not None else [] - ) - self.IEDB_alternative_term = [ - v if isinstance(v, str) else str(v) for v in self.IEDB_alternative_term - ] + self.IEDB_alternative_term = [self.IEDB_alternative_term] if self.IEDB_alternative_term is not None else [] + self.IEDB_alternative_term = [v if isinstance(v, str) else str(v) for v in self.IEDB_alternative_term] if not isinstance(self.editor_preferred_term, list): - self.editor_preferred_term = ( - [self.editor_preferred_term] if self.editor_preferred_term is not None else [] - ) - self.editor_preferred_term = [ - v if isinstance(v, str) else str(v) for v in self.editor_preferred_term - ] + self.editor_preferred_term = [self.editor_preferred_term] if self.editor_preferred_term is not None else [] + self.editor_preferred_term = [v if isinstance(v, str) else str(v) for v in self.editor_preferred_term] if not isinstance(self.OBO_foundry_unique_label, list): - self.OBO_foundry_unique_label = ( - [self.OBO_foundry_unique_label] if self.OBO_foundry_unique_label is not None else [] - ) - self.OBO_foundry_unique_label = [ - v if isinstance(v, str) else str(v) for v in self.OBO_foundry_unique_label - ] + self.OBO_foundry_unique_label = [self.OBO_foundry_unique_label] if self.OBO_foundry_unique_label is not None else [] + self.OBO_foundry_unique_label = [v if isinstance(v, str) else str(v) for v in self.OBO_foundry_unique_label] if self.deprecated is not None and not isinstance(self.deprecated, Bool): self.deprecated = Bool(self.deprecated) - if self.has_obsolescence_reason is not None and not isinstance( - self.has_obsolescence_reason, str - ): + if self.has_obsolescence_reason is not None and not isinstance(self.has_obsolescence_reason, str): self.has_obsolescence_reason = str(self.has_obsolescence_reason) if not isinstance(self.has_alternative_id, list): - self.has_alternative_id = ( - [self.has_alternative_id] if self.has_alternative_id is not None else [] - ) - self.has_alternative_id = [ - v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.has_alternative_id - ] - - if self.excluded_from_QC_check is not None and not isinstance( - self.excluded_from_QC_check, Thing - ): + self.has_alternative_id = [self.has_alternative_id] if self.has_alternative_id is not None else [] + self.has_alternative_id = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.has_alternative_id] + + if self.excluded_from_QC_check is not None and not isinstance(self.excluded_from_QC_check, Thing): self.excluded_from_QC_check = Thing(**as_dict(self.excluded_from_QC_check)) if not isinstance(self.excluded_subClassOf, list): - self.excluded_subClassOf = ( - [self.excluded_subClassOf] if self.excluded_subClassOf is not None else [] - ) - self.excluded_subClassOf = [ - v if isinstance(v, ClassId) else ClassId(v) for v in self.excluded_subClassOf - ] + self.excluded_subClassOf = [self.excluded_subClassOf] if self.excluded_subClassOf is not None else [] + self.excluded_subClassOf = [v if isinstance(v, ClassId) else ClassId(v) for v in self.excluded_subClassOf] if not isinstance(self.excluded_synonym, list): - self.excluded_synonym = ( - [self.excluded_synonym] if self.excluded_synonym is not None else [] - ) + self.excluded_synonym = [self.excluded_synonym] if self.excluded_synonym is not None else [] self.excluded_synonym = [v if isinstance(v, str) else str(v) for v in self.excluded_synonym] if self.should_conform_to is not None and not isinstance(self.should_conform_to, Thing): @@ -986,82 +809,50 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.editor_note, list): self.editor_note = [self.editor_note] if self.editor_note is not None else [] - self.editor_note = [ - v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.editor_note - ] + self.editor_note = [v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.editor_note] if not isinstance(self.term_editor, list): self.term_editor = [self.term_editor] if self.term_editor is not None else [] self.term_editor = [v if isinstance(v, str) else str(v) for v in self.term_editor] if not isinstance(self.definition_source, list): - self.definition_source = ( - [self.definition_source] if self.definition_source is not None else [] - ) - self.definition_source = [ - v if isinstance(v, str) else str(v) for v in self.definition_source - ] - - if self.ontology_term_requester is not None and not isinstance( - self.ontology_term_requester, str - ): + self.definition_source = [self.definition_source] if self.definition_source is not None else [] + self.definition_source = [v if isinstance(v, str) else str(v) for v in self.definition_source] + + if self.ontology_term_requester is not None and not isinstance(self.ontology_term_requester, str): self.ontology_term_requester = str(self.ontology_term_requester) if not isinstance(self.imported_from, list): self.imported_from = [self.imported_from] if self.imported_from is not None else [] - self.imported_from = [ - v if isinstance(v, NamedIndividualId) else NamedIndividualId(v) - for v in self.imported_from - ] + self.imported_from = [v if isinstance(v, NamedIndividualId) else NamedIndividualId(v) for v in self.imported_from] if not isinstance(self.term_tracker_item, list): - self.term_tracker_item = ( - [self.term_tracker_item] if self.term_tracker_item is not None else [] - ) - self.term_tracker_item = [ - v if isinstance(v, str) else str(v) for v in self.term_tracker_item - ] + self.term_tracker_item = [self.term_tracker_item] if self.term_tracker_item is not None else [] + self.term_tracker_item = [v if isinstance(v, str) else str(v) for v in self.term_tracker_item] if not isinstance(self.broadMatch, list): self.broadMatch = [self.broadMatch] if self.broadMatch is not None else [] - self.broadMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.broadMatch - ] + self.broadMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.broadMatch] if not isinstance(self.closeMatch, list): self.closeMatch = [self.closeMatch] if self.closeMatch is not None else [] - self.closeMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.closeMatch - ] + self.closeMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.closeMatch] if not isinstance(self.exactMatch, list): self.exactMatch = [self.exactMatch] if self.exactMatch is not None else [] - self.exactMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.exactMatch - ] + self.exactMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.exactMatch] if not isinstance(self.narrowMatch, list): self.narrowMatch = [self.narrowMatch] if self.narrowMatch is not None else [] - self.narrowMatch = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.narrowMatch - ] + self.narrowMatch = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.narrowMatch] if not isinstance(self.database_cross_reference, list): - self.database_cross_reference = ( - [self.database_cross_reference] if self.database_cross_reference is not None else [] - ) - self.database_cross_reference = [ - v if isinstance(v, CURIELiteral) else CURIELiteral(v) - for v in self.database_cross_reference - ] + self.database_cross_reference = [self.database_cross_reference] if self.database_cross_reference is not None else [] + self.database_cross_reference = [v if isinstance(v, CURIELiteral) else CURIELiteral(v) for v in self.database_cross_reference] if not isinstance(self.has_obo_namespace, list): - self.has_obo_namespace = ( - [self.has_obo_namespace] if self.has_obo_namespace is not None else [] - ) - self.has_obo_namespace = [ - v if isinstance(v, str) else str(v) for v in self.has_obo_namespace - ] + self.has_obo_namespace = [self.has_obo_namespace] if self.has_obo_namespace is not None else [] + self.has_obo_namespace = [v if isinstance(v, str) else str(v) for v in self.has_obo_namespace] if self.category is not None and not isinstance(self.category, str): self.category = str(self.category) @@ -1072,9 +863,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.conformsTo, list): self.conformsTo = [self.conformsTo] if self.conformsTo is not None else [] - self.conformsTo = [ - v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.conformsTo - ] + self.conformsTo = [v if isinstance(v, Thing) else Thing(**as_dict(v)) for v in self.conformsTo] if not isinstance(self.comment, list): self.comment = [self.comment] if self.comment is not None else [] @@ -1088,9 +877,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.image = Thing(**as_dict(self.image)) if not isinstance(self.example_of_usage, list): - self.example_of_usage = ( - [self.example_of_usage] if self.example_of_usage is not None else [] - ) + self.example_of_usage = [self.example_of_usage] if self.example_of_usage is not None else [] self.example_of_usage = [v if isinstance(v, str) else str(v) for v in self.example_of_usage] if not isinstance(self.curator_note, list): @@ -1113,18 +900,19 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.definition, list): self.definition = [self.definition] if self.definition is not None else [] - self.definition = [ - v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition - ] + self.definition = [v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition] super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass class Class(Term): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.Class + class_class_uri: ClassVar[URIRef] = OWL["Class"] class_class_curie: ClassVar[str] = "owl:Class" class_name: ClassVar[str] = "Class" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Class @@ -1134,18 +922,14 @@ class Class(Term): never_in_taxon: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() disconnected_from: Optional[Union[str, ClassId]] = None has_rank: Optional[Union[dict, Thing]] = None - definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = ( - empty_list() - ) + definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = empty_list() broadMatch: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() exactMatch: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() narrowMatch: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() closeMatch: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() subClassOf: Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]] = empty_list() disjointWith: Optional[Union[str, List[str]]] = empty_list() - equivalentClass: Optional[ - Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]] - ] = empty_list() + equivalentClass: Optional[Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]]] = empty_list() intersectionOf: Optional[Union[dict, "ClassExpression"]] = None cardinality: Optional[str] = None complementOf: Optional[str] = None @@ -1165,9 +949,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.never_in_taxon, list): self.never_in_taxon = [self.never_in_taxon] if self.never_in_taxon is not None else [] - self.never_in_taxon = [ - v if isinstance(v, ClassId) else ClassId(v) for v in self.never_in_taxon - ] + self.never_in_taxon = [v if isinstance(v, ClassId) else ClassId(v) for v in self.never_in_taxon] if self.disconnected_from is not None and not isinstance(self.disconnected_from, ClassId): self.disconnected_from = ClassId(self.disconnected_from) @@ -1177,9 +959,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.definition, list): self.definition = [self.definition] if self.definition is not None else [] - self.definition = [ - v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition - ] + self.definition = [v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition] if not isinstance(self.broadMatch, list): self.broadMatch = [self.broadMatch] if self.broadMatch is not None else [] @@ -1206,13 +986,8 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.disjointWith = [v if isinstance(v, str) else str(v) for v in self.disjointWith] if not isinstance(self.equivalentClass, list): - self.equivalentClass = ( - [self.equivalentClass] if self.equivalentClass is not None else [] - ) - self.equivalentClass = [ - v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) - for v in self.equivalentClass - ] + self.equivalentClass = [self.equivalentClass] if self.equivalentClass is not None else [] + self.equivalentClass = [v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) for v in self.equivalentClass] if self.intersectionOf is not None and not isinstance(self.intersectionOf, ClassExpression): self.intersectionOf = ClassExpression(**as_dict(self.intersectionOf)) @@ -1230,13 +1005,16 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.unionOf = str(self.unionOf) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass class Property(Term): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = RDF.Property + class_class_uri: ClassVar[URIRef] = RDF["Property"] class_class_curie: ClassVar[str] = "rdf:Property" class_name: ClassVar[str] = "Property" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Property @@ -1247,14 +1025,10 @@ class Property(Term): is_class_level: Optional[Union[bool, Bool]] = None is_metadata_tag: Optional[Union[bool, Bool]] = None label: Optional[Union[str, LabelType]] = None - definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = ( - empty_list() - ) + definition: Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]] = empty_list() broadMatch: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = empty_list() exactMatch: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = empty_list() - narrowMatch: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = ( - empty_list() - ) + narrowMatch: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = empty_list() closeMatch: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = empty_list() subClassOf: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = empty_list() @@ -1278,41 +1052,32 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.definition, list): self.definition = [self.definition] if self.definition is not None else [] - self.definition = [ - v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition - ] + self.definition = [v if isinstance(v, NarrativeText) else NarrativeText(v) for v in self.definition] if not isinstance(self.broadMatch, list): self.broadMatch = [self.broadMatch] if self.broadMatch is not None else [] - self.broadMatch = [ - v if isinstance(v, PropertyId) else PropertyId(v) for v in self.broadMatch - ] + self.broadMatch = [v if isinstance(v, PropertyId) else PropertyId(v) for v in self.broadMatch] if not isinstance(self.exactMatch, list): self.exactMatch = [self.exactMatch] if self.exactMatch is not None else [] - self.exactMatch = [ - v if isinstance(v, PropertyId) else PropertyId(v) for v in self.exactMatch - ] + self.exactMatch = [v if isinstance(v, PropertyId) else PropertyId(v) for v in self.exactMatch] if not isinstance(self.narrowMatch, list): self.narrowMatch = [self.narrowMatch] if self.narrowMatch is not None else [] - self.narrowMatch = [ - v if isinstance(v, PropertyId) else PropertyId(v) for v in self.narrowMatch - ] + self.narrowMatch = [v if isinstance(v, PropertyId) else PropertyId(v) for v in self.narrowMatch] if not isinstance(self.closeMatch, list): self.closeMatch = [self.closeMatch] if self.closeMatch is not None else [] - self.closeMatch = [ - v if isinstance(v, PropertyId) else PropertyId(v) for v in self.closeMatch - ] + self.closeMatch = [v if isinstance(v, PropertyId) else PropertyId(v) for v in self.closeMatch] if not isinstance(self.subClassOf, list): self.subClassOf = [self.subClassOf] if self.subClassOf is not None else [] - self.subClassOf = [ - v if isinstance(v, PropertyId) else PropertyId(v) for v in self.subClassOf - ] + self.subClassOf = [v if isinstance(v, PropertyId) else PropertyId(v) for v in self.subClassOf] super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1320,10 +1085,9 @@ class AnnotationProperty(Property): """ A property used in non-logical axioms """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.AnnotationProperty + class_class_uri: ClassVar[URIRef] = OWL["AnnotationProperty"] class_class_curie: ClassVar[str] = "owl:AnnotationProperty" class_name: ClassVar[str] = "AnnotationProperty" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.AnnotationProperty @@ -1342,6 +1106,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.shorthand = [v if isinstance(v, str) else str(v) for v in self.shorthand] super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1349,10 +1116,9 @@ class ObjectProperty(Property): """ A property that connects two objects in logical axioms """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.ObjectProperty + class_class_uri: ClassVar[URIRef] = OWL["ObjectProperty"] class_class_curie: ClassVar[str] = "owl:ObjectProperty" class_name: ClassVar[str] = "ObjectProperty" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.ObjectProperty @@ -1362,9 +1128,7 @@ class ObjectProperty(Property): is_cyclic: Optional[Union[bool, Bool]] = None is_transitive: Optional[Union[bool, Bool]] = None shorthand: Optional[Union[str, List[str]]] = empty_list() - equivalentProperty: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = ( - empty_list() - ) + equivalentProperty: Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]] = empty_list() inverseOf: Optional[Union[str, PropertyId]] = None propertyChainAxiom: Optional[Union[str, List[str]]] = empty_list() disjointWith: Optional[Union[str, List[str]]] = empty_list() @@ -1375,9 +1139,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.id, ObjectPropertyId): self.id = ObjectPropertyId(self.id) - if self.temporal_interpretation is not None and not isinstance( - self.temporal_interpretation, NamedIndividualId - ): + if self.temporal_interpretation is not None and not isinstance(self.temporal_interpretation, NamedIndividualId): self.temporal_interpretation = NamedIndividualId(self.temporal_interpretation) if self.is_cyclic is not None and not isinstance(self.is_cyclic, Bool): @@ -1391,29 +1153,24 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.shorthand = [v if isinstance(v, str) else str(v) for v in self.shorthand] if not isinstance(self.equivalentProperty, list): - self.equivalentProperty = ( - [self.equivalentProperty] if self.equivalentProperty is not None else [] - ) - self.equivalentProperty = [ - v if isinstance(v, PropertyId) else PropertyId(v) for v in self.equivalentProperty - ] + self.equivalentProperty = [self.equivalentProperty] if self.equivalentProperty is not None else [] + self.equivalentProperty = [v if isinstance(v, PropertyId) else PropertyId(v) for v in self.equivalentProperty] if self.inverseOf is not None and not isinstance(self.inverseOf, PropertyId): self.inverseOf = PropertyId(self.inverseOf) if not isinstance(self.propertyChainAxiom, list): - self.propertyChainAxiom = ( - [self.propertyChainAxiom] if self.propertyChainAxiom is not None else [] - ) - self.propertyChainAxiom = [ - v if isinstance(v, str) else str(v) for v in self.propertyChainAxiom - ] + self.propertyChainAxiom = [self.propertyChainAxiom] if self.propertyChainAxiom is not None else [] + self.propertyChainAxiom = [v if isinstance(v, str) else str(v) for v in self.propertyChainAxiom] if not isinstance(self.disjointWith, list): self.disjointWith = [self.disjointWith] if self.disjointWith is not None else [] self.disjointWith = [v if isinstance(v, str) else str(v) for v in self.disjointWith] super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1421,10 +1178,9 @@ class TransitiveProperty(ObjectProperty): """ An ObjectProperty with the property of transitivity """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.TransitiveProperty + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["TransitiveProperty"] class_class_curie: ClassVar[str] = "omoschema:TransitiveProperty" class_name: ClassVar[str] = "TransitiveProperty" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.TransitiveProperty @@ -1438,6 +1194,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = TransitivePropertyId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1445,10 +1204,9 @@ class NamedIndividual(Term): """ An instance that has a IRI """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.NamedIndividual + class_class_uri: ClassVar[URIRef] = OWL["NamedIndividual"] class_class_curie: ClassVar[str] = "owl:NamedIndividual" class_name: ClassVar[str] = "NamedIndividual" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.NamedIndividual @@ -1462,6 +1220,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = NamedIndividualId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1469,7 +1230,6 @@ class HomoSapiens(NamedIndividual): """ An individual human being """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = NCBITAXON["9606"] @@ -1486,13 +1246,16 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = HomoSapiensId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass class Agent(NamedIndividual): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = PROV.Agent + class_class_uri: ClassVar[URIRef] = PROV["Agent"] class_class_curie: ClassVar[str] = "prov:Agent" class_name: ClassVar[str] = "Agent" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Agent @@ -1506,6 +1269,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = AgentId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1526,6 +1292,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = ImageId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] @dataclass @@ -1533,10 +1302,9 @@ class Annotation(YAMLRoot): """ A reified property-object pair """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.Annotation + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["Annotation"] class_class_curie: ClassVar[str] = "omoschema:Annotation" class_name: ClassVar[str] = "Annotation" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Annotation @@ -1559,10 +1327,9 @@ class Axiom(YAMLRoot): """ A logical or non-logical statement """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.Axiom + class_class_uri: ClassVar[URIRef] = OWL["Axiom"] class_class_curie: ClassVar[str] = "owl:Axiom" class_name: ClassVar[str] = "Axiom" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Axiom @@ -1570,9 +1337,7 @@ class Axiom(YAMLRoot): annotatedProperty: Optional[Union[str, AnnotationPropertyId]] = None annotatedSource: Optional[Union[str, NamedObjectId]] = None annotatedTarget: Optional[Union[dict, Any]] = None - annotations: Optional[Union[Union[dict, Annotation], List[Union[dict, Annotation]]]] = ( - empty_list() - ) + annotations: Optional[Union[Union[dict, Annotation], List[Union[dict, Annotation]]]] = empty_list() source: Optional[Union[str, List[str]]] = empty_list() is_inferred: Optional[Union[bool, Bool]] = None notes: Optional[Union[str, List[str]]] = empty_list() @@ -1584,23 +1349,15 @@ class Axiom(YAMLRoot): date_retrieved: Optional[str] = None evidence: Optional[str] = None external_ontology: Optional[Union[str, List[str]]] = empty_list() - database_cross_reference: Optional[ - Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]] - ] = empty_list() - has_exact_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = ( - empty_list() - ) - has_synonym_type: Optional[ - Union[Union[str, AnnotationPropertyId], List[Union[str, AnnotationPropertyId]]] - ] = empty_list() + database_cross_reference: Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]] = empty_list() + has_exact_synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list() + has_synonym_type: Optional[Union[Union[str, AnnotationPropertyId], List[Union[str, AnnotationPropertyId]]]] = empty_list() comment: Optional[Union[str, List[str]]] = empty_list() label: Optional[Union[str, LabelType]] = None seeAlso: Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.annotatedProperty is not None and not isinstance( - self.annotatedProperty, AnnotationPropertyId - ): + if self.annotatedProperty is not None and not isinstance(self.annotatedProperty, AnnotationPropertyId): self.annotatedProperty = AnnotationPropertyId(self.annotatedProperty) if self.annotatedSource is not None and not isinstance(self.annotatedSource, NamedObjectId): @@ -1608,9 +1365,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.annotations, list): self.annotations = [self.annotations] if self.annotations is not None else [] - self.annotations = [ - v if isinstance(v, Annotation) else Annotation(**as_dict(v)) for v in self.annotations - ] + self.annotations = [v if isinstance(v, Annotation) else Annotation(**as_dict(v)) for v in self.annotations] if not isinstance(self.source, list): self.source = [self.source] if self.source is not None else [] @@ -1629,20 +1384,11 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.has_axiom_label is not None and not isinstance(self.has_axiom_label, Thing): self.has_axiom_label = Thing(**as_dict(self.has_axiom_label)) - if self.is_a_defining_property_chain_axiom is not None and not isinstance( - self.is_a_defining_property_chain_axiom, str - ): + if self.is_a_defining_property_chain_axiom is not None and not isinstance(self.is_a_defining_property_chain_axiom, str): self.is_a_defining_property_chain_axiom = str(self.is_a_defining_property_chain_axiom) - if ( - self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive is not None - and not isinstance( - self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive, str - ) - ): - self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive = str( - self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive - ) + if self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive is not None and not isinstance(self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive, str): + self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive = str(self.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive) if self.created_by is not None and not isinstance(self.created_by, str): self.created_by = str(self.created_by) @@ -1654,38 +1400,20 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.evidence = str(self.evidence) if not isinstance(self.external_ontology, list): - self.external_ontology = ( - [self.external_ontology] if self.external_ontology is not None else [] - ) - self.external_ontology = [ - v if isinstance(v, str) else str(v) for v in self.external_ontology - ] + self.external_ontology = [self.external_ontology] if self.external_ontology is not None else [] + self.external_ontology = [v if isinstance(v, str) else str(v) for v in self.external_ontology] if not isinstance(self.database_cross_reference, list): - self.database_cross_reference = ( - [self.database_cross_reference] if self.database_cross_reference is not None else [] - ) - self.database_cross_reference = [ - v if isinstance(v, CURIELiteral) else CURIELiteral(v) - for v in self.database_cross_reference - ] + self.database_cross_reference = [self.database_cross_reference] if self.database_cross_reference is not None else [] + self.database_cross_reference = [v if isinstance(v, CURIELiteral) else CURIELiteral(v) for v in self.database_cross_reference] if not isinstance(self.has_exact_synonym, list): - self.has_exact_synonym = ( - [self.has_exact_synonym] if self.has_exact_synonym is not None else [] - ) - self.has_exact_synonym = [ - v if isinstance(v, LabelType) else LabelType(v) for v in self.has_exact_synonym - ] + self.has_exact_synonym = [self.has_exact_synonym] if self.has_exact_synonym is not None else [] + self.has_exact_synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.has_exact_synonym] if not isinstance(self.has_synonym_type, list): - self.has_synonym_type = ( - [self.has_synonym_type] if self.has_synonym_type is not None else [] - ) - self.has_synonym_type = [ - v if isinstance(v, AnnotationPropertyId) else AnnotationPropertyId(v) - for v in self.has_synonym_type - ] + self.has_synonym_type = [self.has_synonym_type] if self.has_synonym_type is not None else [] + self.has_synonym_type = [v if isinstance(v, AnnotationPropertyId) else AnnotationPropertyId(v) for v in self.has_synonym_type] if not isinstance(self.comment, list): self.comment = [self.comment] if self.comment is not None else [] @@ -1706,10 +1434,9 @@ class Subset(AnnotationProperty): """ A collection of terms grouped for some purpose """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OIO.Subset + class_class_uri: ClassVar[URIRef] = OIO["Subset"] class_class_curie: ClassVar[str] = "oio:Subset" class_name: ClassVar[str] = "Subset" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Subset @@ -1723,16 +1450,18 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.id = SubsetId(self.id) super().__post_init__(**kwargs) + if not isinstance(self.type, list): + self.type = [self.type] if self.type is not None else [] + self.type = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.type] class Anonymous(YAMLRoot): """ Abstract root class for all anonymous (non-named; lacking an identifier) expressions """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.Anonymous + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["Anonymous"] class_class_curie: ClassVar[str] = "omoschema:Anonymous" class_name: ClassVar[str] = "Anonymous" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Anonymous @@ -1741,7 +1470,7 @@ class Anonymous(YAMLRoot): class AnonymousClassExpression(Anonymous): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.AnonymousClassExpression + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["AnonymousClassExpression"] class_class_curie: ClassVar[str] = "omoschema:AnonymousClassExpression" class_name: ClassVar[str] = "AnonymousClassExpression" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.AnonymousClassExpression @@ -1751,24 +1480,18 @@ class AnonymousClassExpression(Anonymous): class Restriction(AnonymousClassExpression): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OWL.Restriction + class_class_uri: ClassVar[URIRef] = OWL["Restriction"] class_class_curie: ClassVar[str] = "owl:Restriction" class_name: ClassVar[str] = "Restriction" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Restriction - onProperty: Optional[ - Union[Union[dict, "PropertyExpression"], List[Union[dict, "PropertyExpression"]]] - ] = empty_list() + onProperty: Optional[Union[Union[dict, "PropertyExpression"], List[Union[dict, "PropertyExpression"]]]] = empty_list() someValuesFrom: Optional[Union[str, List[str]]] = empty_list() allValuesFrom: Optional[str] = None disjointWith: Optional[Union[str, List[str]]] = empty_list() - equivalentClass: Optional[ - Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]] - ] = empty_list() + equivalentClass: Optional[Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]]] = empty_list() intersectionOf: Optional[Union[dict, "ClassExpression"]] = None - subClassOf: Optional[ - Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]] - ] = empty_list() + subClassOf: Optional[Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]]] = empty_list() cardinality: Optional[str] = None complementOf: Optional[str] = None oneOf: Optional[Union[dict, "ClassExpression"]] = None @@ -1777,10 +1500,7 @@ class Restriction(AnonymousClassExpression): def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.onProperty, list): self.onProperty = [self.onProperty] if self.onProperty is not None else [] - self.onProperty = [ - v if isinstance(v, PropertyExpression) else PropertyExpression(**as_dict(v)) - for v in self.onProperty - ] + self.onProperty = [v if isinstance(v, PropertyExpression) else PropertyExpression(**as_dict(v)) for v in self.onProperty] if not isinstance(self.someValuesFrom, list): self.someValuesFrom = [self.someValuesFrom] if self.someValuesFrom is not None else [] @@ -1794,23 +1514,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.disjointWith = [v if isinstance(v, str) else str(v) for v in self.disjointWith] if not isinstance(self.equivalentClass, list): - self.equivalentClass = ( - [self.equivalentClass] if self.equivalentClass is not None else [] - ) - self.equivalentClass = [ - v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) - for v in self.equivalentClass - ] + self.equivalentClass = [self.equivalentClass] if self.equivalentClass is not None else [] + self.equivalentClass = [v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) for v in self.equivalentClass] if self.intersectionOf is not None and not isinstance(self.intersectionOf, ClassExpression): self.intersectionOf = ClassExpression(**as_dict(self.intersectionOf)) if not isinstance(self.subClassOf, list): self.subClassOf = [self.subClassOf] if self.subClassOf is not None else [] - self.subClassOf = [ - v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) - for v in self.subClassOf - ] + self.subClassOf = [v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) for v in self.subClassOf] if self.cardinality is not None and not isinstance(self.cardinality, str): self.cardinality = str(self.cardinality) @@ -1830,7 +1542,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class Expression(YAMLRoot): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.Expression + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["Expression"] class_class_curie: ClassVar[str] = "omoschema:Expression" class_name: ClassVar[str] = "Expression" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.Expression @@ -1840,19 +1552,15 @@ class Expression(YAMLRoot): class ClassExpression(Expression): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.ClassExpression + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["ClassExpression"] class_class_curie: ClassVar[str] = "omoschema:ClassExpression" class_name: ClassVar[str] = "ClassExpression" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.ClassExpression disjointWith: Optional[Union[str, List[str]]] = empty_list() - equivalentClass: Optional[ - Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]] - ] = empty_list() + equivalentClass: Optional[Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]]] = empty_list() intersectionOf: Optional[Union[dict, "ClassExpression"]] = None - subClassOf: Optional[ - Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]] - ] = empty_list() + subClassOf: Optional[Union[Union[dict, "ClassExpression"], List[Union[dict, "ClassExpression"]]]] = empty_list() cardinality: Optional[str] = None complementOf: Optional[str] = None oneOf: Optional[Union[dict, "ClassExpression"]] = None @@ -1864,23 +1572,15 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.disjointWith = [v if isinstance(v, str) else str(v) for v in self.disjointWith] if not isinstance(self.equivalentClass, list): - self.equivalentClass = ( - [self.equivalentClass] if self.equivalentClass is not None else [] - ) - self.equivalentClass = [ - v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) - for v in self.equivalentClass - ] + self.equivalentClass = [self.equivalentClass] if self.equivalentClass is not None else [] + self.equivalentClass = [v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) for v in self.equivalentClass] if self.intersectionOf is not None and not isinstance(self.intersectionOf, ClassExpression): self.intersectionOf = ClassExpression(**as_dict(self.intersectionOf)) if not isinstance(self.subClassOf, list): self.subClassOf = [self.subClassOf] if self.subClassOf is not None else [] - self.subClassOf = [ - v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) - for v in self.subClassOf - ] + self.subClassOf = [v if isinstance(v, ClassExpression) else ClassExpression(**as_dict(v)) for v in self.subClassOf] if self.cardinality is not None and not isinstance(self.cardinality, str): self.cardinality = str(self.cardinality) @@ -1901,7 +1601,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class PropertyExpression(Expression): _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.PropertyExpression + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["PropertyExpression"] class_class_curie: ClassVar[str] = "omoschema:PropertyExpression" class_name: ClassVar[str] = "PropertyExpression" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.PropertyExpression @@ -1921,10 +1621,9 @@ class ObsoleteAspect(YAMLRoot): """ Auto-classifies anything that is obsolete """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.ObsoleteAspect + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["ObsoleteAspect"] class_class_curie: ClassVar[str] = "omoschema:ObsoleteAspect" class_name: ClassVar[str] = "ObsoleteAspect" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.ObsoleteAspect @@ -1942,10 +1641,9 @@ class NotObsoleteAspect(YAMLRoot): """ Auto-classifies anything that is not obsolete """ - _inherited_slots: ClassVar[List[str]] = [] - class_class_uri: ClassVar[URIRef] = OMOSCHEMA.NotObsoleteAspect + class_class_uri: ClassVar[URIRef] = OMOSCHEMA["NotObsoleteAspect"] class_class_curie: ClassVar[str] = "omoschema:NotObsoleteAspect" class_name: ClassVar[str] = "NotObsoleteAspect" class_model_uri: ClassVar[URIRef] = OMOSCHEMA.NotObsoleteAspect @@ -1956,1435 +1654,526 @@ class DefinitionConstraintComponent(EnumDefinitionImpl): """ An extension of SHACL constraint component for constraining definitions """ - DefinitionConstraint = PermissibleValue( text="DefinitionConstraint", description="A general problem with a definition", - meaning=OMOSCHEMA["DCC.Any"], - ) + meaning=OMOSCHEMA["DCC.Any"]) DefinitionPresence = PermissibleValue( text="DefinitionPresence", description="An entity must have a definition", - meaning=OMOSCHEMA["DCC.S0"], - ) + meaning=OMOSCHEMA["DCC.S0"]) Conventions = PermissibleValue( text="Conventions", description="Definitions should conform to conventions", - meaning=OMOSCHEMA["DCC.S1"], - ) + meaning=OMOSCHEMA["DCC.S1"]) Harmonized = PermissibleValue( text="Harmonized", description="Definitions should be harmonized", - meaning=OMOSCHEMA["DCC.S1.1"], - ) + meaning=OMOSCHEMA["DCC.S1.1"]) GenusDifferentiaForm = PermissibleValue( text="GenusDifferentiaForm", description="A definition should follow the genus-differentia form", - meaning=OMOSCHEMA["DCC.S3"], - ) + meaning=OMOSCHEMA["DCC.S3"]) SingleGenus = PermissibleValue( text="SingleGenus", description="An entity must have a single genus", - meaning=OMOSCHEMA["DCC.S3.1"], - ) + meaning=OMOSCHEMA["DCC.S3.1"]) Circularity = PermissibleValue( text="Circularity", description="A definition must not be circular", - meaning=OMOSCHEMA["DCC.S7"], - ) + meaning=OMOSCHEMA["DCC.S7"]) MatchTextAndLogical = PermissibleValue( text="MatchTextAndLogical", description="Text definitions and logical forms should match", - meaning=OMOSCHEMA["DCC.S11"], - ) + meaning=OMOSCHEMA["DCC.S11"]) + MatchTextAndLogicalGenusNotInText = PermissibleValue( + text="MatchTextAndLogicalGenusNotInText", + description="The genus in the logical definition should be in the text definition", + meaning=OMOSCHEMA["DCC.S11.1"]) + MatchTextAndLogicalDifferentiaNotInText = PermissibleValue( + text="MatchTextAndLogicalDifferentiaNotInText", + description="The differentia in the logical definition should be in the text definition", + meaning=OMOSCHEMA["DCC.S11.2"]) + MatchTextAndReference = PermissibleValue( + text="MatchTextAndReference", + description="Text definitions and cited references and provenance for the text definition should match", + meaning=OMOSCHEMA["DCC.S20"]) + ReferenceNotFound = PermissibleValue( + text="ReferenceNotFound", + description="The citation for the reference cannot be found", + meaning=OMOSCHEMA["DCC.S20.1"]) + ReferenceIsRetracted = PermissibleValue( + text="ReferenceIsRetracted", + description="The citation for the reference is retracted", + meaning=OMOSCHEMA["DCC.S20.2"]) _defn = EnumDefinition( name="DefinitionConstraintComponent", description="An extension of SHACL constraint component for constraining definitions", ) - # Slots class slots: pass +slots.core_property = Slot(uri=OMOSCHEMA.core_property, name="core_property", curie=OMOSCHEMA.curie('core_property'), + model_uri=OMOSCHEMA.core_property, domain=None, range=Optional[str]) + +slots.id = Slot(uri=OMOSCHEMA.id, name="id", curie=OMOSCHEMA.curie('id'), + model_uri=OMOSCHEMA.id, domain=None, range=URIRef) + +slots.label = Slot(uri=RDFS.label, name="label", curie=RDFS.curie('label'), + model_uri=OMOSCHEMA.label, domain=None, range=Optional[Union[str, LabelType]]) + +slots.annotations = Slot(uri=OMOSCHEMA.annotations, name="annotations", curie=OMOSCHEMA.curie('annotations'), + model_uri=OMOSCHEMA.annotations, domain=None, range=Optional[Union[Union[dict, Annotation], List[Union[dict, Annotation]]]]) + +slots.definition = Slot(uri=IAO['0000115'], name="definition", curie=IAO.curie('0000115'), + model_uri=OMOSCHEMA.definition, domain=None, range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]]) + +slots.predicate = Slot(uri=OMOSCHEMA.predicate, name="predicate", curie=OMOSCHEMA.curie('predicate'), + model_uri=OMOSCHEMA.predicate, domain=None, range=Optional[str]) + +slots.object = Slot(uri=OMOSCHEMA.object, name="object", curie=OMOSCHEMA.curie('object'), + model_uri=OMOSCHEMA.object, domain=None, range=Optional[str]) + +slots.title = Slot(uri=DCTERMS.title, name="title", curie=DCTERMS.curie('title'), + model_uri=OMOSCHEMA.title, domain=None, range=Optional[Union[str, NarrativeText]]) + +slots.match_aspect = Slot(uri=OMOSCHEMA.match_aspect, name="match_aspect", curie=OMOSCHEMA.curie('match_aspect'), + model_uri=OMOSCHEMA.match_aspect, domain=None, range=Optional[str]) + +slots.match = Slot(uri=OMOSCHEMA.match, name="match", curie=OMOSCHEMA.curie('match'), + model_uri=OMOSCHEMA.match, domain=None, range=Optional[str]) + +slots.broadMatch = Slot(uri=SKOS.broadMatch, name="broadMatch", curie=SKOS.curie('broadMatch'), + model_uri=OMOSCHEMA.broadMatch, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.closeMatch = Slot(uri=SKOS.closeMatch, name="closeMatch", curie=SKOS.curie('closeMatch'), + model_uri=OMOSCHEMA.closeMatch, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.exactMatch = Slot(uri=SKOS.exactMatch, name="exactMatch", curie=SKOS.curie('exactMatch'), + model_uri=OMOSCHEMA.exactMatch, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.narrowMatch = Slot(uri=SKOS.narrowMatch, name="narrowMatch", curie=SKOS.curie('narrowMatch'), + model_uri=OMOSCHEMA.narrowMatch, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.database_cross_reference = Slot(uri=OIO.hasDbXref, name="database_cross_reference", curie=OIO.curie('hasDbXref'), + model_uri=OMOSCHEMA.database_cross_reference, domain=None, range=Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]]) + +slots.informative_property = Slot(uri=OMOSCHEMA.informative_property, name="informative_property", curie=OMOSCHEMA.curie('informative_property'), + model_uri=OMOSCHEMA.informative_property, domain=None, range=Optional[str]) + +slots.comment = Slot(uri=RDFS.comment, name="comment", curie=RDFS.curie('comment'), + model_uri=OMOSCHEMA.comment, domain=None, range=Optional[Union[str, List[str]]]) + +slots.category = Slot(uri=BIOLINK.category, name="category", curie=BIOLINK.curie('category'), + model_uri=OMOSCHEMA.category, domain=None, range=Optional[str]) + +slots.image = Slot(uri=SDO.image, name="image", curie=SDO.curie('image'), + model_uri=OMOSCHEMA.image, domain=None, range=Optional[Union[dict, Thing]]) + +slots.example_of_usage = Slot(uri=IAO['0000112'], name="example_of_usage", curie=IAO.curie('0000112'), + model_uri=OMOSCHEMA.example_of_usage, domain=None, range=Optional[Union[str, List[str]]]) + +slots.changeNote = Slot(uri=SKOS.changeNote, name="changeNote", curie=SKOS.curie('changeNote'), + model_uri=OMOSCHEMA.changeNote, domain=None, range=Optional[Union[str, List[str]]]) + +slots.has_curation_status = Slot(uri=IAO['0000114'], name="has_curation_status", curie=IAO.curie('0000114'), + model_uri=OMOSCHEMA.has_curation_status, domain=None, range=Optional[str]) + +slots.defaultLanguage = Slot(uri=PROTEGE.defaultLanguage, name="defaultLanguage", curie=PROTEGE.curie('defaultLanguage'), + model_uri=OMOSCHEMA.defaultLanguage, domain=None, range=Optional[str]) + +slots.language = Slot(uri=DCTERMS.language, name="language", curie=DCTERMS.curie('language'), + model_uri=OMOSCHEMA.language, domain=None, range=Optional[str]) + +slots.has_ontology_root_term = Slot(uri=IAO['0000700'], name="has_ontology_root_term", curie=IAO.curie('0000700'), + model_uri=OMOSCHEMA.has_ontology_root_term, domain=None, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.conformsTo = Slot(uri=DCTERMS.conformsTo, name="conformsTo", curie=DCTERMS.curie('conformsTo'), + model_uri=OMOSCHEMA.conformsTo, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.license = Slot(uri=DCTERMS.license, name="license", curie=DCTERMS.curie('license'), + model_uri=OMOSCHEMA.license, domain=None, range=Optional[Union[dict, Thing]]) + +slots.depicted_by = Slot(uri=FOAF.depicted_by, name="depicted_by", curie=FOAF.curie('depicted_by'), + model_uri=OMOSCHEMA.depicted_by, domain=None, range=Optional[Union[Union[str, ImageId], List[Union[str, ImageId]]]]) + +slots.page = Slot(uri=FOAF.page, name="page", curie=FOAF.curie('page'), + model_uri=OMOSCHEMA.page, domain=None, range=Optional[Union[str, List[str]]]) + +slots.version_property = Slot(uri=OMOSCHEMA.version_property, name="version_property", curie=OMOSCHEMA.curie('version_property'), + model_uri=OMOSCHEMA.version_property, domain=None, range=Optional[str]) + +slots.versionIRI = Slot(uri=OWL.versionIRI, name="versionIRI", curie=OWL.curie('versionIRI'), + model_uri=OMOSCHEMA.versionIRI, domain=None, range=Optional[Union[str, URIorCURIE]]) + +slots.versionInfo = Slot(uri=OWL.versionInfo, name="versionInfo", curie=OWL.curie('versionInfo'), + model_uri=OMOSCHEMA.versionInfo, domain=None, range=Optional[str]) + +slots.obsoletion_related_property = Slot(uri=OMOSCHEMA.obsoletion_related_property, name="obsoletion_related_property", curie=OMOSCHEMA.curie('obsoletion_related_property'), + model_uri=OMOSCHEMA.obsoletion_related_property, domain=None, range=Optional[str]) + +slots.deprecated = Slot(uri=OWL.deprecated, name="deprecated", curie=OWL.curie('deprecated'), + model_uri=OMOSCHEMA.deprecated, domain=None, range=Optional[Union[bool, Bool]]) + +slots.term_replaced_by = Slot(uri=IAO['0100001'], name="term_replaced_by", curie=IAO.curie('0100001'), + model_uri=OMOSCHEMA.term_replaced_by, domain=None, range=Optional[Union[dict, Any]]) + +slots.has_obsolescence_reason = Slot(uri=IAO['0000231'], name="has_obsolescence_reason", curie=IAO.curie('0000231'), + model_uri=OMOSCHEMA.has_obsolescence_reason, domain=None, range=Optional[str]) + +slots.consider = Slot(uri=OIO.consider, name="consider", curie=OIO.curie('consider'), + model_uri=OMOSCHEMA.consider, domain=None, range=Optional[Union[Union[dict, Any], List[Union[dict, Any]]]]) + +slots.has_alternative_id = Slot(uri=OIO.hasAlternativeId, name="has_alternative_id", curie=OIO.curie('hasAlternativeId'), + model_uri=OMOSCHEMA.has_alternative_id, domain=None, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]]) + +slots.temporal_interpretation = Slot(uri=RO['0001900'], name="temporal_interpretation", curie=RO.curie('0001900'), + model_uri=OMOSCHEMA.temporal_interpretation, domain=None, range=Optional[Union[str, NamedIndividualId]]) + +slots.never_in_taxon = Slot(uri=RO['0002161'], name="never_in_taxon", curie=RO.curie('0002161'), + model_uri=OMOSCHEMA.never_in_taxon, domain=None, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.is_a_defining_property_chain_axiom = Slot(uri=RO['0002581'], name="is_a_defining_property_chain_axiom", curie=RO.curie('0002581'), + model_uri=OMOSCHEMA.is_a_defining_property_chain_axiom, domain=None, range=Optional[str]) + +slots.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive = Slot(uri=RO['0002582'], name="is_a_defining_property_chain_axiom_where_second_argument_is_reflexive", curie=RO.curie('0002582'), + model_uri=OMOSCHEMA.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive, domain=None, range=Optional[str]) + +slots.provenance_property = Slot(uri=OMOSCHEMA.provenance_property, name="provenance_property", curie=OMOSCHEMA.curie('provenance_property'), + model_uri=OMOSCHEMA.provenance_property, domain=None, range=Optional[str]) + +slots.contributor = Slot(uri=DCTERMS.contributor, name="contributor", curie=DCTERMS.curie('contributor'), + model_uri=OMOSCHEMA.contributor, domain=None, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]]) + +slots.creator = Slot(uri=DCTERMS.creator, name="creator", curie=DCTERMS.curie('creator'), + model_uri=OMOSCHEMA.creator, domain=None, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]]) + +slots.created = Slot(uri=DCTERMS.created, name="created", curie=DCTERMS.curie('created'), + model_uri=OMOSCHEMA.created, domain=None, range=Optional[str]) + +slots.date = Slot(uri=DCTERMS.date, name="date", curie=DCTERMS.curie('date'), + model_uri=OMOSCHEMA.date, domain=None, range=Optional[Union[str, List[str]]]) + +slots.source = Slot(uri=DCTERMS.source, name="source", curie=DCTERMS.curie('source'), + model_uri=OMOSCHEMA.source, domain=None, range=Optional[Union[str, List[str]]]) + +slots.created_by = Slot(uri=OIO.created_by, name="created_by", curie=OIO.curie('created_by'), + model_uri=OMOSCHEMA.created_by, domain=None, range=Optional[str]) + +slots.creation_date = Slot(uri=OIO.creation_date, name="creation_date", curie=OIO.curie('creation_date'), + model_uri=OMOSCHEMA.creation_date, domain=None, range=Optional[Union[str, List[str]]]) + +slots.date_retrieved = Slot(uri=OIO.date_retrieved, name="date_retrieved", curie=OIO.curie('date_retrieved'), + model_uri=OMOSCHEMA.date_retrieved, domain=None, range=Optional[str]) + +slots.editor_note = Slot(uri=IAO['0000116'], name="editor_note", curie=IAO.curie('0000116'), + model_uri=OMOSCHEMA.editor_note, domain=None, range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]]) + +slots.term_editor = Slot(uri=IAO['0000117'], name="term_editor", curie=IAO.curie('0000117'), + model_uri=OMOSCHEMA.term_editor, domain=None, range=Optional[Union[str, List[str]]]) + +slots.definition_source = Slot(uri=IAO['0000119'], name="definition_source", curie=IAO.curie('0000119'), + model_uri=OMOSCHEMA.definition_source, domain=None, range=Optional[Union[str, List[str]]]) + +slots.curator_note = Slot(uri=IAO['0000232'], name="curator_note", curie=IAO.curie('0000232'), + model_uri=OMOSCHEMA.curator_note, domain=None, range=Optional[Union[str, List[str]]]) + +slots.term_tracker_item = Slot(uri=IAO['0000233'], name="term_tracker_item", curie=IAO.curie('0000233'), + model_uri=OMOSCHEMA.term_tracker_item, domain=None, range=Optional[Union[str, List[str]]]) + +slots.ontology_term_requester = Slot(uri=IAO['0000234'], name="ontology_term_requester", curie=IAO.curie('0000234'), + model_uri=OMOSCHEMA.ontology_term_requester, domain=None, range=Optional[str]) + +slots.imported_from = Slot(uri=IAO['0000412'], name="imported_from", curie=IAO.curie('0000412'), + model_uri=OMOSCHEMA.imported_from, domain=None, range=Optional[Union[Union[str, NamedIndividualId], List[Union[str, NamedIndividualId]]]]) + +slots.has_axiom_label = Slot(uri=IAO['0010000'], name="has_axiom_label", curie=IAO.curie('0010000'), + model_uri=OMOSCHEMA.has_axiom_label, domain=None, range=Optional[Union[dict, Thing]]) + +slots.shortcut_annotation_property = Slot(uri=OMOSCHEMA.shortcut_annotation_property, name="shortcut_annotation_property", curie=OMOSCHEMA.curie('shortcut_annotation_property'), + model_uri=OMOSCHEMA.shortcut_annotation_property, domain=None, range=Optional[str]) + +slots.disconnected_from = Slot(uri=OMOSCHEMA.disconnected_from, name="disconnected_from", curie=OMOSCHEMA.curie('disconnected_from'), + model_uri=OMOSCHEMA.disconnected_from, domain=None, range=Optional[Union[str, ClassId]]) + +slots.excluded_axiom = Slot(uri=OMOSCHEMA.excluded_axiom, name="excluded_axiom", curie=OMOSCHEMA.curie('excluded_axiom'), + model_uri=OMOSCHEMA.excluded_axiom, domain=None, range=Optional[str]) + +slots.excluded_from_QC_check = Slot(uri=OMOSCHEMA.excluded_from_QC_check, name="excluded_from_QC_check", curie=OMOSCHEMA.curie('excluded_from_QC_check'), + model_uri=OMOSCHEMA.excluded_from_QC_check, domain=None, range=Optional[Union[dict, Thing]]) + +slots.excluded_subClassOf = Slot(uri=OMOSCHEMA.excluded_subClassOf, name="excluded_subClassOf", curie=OMOSCHEMA.curie('excluded_subClassOf'), + model_uri=OMOSCHEMA.excluded_subClassOf, domain=None, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.excluded_synonym = Slot(uri=OMOSCHEMA.excluded_synonym, name="excluded_synonym", curie=OMOSCHEMA.curie('excluded_synonym'), + model_uri=OMOSCHEMA.excluded_synonym, domain=None, range=Optional[Union[str, List[str]]]) + +slots.should_conform_to = Slot(uri=OMOSCHEMA.should_conform_to, name="should_conform_to", curie=OMOSCHEMA.curie('should_conform_to'), + model_uri=OMOSCHEMA.should_conform_to, domain=None, range=Optional[Union[dict, Thing]]) + +slots.has_rank = Slot(uri=OMOSCHEMA.has_rank, name="has_rank", curie=OMOSCHEMA.curie('has_rank'), + model_uri=OMOSCHEMA.has_rank, domain=None, range=Optional[Union[dict, Thing]]) + +slots.alternative_term = Slot(uri=IAO['0000118'], name="alternative_term", curie=IAO.curie('0000118'), + model_uri=OMOSCHEMA.alternative_term, domain=None, range=Optional[Union[str, List[str]]]) + +slots.ISA_alternative_term = Slot(uri=OBI['0001847'], name="ISA_alternative_term", curie=OBI.curie('0001847'), + model_uri=OMOSCHEMA.ISA_alternative_term, domain=None, range=Optional[Union[str, List[str]]]) + +slots.IEDB_alternative_term = Slot(uri=OBI['9991118'], name="IEDB_alternative_term", curie=OBI.curie('9991118'), + model_uri=OMOSCHEMA.IEDB_alternative_term, domain=None, range=Optional[Union[str, List[str]]]) + +slots.OBO_foundry_unique_label = Slot(uri=IAO['0000589'], name="OBO_foundry_unique_label", curie=IAO.curie('0000589'), + model_uri=OMOSCHEMA.OBO_foundry_unique_label, domain=None, range=Optional[Union[str, List[str]]]) + +slots.synonym = Slot(uri=OIO.hasSynonym, name="synonym", curie=OIO.curie('hasSynonym'), + model_uri=OMOSCHEMA.synonym, domain=None, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]]) + +slots.editor_preferred_term = Slot(uri=IAO['0000111'], name="editor_preferred_term", curie=IAO.curie('0000111'), + model_uri=OMOSCHEMA.editor_preferred_term, domain=None, range=Optional[Union[str, List[str]]]) + +slots.has_exact_synonym = Slot(uri=OIO.hasExactSynonym, name="has_exact_synonym", curie=OIO.curie('hasExactSynonym'), + model_uri=OMOSCHEMA.has_exact_synonym, domain=None, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]]) + +slots.has_narrow_synonym = Slot(uri=OIO.hasNarrowSynonym, name="has_narrow_synonym", curie=OIO.curie('hasNarrowSynonym'), + model_uri=OMOSCHEMA.has_narrow_synonym, domain=None, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]]) + +slots.has_related_synonym = Slot(uri=OIO.hasRelatedSynonym, name="has_related_synonym", curie=OIO.curie('hasRelatedSynonym'), + model_uri=OMOSCHEMA.has_related_synonym, domain=None, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]]) + +slots.has_broad_synonym = Slot(uri=OIO.hasBroadSynonym, name="has_broad_synonym", curie=OIO.curie('hasBroadSynonym'), + model_uri=OMOSCHEMA.has_broad_synonym, domain=None, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]]) + +slots.has_synonym_type = Slot(uri=OIO.hasSynonymType, name="has_synonym_type", curie=OIO.curie('hasSynonymType'), + model_uri=OMOSCHEMA.has_synonym_type, domain=None, range=Optional[Union[Union[str, AnnotationPropertyId], List[Union[str, AnnotationPropertyId]]]]) + +slots.has_obo_namespace = Slot(uri=OIO.hasOBONamespace, name="has_obo_namespace", curie=OIO.curie('hasOBONamespace'), + model_uri=OMOSCHEMA.has_obo_namespace, domain=None, range=Optional[Union[str, List[str]]]) + +slots.in_subset = Slot(uri=OIO.inSubset, name="in_subset", curie=OIO.curie('inSubset'), + model_uri=OMOSCHEMA.in_subset, domain=None, range=Optional[Union[Union[str, SubsetId], List[Union[str, SubsetId]]]]) + +slots.reification_predicate = Slot(uri=OMOSCHEMA.reification_predicate, name="reification_predicate", curie=OMOSCHEMA.curie('reification_predicate'), + model_uri=OMOSCHEMA.reification_predicate, domain=None, range=Optional[str]) + +slots.annotatedProperty = Slot(uri=OWL.annotatedProperty, name="annotatedProperty", curie=OWL.curie('annotatedProperty'), + model_uri=OMOSCHEMA.annotatedProperty, domain=None, range=Optional[Union[str, AnnotationPropertyId]]) + +slots.annotatedSource = Slot(uri=OWL.annotatedSource, name="annotatedSource", curie=OWL.curie('annotatedSource'), + model_uri=OMOSCHEMA.annotatedSource, domain=None, range=Optional[Union[str, NamedObjectId]]) + +slots.annotatedTarget = Slot(uri=OWL.annotatedTarget, name="annotatedTarget", curie=OWL.curie('annotatedTarget'), + model_uri=OMOSCHEMA.annotatedTarget, domain=None, range=Optional[Union[dict, Any]]) + +slots.imports = Slot(uri=OWL.imports, name="imports", curie=OWL.curie('imports'), + model_uri=OMOSCHEMA.imports, domain=None, range=Optional[str]) + +slots.logical_predicate = Slot(uri=OMOSCHEMA.logical_predicate, name="logical_predicate", curie=OMOSCHEMA.curie('logical_predicate'), + model_uri=OMOSCHEMA.logical_predicate, domain=None, range=Optional[str]) + +slots.cardinality = Slot(uri=OWL.cardinality, name="cardinality", curie=OWL.curie('cardinality'), + model_uri=OMOSCHEMA.cardinality, domain=None, range=Optional[str]) + +slots.complementOf = Slot(uri=OWL.complementOf, name="complementOf", curie=OWL.curie('complementOf'), + model_uri=OMOSCHEMA.complementOf, domain=None, range=Optional[str]) + +slots.disjointWith = Slot(uri=OWL.disjointWith, name="disjointWith", curie=OWL.curie('disjointWith'), + model_uri=OMOSCHEMA.disjointWith, domain=None, range=Optional[Union[str, List[str]]]) + +slots.distinctMembers = Slot(uri=OWL.distinctMembers, name="distinctMembers", curie=OWL.curie('distinctMembers'), + model_uri=OMOSCHEMA.distinctMembers, domain=None, range=Optional[Union[dict, Thing]]) + +slots.equivalentClass = Slot(uri=OWL.equivalentClass, name="equivalentClass", curie=OWL.curie('equivalentClass'), + model_uri=OMOSCHEMA.equivalentClass, domain=None, range=Optional[Union[Union[dict, ClassExpression], List[Union[dict, ClassExpression]]]]) + +slots.sameAs = Slot(uri=OWL.sameAs, name="sameAs", curie=OWL.curie('sameAs'), + model_uri=OMOSCHEMA.sameAs, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.equivalentProperty = Slot(uri=OWL.equivalentProperty, name="equivalentProperty", curie=OWL.curie('equivalentProperty'), + model_uri=OMOSCHEMA.equivalentProperty, domain=None, range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]]) + +slots.hasValue = Slot(uri=OWL.hasValue, name="hasValue", curie=OWL.curie('hasValue'), + model_uri=OMOSCHEMA.hasValue, domain=None, range=Optional[Union[dict, Any]]) + +slots.intersectionOf = Slot(uri=OWL.intersectionOf, name="intersectionOf", curie=OWL.curie('intersectionOf'), + model_uri=OMOSCHEMA.intersectionOf, domain=None, range=Optional[Union[dict, ClassExpression]]) + +slots.inverseOf = Slot(uri=OWL.inverseOf, name="inverseOf", curie=OWL.curie('inverseOf'), + model_uri=OMOSCHEMA.inverseOf, domain=None, range=Optional[Union[str, PropertyId]]) + +slots.maxQualifiedCardinality = Slot(uri=OWL.maxQualifiedCardinality, name="maxQualifiedCardinality", curie=OWL.curie('maxQualifiedCardinality'), + model_uri=OMOSCHEMA.maxQualifiedCardinality, domain=None, range=Optional[int]) + +slots.members = Slot(uri=OWL.members, name="members", curie=OWL.curie('members'), + model_uri=OMOSCHEMA.members, domain=None, range=Optional[Union[dict, Thing]]) + +slots.minCardinality = Slot(uri=OWL.minCardinality, name="minCardinality", curie=OWL.curie('minCardinality'), + model_uri=OMOSCHEMA.minCardinality, domain=None, range=Optional[int]) + +slots.minQualifiedCardinality = Slot(uri=OWL.minQualifiedCardinality, name="minQualifiedCardinality", curie=OWL.curie('minQualifiedCardinality'), + model_uri=OMOSCHEMA.minQualifiedCardinality, domain=None, range=Optional[int]) + +slots.onClass = Slot(uri=OWL.onClass, name="onClass", curie=OWL.curie('onClass'), + model_uri=OMOSCHEMA.onClass, domain=None, range=Optional[Union[dict, ClassExpression]]) + +slots.onProperty = Slot(uri=OWL.onProperty, name="onProperty", curie=OWL.curie('onProperty'), + model_uri=OMOSCHEMA.onProperty, domain=None, range=Optional[Union[Union[dict, PropertyExpression], List[Union[dict, PropertyExpression]]]]) + +slots.oneOf = Slot(uri=OWL.oneOf, name="oneOf", curie=OWL.curie('oneOf'), + model_uri=OMOSCHEMA.oneOf, domain=None, range=Optional[Union[dict, ClassExpression]]) + +slots.propertyChainAxiom = Slot(uri=OWL.propertyChainAxiom, name="propertyChainAxiom", curie=OWL.curie('propertyChainAxiom'), + model_uri=OMOSCHEMA.propertyChainAxiom, domain=None, range=Optional[Union[str, List[str]]]) + +slots.qualifiedCardinality = Slot(uri=OWL.qualifiedCardinality, name="qualifiedCardinality", curie=OWL.curie('qualifiedCardinality'), + model_uri=OMOSCHEMA.qualifiedCardinality, domain=None, range=Optional[str]) + +slots.allValuesFrom = Slot(uri=OWL.allValuesFrom, name="allValuesFrom", curie=OWL.curie('allValuesFrom'), + model_uri=OMOSCHEMA.allValuesFrom, domain=None, range=Optional[str]) + +slots.someValuesFrom = Slot(uri=OWL.someValuesFrom, name="someValuesFrom", curie=OWL.curie('someValuesFrom'), + model_uri=OMOSCHEMA.someValuesFrom, domain=None, range=Optional[Union[str, List[str]]]) + +slots.unionOf = Slot(uri=OWL.unionOf, name="unionOf", curie=OWL.curie('unionOf'), + model_uri=OMOSCHEMA.unionOf, domain=None, range=Optional[str]) + +slots.domain = Slot(uri=RDFS.domain, name="domain", curie=RDFS.curie('domain'), + model_uri=OMOSCHEMA.domain, domain=None, range=Optional[Union[str, List[str]]]) + +slots.range = Slot(uri=RDFS.range, name="range", curie=RDFS.curie('range'), + model_uri=OMOSCHEMA.range, domain=None, range=Optional[Union[str, List[str]]]) + +slots.isDefinedBy = Slot(uri=RDFS.isDefinedBy, name="isDefinedBy", curie=RDFS.curie('isDefinedBy'), + model_uri=OMOSCHEMA.isDefinedBy, domain=None, range=Optional[Union[str, OntologyId]]) + +slots.seeAlso = Slot(uri=RDFS.seeAlso, name="seeAlso", curie=RDFS.curie('seeAlso'), + model_uri=OMOSCHEMA.seeAlso, domain=None, range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]]) + +slots.type = Slot(uri=RDF.type, name="type", curie=RDF.curie('type'), + model_uri=OMOSCHEMA.type, domain=None, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]]) + +slots.subClassOf = Slot(uri=RDFS.subClassOf, name="subClassOf", curie=RDFS.curie('subClassOf'), + model_uri=OMOSCHEMA.subClassOf, domain=None, range=Optional[Union[Union[dict, ClassExpression], List[Union[dict, ClassExpression]]]]) + +slots.oboInOwl_id = Slot(uri=OIO.id, name="oboInOwl_id", curie=OIO.curie('id'), + model_uri=OMOSCHEMA.oboInOwl_id, domain=None, range=Optional[str]) + +slots.oboInOwl_ontology = Slot(uri=OIO.ontology, name="oboInOwl_ontology", curie=OIO.curie('ontology'), + model_uri=OMOSCHEMA.oboInOwl_ontology, domain=None, range=Optional[str]) + +slots.is_class_level = Slot(uri=OIO.is_class_level, name="is_class_level", curie=OIO.curie('is_class_level'), + model_uri=OMOSCHEMA.is_class_level, domain=None, range=Optional[Union[bool, Bool]]) + +slots.is_cyclic = Slot(uri=OIO.is_cyclic, name="is_cyclic", curie=OIO.curie('is_cyclic'), + model_uri=OMOSCHEMA.is_cyclic, domain=None, range=Optional[Union[bool, Bool]]) + +slots.is_inferred = Slot(uri=OIO.is_inferred, name="is_inferred", curie=OIO.curie('is_inferred'), + model_uri=OMOSCHEMA.is_inferred, domain=None, range=Optional[Union[bool, Bool]]) + +slots.is_metadata_tag = Slot(uri=OIO.is_metadata_tag, name="is_metadata_tag", curie=OIO.curie('is_metadata_tag'), + model_uri=OMOSCHEMA.is_metadata_tag, domain=None, range=Optional[Union[bool, Bool]]) + +slots.is_transitive = Slot(uri=OIO.is_transitive, name="is_transitive", curie=OIO.curie('is_transitive'), + model_uri=OMOSCHEMA.is_transitive, domain=None, range=Optional[Union[bool, Bool]]) + +slots.notes = Slot(uri=OIO.notes, name="notes", curie=OIO.curie('notes'), + model_uri=OMOSCHEMA.notes, domain=None, range=Optional[Union[str, List[str]]]) + +slots.shorthand = Slot(uri=OIO.shorthand, name="shorthand", curie=OIO.curie('shorthand'), + model_uri=OMOSCHEMA.shorthand, domain=None, range=Optional[Union[str, List[str]]]) + +slots.url = Slot(uri=OIO.url, name="url", curie=OIO.curie('url'), + model_uri=OMOSCHEMA.url, domain=None, range=Optional[str]) + +slots.evidence = Slot(uri=OIO.evidence, name="evidence", curie=OIO.curie('evidence'), + model_uri=OMOSCHEMA.evidence, domain=None, range=Optional[str]) + +slots.external_ontology = Slot(uri=OIO.external_ontology, name="external_ontology", curie=OIO.curie('external_ontology'), + model_uri=OMOSCHEMA.external_ontology, domain=None, range=Optional[Union[str, List[str]]]) + +slots.NCIT_definition_source = Slot(uri=NCIT.P378, name="NCIT_definition_source", curie=NCIT.curie('P378'), + model_uri=OMOSCHEMA.NCIT_definition_source, domain=None, range=Optional[str]) + +slots.NCIT_term_type = Slot(uri=NCIT.P383, name="NCIT_term_type", curie=NCIT.curie('P383'), + model_uri=OMOSCHEMA.NCIT_term_type, domain=None, range=Optional[str]) + +slots.NCIT_term_source = Slot(uri=NCIT.P384, name="NCIT_term_source", curie=NCIT.curie('P384'), + model_uri=OMOSCHEMA.NCIT_term_source, domain=None, range=Optional[str]) + +slots.annotation__predicate = Slot(uri=OMOSCHEMA.predicate, name="annotation__predicate", curie=OMOSCHEMA.curie('predicate'), + model_uri=OMOSCHEMA.annotation__predicate, domain=None, range=Optional[str]) + +slots.annotation__object = Slot(uri=OMOSCHEMA.object, name="annotation__object", curie=OMOSCHEMA.curie('object'), + model_uri=OMOSCHEMA.annotation__object, domain=None, range=Optional[str]) + +slots.Ontology_title = Slot(uri=DCTERMS.title, name="Ontology_title", curie=DCTERMS.curie('title'), + model_uri=OMOSCHEMA.Ontology_title, domain=Ontology, range=Union[str, NarrativeText]) + +slots.Ontology_license = Slot(uri=DCTERMS.license, name="Ontology_license", curie=DCTERMS.curie('license'), + model_uri=OMOSCHEMA.Ontology_license, domain=Ontology, range=Union[dict, Thing]) + +slots.Ontology_versionIRI = Slot(uri=OWL.versionIRI, name="Ontology_versionIRI", curie=OWL.curie('versionIRI'), + model_uri=OMOSCHEMA.Ontology_versionIRI, domain=Ontology, range=Union[str, URIorCURIE]) + +slots.Ontology_versionInfo = Slot(uri=OWL.versionInfo, name="Ontology_versionInfo", curie=OWL.curie('versionInfo'), + model_uri=OMOSCHEMA.Ontology_versionInfo, domain=Ontology, range=str) + +slots.Class_label = Slot(uri=RDFS.label, name="Class_label", curie=RDFS.curie('label'), + model_uri=OMOSCHEMA.Class_label, domain=Class, range=Union[str, LabelType]) + +slots.Class_definition = Slot(uri=IAO['0000115'], name="Class_definition", curie=IAO.curie('0000115'), + model_uri=OMOSCHEMA.Class_definition, domain=Class, range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]]) + +slots.Class_broadMatch = Slot(uri=SKOS.broadMatch, name="Class_broadMatch", curie=SKOS.curie('broadMatch'), + model_uri=OMOSCHEMA.Class_broadMatch, domain=Class, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.Class_exactMatch = Slot(uri=SKOS.exactMatch, name="Class_exactMatch", curie=SKOS.curie('exactMatch'), + model_uri=OMOSCHEMA.Class_exactMatch, domain=Class, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.Class_narrowMatch = Slot(uri=SKOS.narrowMatch, name="Class_narrowMatch", curie=SKOS.curie('narrowMatch'), + model_uri=OMOSCHEMA.Class_narrowMatch, domain=Class, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.Class_closeMatch = Slot(uri=SKOS.closeMatch, name="Class_closeMatch", curie=SKOS.curie('closeMatch'), + model_uri=OMOSCHEMA.Class_closeMatch, domain=Class, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.Class_subClassOf = Slot(uri=RDFS.subClassOf, name="Class_subClassOf", curie=RDFS.curie('subClassOf'), + model_uri=OMOSCHEMA.Class_subClassOf, domain=Class, range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]]) + +slots.Property_label = Slot(uri=RDFS.label, name="Property_label", curie=RDFS.curie('label'), + model_uri=OMOSCHEMA.Property_label, domain=Property, range=Optional[Union[str, LabelType]]) + +slots.Property_definition = Slot(uri=IAO['0000115'], name="Property_definition", curie=IAO.curie('0000115'), + model_uri=OMOSCHEMA.Property_definition, domain=Property, range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]]) + +slots.Property_broadMatch = Slot(uri=SKOS.broadMatch, name="Property_broadMatch", curie=SKOS.curie('broadMatch'), + model_uri=OMOSCHEMA.Property_broadMatch, domain=Property, range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]]) + +slots.Property_exactMatch = Slot(uri=SKOS.exactMatch, name="Property_exactMatch", curie=SKOS.curie('exactMatch'), + model_uri=OMOSCHEMA.Property_exactMatch, domain=Property, range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]]) + +slots.Property_narrowMatch = Slot(uri=SKOS.narrowMatch, name="Property_narrowMatch", curie=SKOS.curie('narrowMatch'), + model_uri=OMOSCHEMA.Property_narrowMatch, domain=Property, range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]]) + +slots.Property_closeMatch = Slot(uri=SKOS.closeMatch, name="Property_closeMatch", curie=SKOS.curie('closeMatch'), + model_uri=OMOSCHEMA.Property_closeMatch, domain=Property, range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]]) + +slots.Property_subClassOf = Slot(uri=RDFS.subClassOf, name="Property_subClassOf", curie=RDFS.curie('subClassOf'), + model_uri=OMOSCHEMA.Property_subClassOf, domain=Property, range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]]) + +slots.HomoSapiens_id = Slot(uri=OMOSCHEMA.id, name="HomoSapiens_id", curie=OMOSCHEMA.curie('id'), + model_uri=OMOSCHEMA.HomoSapiens_id, domain=HomoSapiens, range=Union[str, HomoSapiensId], + pattern=re.compile(r'^orcid:.*')) + +slots.Agent_id = Slot(uri=OMOSCHEMA.id, name="Agent_id", curie=OMOSCHEMA.curie('id'), + model_uri=OMOSCHEMA.Agent_id, domain=Agent, range=Union[str, AgentId], + pattern=re.compile(r'^orcid:.*')) + +slots.Axiom_database_cross_reference = Slot(uri=OIO.hasDbXref, name="Axiom_database_cross_reference", curie=OIO.curie('hasDbXref'), + model_uri=OMOSCHEMA.Axiom_database_cross_reference, domain=Axiom, range=Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]]) -slots.core_property = Slot( - uri=OMOSCHEMA.core_property, - name="core_property", - curie=OMOSCHEMA.curie("core_property"), - model_uri=OMOSCHEMA.core_property, - domain=None, - range=Optional[str], -) - -slots.id = Slot( - uri=OMOSCHEMA.id, - name="id", - curie=OMOSCHEMA.curie("id"), - model_uri=OMOSCHEMA.id, - domain=None, - range=URIRef, -) - -slots.label = Slot( - uri=RDFS.label, - name="label", - curie=RDFS.curie("label"), - model_uri=OMOSCHEMA.label, - domain=None, - range=Optional[Union[str, LabelType]], -) - -slots.annotations = Slot( - uri=OMOSCHEMA.annotations, - name="annotations", - curie=OMOSCHEMA.curie("annotations"), - model_uri=OMOSCHEMA.annotations, - domain=None, - range=Optional[Union[Union[dict, Annotation], List[Union[dict, Annotation]]]], -) - -slots.definition = Slot( - uri=IAO["0000115"], - name="definition", - curie=IAO.curie("0000115"), - model_uri=OMOSCHEMA.definition, - domain=None, - range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]], -) - -slots.predicate = Slot( - uri=OMOSCHEMA.predicate, - name="predicate", - curie=OMOSCHEMA.curie("predicate"), - model_uri=OMOSCHEMA.predicate, - domain=None, - range=Optional[str], -) - -slots.object = Slot( - uri=OMOSCHEMA.object, - name="object", - curie=OMOSCHEMA.curie("object"), - model_uri=OMOSCHEMA.object, - domain=None, - range=Optional[str], -) - -slots.title = Slot( - uri=DCTERMS.title, - name="title", - curie=DCTERMS.curie("title"), - model_uri=OMOSCHEMA.title, - domain=None, - range=Optional[Union[str, NarrativeText]], -) - -slots.match_aspect = Slot( - uri=OMOSCHEMA.match_aspect, - name="match_aspect", - curie=OMOSCHEMA.curie("match_aspect"), - model_uri=OMOSCHEMA.match_aspect, - domain=None, - range=Optional[str], -) - -slots.match = Slot( - uri=OMOSCHEMA.match, - name="match", - curie=OMOSCHEMA.curie("match"), - model_uri=OMOSCHEMA.match, - domain=None, - range=Optional[str], -) - -slots.broadMatch = Slot( - uri=SKOS.broadMatch, - name="broadMatch", - curie=SKOS.curie("broadMatch"), - model_uri=OMOSCHEMA.broadMatch, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.closeMatch = Slot( - uri=SKOS.closeMatch, - name="closeMatch", - curie=SKOS.curie("closeMatch"), - model_uri=OMOSCHEMA.closeMatch, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.exactMatch = Slot( - uri=SKOS.exactMatch, - name="exactMatch", - curie=SKOS.curie("exactMatch"), - model_uri=OMOSCHEMA.exactMatch, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.narrowMatch = Slot( - uri=SKOS.narrowMatch, - name="narrowMatch", - curie=SKOS.curie("narrowMatch"), - model_uri=OMOSCHEMA.narrowMatch, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.database_cross_reference = Slot( - uri=OIO.hasDbXref, - name="database_cross_reference", - curie=OIO.curie("hasDbXref"), - model_uri=OMOSCHEMA.database_cross_reference, - domain=None, - range=Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]], -) - -slots.informative_property = Slot( - uri=OMOSCHEMA.informative_property, - name="informative_property", - curie=OMOSCHEMA.curie("informative_property"), - model_uri=OMOSCHEMA.informative_property, - domain=None, - range=Optional[str], -) - -slots.comment = Slot( - uri=RDFS.comment, - name="comment", - curie=RDFS.curie("comment"), - model_uri=OMOSCHEMA.comment, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.category = Slot( - uri=BIOLINK.category, - name="category", - curie=BIOLINK.curie("category"), - model_uri=OMOSCHEMA.category, - domain=None, - range=Optional[str], -) - -slots.image = Slot( - uri=SDO.image, - name="image", - curie=SDO.curie("image"), - model_uri=OMOSCHEMA.image, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.example_of_usage = Slot( - uri=IAO["0000112"], - name="example_of_usage", - curie=IAO.curie("0000112"), - model_uri=OMOSCHEMA.example_of_usage, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.changeNote = Slot( - uri=SKOS.changeNote, - name="changeNote", - curie=SKOS.curie("changeNote"), - model_uri=OMOSCHEMA.changeNote, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.has_curation_status = Slot( - uri=IAO["0000114"], - name="has_curation_status", - curie=IAO.curie("0000114"), - model_uri=OMOSCHEMA.has_curation_status, - domain=None, - range=Optional[str], -) - -slots.defaultLanguage = Slot( - uri=PROTEGE.defaultLanguage, - name="defaultLanguage", - curie=PROTEGE.curie("defaultLanguage"), - model_uri=OMOSCHEMA.defaultLanguage, - domain=None, - range=Optional[str], -) - -slots.language = Slot( - uri=DCTERMS.language, - name="language", - curie=DCTERMS.curie("language"), - model_uri=OMOSCHEMA.language, - domain=None, - range=Optional[str], -) - -slots.has_ontology_root_term = Slot( - uri=IAO["0000700"], - name="has_ontology_root_term", - curie=IAO.curie("0000700"), - model_uri=OMOSCHEMA.has_ontology_root_term, - domain=None, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.conformsTo = Slot( - uri=DCTERMS.conformsTo, - name="conformsTo", - curie=DCTERMS.curie("conformsTo"), - model_uri=OMOSCHEMA.conformsTo, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.license = Slot( - uri=DCTERMS.license, - name="license", - curie=DCTERMS.curie("license"), - model_uri=OMOSCHEMA.license, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.depicted_by = Slot( - uri=FOAF.depicted_by, - name="depicted_by", - curie=FOAF.curie("depicted_by"), - model_uri=OMOSCHEMA.depicted_by, - domain=None, - range=Optional[Union[Union[str, ImageId], List[Union[str, ImageId]]]], -) - -slots.page = Slot( - uri=FOAF.page, - name="page", - curie=FOAF.curie("page"), - model_uri=OMOSCHEMA.page, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.version_property = Slot( - uri=OMOSCHEMA.version_property, - name="version_property", - curie=OMOSCHEMA.curie("version_property"), - model_uri=OMOSCHEMA.version_property, - domain=None, - range=Optional[str], -) - -slots.versionIRI = Slot( - uri=OWL.versionIRI, - name="versionIRI", - curie=OWL.curie("versionIRI"), - model_uri=OMOSCHEMA.versionIRI, - domain=None, - range=Optional[Union[str, URIorCURIE]], -) - -slots.versionInfo = Slot( - uri=OWL.versionInfo, - name="versionInfo", - curie=OWL.curie("versionInfo"), - model_uri=OMOSCHEMA.versionInfo, - domain=None, - range=Optional[str], -) - -slots.obsoletion_related_property = Slot( - uri=OMOSCHEMA.obsoletion_related_property, - name="obsoletion_related_property", - curie=OMOSCHEMA.curie("obsoletion_related_property"), - model_uri=OMOSCHEMA.obsoletion_related_property, - domain=None, - range=Optional[str], -) - -slots.deprecated = Slot( - uri=OWL.deprecated, - name="deprecated", - curie=OWL.curie("deprecated"), - model_uri=OMOSCHEMA.deprecated, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.term_replaced_by = Slot( - uri=IAO["0100001"], - name="term_replaced_by", - curie=IAO.curie("0100001"), - model_uri=OMOSCHEMA.term_replaced_by, - domain=None, - range=Optional[Union[dict, Any]], -) - -slots.has_obsolescence_reason = Slot( - uri=IAO["0000231"], - name="has_obsolescence_reason", - curie=IAO.curie("0000231"), - model_uri=OMOSCHEMA.has_obsolescence_reason, - domain=None, - range=Optional[str], -) - -slots.consider = Slot( - uri=OIO.consider, - name="consider", - curie=OIO.curie("consider"), - model_uri=OMOSCHEMA.consider, - domain=None, - range=Optional[Union[Union[dict, Any], List[Union[dict, Any]]]], -) - -slots.has_alternative_id = Slot( - uri=OIO.hasAlternativeId, - name="has_alternative_id", - curie=OIO.curie("hasAlternativeId"), - model_uri=OMOSCHEMA.has_alternative_id, - domain=None, - range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]], -) - -slots.temporal_interpretation = Slot( - uri=RO["0001900"], - name="temporal_interpretation", - curie=RO.curie("0001900"), - model_uri=OMOSCHEMA.temporal_interpretation, - domain=None, - range=Optional[Union[str, NamedIndividualId]], -) - -slots.never_in_taxon = Slot( - uri=RO["0002161"], - name="never_in_taxon", - curie=RO.curie("0002161"), - model_uri=OMOSCHEMA.never_in_taxon, - domain=None, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.is_a_defining_property_chain_axiom = Slot( - uri=RO["0002581"], - name="is_a_defining_property_chain_axiom", - curie=RO.curie("0002581"), - model_uri=OMOSCHEMA.is_a_defining_property_chain_axiom, - domain=None, - range=Optional[str], -) - -slots.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive = Slot( - uri=RO["0002582"], - name="is_a_defining_property_chain_axiom_where_second_argument_is_reflexive", - curie=RO.curie("0002582"), - model_uri=OMOSCHEMA.is_a_defining_property_chain_axiom_where_second_argument_is_reflexive, - domain=None, - range=Optional[str], -) - -slots.provenance_property = Slot( - uri=OMOSCHEMA.provenance_property, - name="provenance_property", - curie=OMOSCHEMA.curie("provenance_property"), - model_uri=OMOSCHEMA.provenance_property, - domain=None, - range=Optional[str], -) - -slots.contributor = Slot( - uri=DCTERMS.contributor, - name="contributor", - curie=DCTERMS.curie("contributor"), - model_uri=OMOSCHEMA.contributor, - domain=None, - range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]], -) - -slots.creator = Slot( - uri=DCTERMS.creator, - name="creator", - curie=DCTERMS.curie("creator"), - model_uri=OMOSCHEMA.creator, - domain=None, - range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]], -) - -slots.created = Slot( - uri=DCTERMS.created, - name="created", - curie=DCTERMS.curie("created"), - model_uri=OMOSCHEMA.created, - domain=None, - range=Optional[str], -) - -slots.date = Slot( - uri=DCTERMS.date, - name="date", - curie=DCTERMS.curie("date"), - model_uri=OMOSCHEMA.date, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.source = Slot( - uri=DCTERMS.source, - name="source", - curie=DCTERMS.curie("source"), - model_uri=OMOSCHEMA.source, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.created_by = Slot( - uri=OIO.created_by, - name="created_by", - curie=OIO.curie("created_by"), - model_uri=OMOSCHEMA.created_by, - domain=None, - range=Optional[str], -) - -slots.creation_date = Slot( - uri=OIO.creation_date, - name="creation_date", - curie=OIO.curie("creation_date"), - model_uri=OMOSCHEMA.creation_date, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.date_retrieved = Slot( - uri=OIO.date_retrieved, - name="date_retrieved", - curie=OIO.curie("date_retrieved"), - model_uri=OMOSCHEMA.date_retrieved, - domain=None, - range=Optional[str], -) - -slots.editor_note = Slot( - uri=IAO["0000116"], - name="editor_note", - curie=IAO.curie("0000116"), - model_uri=OMOSCHEMA.editor_note, - domain=None, - range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]], -) - -slots.term_editor = Slot( - uri=IAO["0000117"], - name="term_editor", - curie=IAO.curie("0000117"), - model_uri=OMOSCHEMA.term_editor, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.definition_source = Slot( - uri=IAO["0000119"], - name="definition_source", - curie=IAO.curie("0000119"), - model_uri=OMOSCHEMA.definition_source, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.curator_note = Slot( - uri=IAO["0000232"], - name="curator_note", - curie=IAO.curie("0000232"), - model_uri=OMOSCHEMA.curator_note, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.term_tracker_item = Slot( - uri=IAO["0000233"], - name="term_tracker_item", - curie=IAO.curie("0000233"), - model_uri=OMOSCHEMA.term_tracker_item, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.ontology_term_requester = Slot( - uri=IAO["0000234"], - name="ontology_term_requester", - curie=IAO.curie("0000234"), - model_uri=OMOSCHEMA.ontology_term_requester, - domain=None, - range=Optional[str], -) - -slots.imported_from = Slot( - uri=IAO["0000412"], - name="imported_from", - curie=IAO.curie("0000412"), - model_uri=OMOSCHEMA.imported_from, - domain=None, - range=Optional[Union[Union[str, NamedIndividualId], List[Union[str, NamedIndividualId]]]], -) - -slots.has_axiom_label = Slot( - uri=IAO["0010000"], - name="has_axiom_label", - curie=IAO.curie("0010000"), - model_uri=OMOSCHEMA.has_axiom_label, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.shortcut_annotation_property = Slot( - uri=OMOSCHEMA.shortcut_annotation_property, - name="shortcut_annotation_property", - curie=OMOSCHEMA.curie("shortcut_annotation_property"), - model_uri=OMOSCHEMA.shortcut_annotation_property, - domain=None, - range=Optional[str], -) - -slots.disconnected_from = Slot( - uri=OMOSCHEMA.disconnected_from, - name="disconnected_from", - curie=OMOSCHEMA.curie("disconnected_from"), - model_uri=OMOSCHEMA.disconnected_from, - domain=None, - range=Optional[Union[str, ClassId]], -) - -slots.excluded_axiom = Slot( - uri=OMOSCHEMA.excluded_axiom, - name="excluded_axiom", - curie=OMOSCHEMA.curie("excluded_axiom"), - model_uri=OMOSCHEMA.excluded_axiom, - domain=None, - range=Optional[str], -) - -slots.excluded_from_QC_check = Slot( - uri=OMOSCHEMA.excluded_from_QC_check, - name="excluded_from_QC_check", - curie=OMOSCHEMA.curie("excluded_from_QC_check"), - model_uri=OMOSCHEMA.excluded_from_QC_check, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.excluded_subClassOf = Slot( - uri=OMOSCHEMA.excluded_subClassOf, - name="excluded_subClassOf", - curie=OMOSCHEMA.curie("excluded_subClassOf"), - model_uri=OMOSCHEMA.excluded_subClassOf, - domain=None, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.excluded_synonym = Slot( - uri=OMOSCHEMA.excluded_synonym, - name="excluded_synonym", - curie=OMOSCHEMA.curie("excluded_synonym"), - model_uri=OMOSCHEMA.excluded_synonym, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.should_conform_to = Slot( - uri=OMOSCHEMA.should_conform_to, - name="should_conform_to", - curie=OMOSCHEMA.curie("should_conform_to"), - model_uri=OMOSCHEMA.should_conform_to, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.has_rank = Slot( - uri=OMOSCHEMA.has_rank, - name="has_rank", - curie=OMOSCHEMA.curie("has_rank"), - model_uri=OMOSCHEMA.has_rank, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.alternative_term = Slot( - uri=IAO["0000118"], - name="alternative_term", - curie=IAO.curie("0000118"), - model_uri=OMOSCHEMA.alternative_term, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.ISA_alternative_term = Slot( - uri=OBI["0001847"], - name="ISA_alternative_term", - curie=OBI.curie("0001847"), - model_uri=OMOSCHEMA.ISA_alternative_term, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.IEDB_alternative_term = Slot( - uri=OBI["9991118"], - name="IEDB_alternative_term", - curie=OBI.curie("9991118"), - model_uri=OMOSCHEMA.IEDB_alternative_term, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.OBO_foundry_unique_label = Slot( - uri=IAO["0000589"], - name="OBO_foundry_unique_label", - curie=IAO.curie("0000589"), - model_uri=OMOSCHEMA.OBO_foundry_unique_label, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.synonym = Slot( - uri=OIO.hasSynonym, - name="synonym", - curie=OIO.curie("hasSynonym"), - model_uri=OMOSCHEMA.synonym, - domain=None, - range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]], -) - -slots.editor_preferred_term = Slot( - uri=IAO["0000111"], - name="editor_preferred_term", - curie=IAO.curie("0000111"), - model_uri=OMOSCHEMA.editor_preferred_term, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.has_exact_synonym = Slot( - uri=OIO.hasExactSynonym, - name="has_exact_synonym", - curie=OIO.curie("hasExactSynonym"), - model_uri=OMOSCHEMA.has_exact_synonym, - domain=None, - range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]], -) - -slots.has_narrow_synonym = Slot( - uri=OIO.hasNarrowSynonym, - name="has_narrow_synonym", - curie=OIO.curie("hasNarrowSynonym"), - model_uri=OMOSCHEMA.has_narrow_synonym, - domain=None, - range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]], -) - -slots.has_related_synonym = Slot( - uri=OIO.hasRelatedSynonym, - name="has_related_synonym", - curie=OIO.curie("hasRelatedSynonym"), - model_uri=OMOSCHEMA.has_related_synonym, - domain=None, - range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]], -) - -slots.has_broad_synonym = Slot( - uri=OIO.hasBroadSynonym, - name="has_broad_synonym", - curie=OIO.curie("hasBroadSynonym"), - model_uri=OMOSCHEMA.has_broad_synonym, - domain=None, - range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]], -) - -slots.has_synonym_type = Slot( - uri=OIO.hasSynonymType, - name="has_synonym_type", - curie=OIO.curie("hasSynonymType"), - model_uri=OMOSCHEMA.has_synonym_type, - domain=None, - range=Optional[Union[Union[str, AnnotationPropertyId], List[Union[str, AnnotationPropertyId]]]], -) - -slots.has_obo_namespace = Slot( - uri=OIO.hasOBONamespace, - name="has_obo_namespace", - curie=OIO.curie("hasOBONamespace"), - model_uri=OMOSCHEMA.has_obo_namespace, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.in_subset = Slot( - uri=OIO.inSubset, - name="in_subset", - curie=OIO.curie("inSubset"), - model_uri=OMOSCHEMA.in_subset, - domain=None, - range=Optional[Union[Union[str, SubsetId], List[Union[str, SubsetId]]]], -) - -slots.reification_predicate = Slot( - uri=OMOSCHEMA.reification_predicate, - name="reification_predicate", - curie=OMOSCHEMA.curie("reification_predicate"), - model_uri=OMOSCHEMA.reification_predicate, - domain=None, - range=Optional[str], -) - -slots.annotatedProperty = Slot( - uri=OWL.annotatedProperty, - name="annotatedProperty", - curie=OWL.curie("annotatedProperty"), - model_uri=OMOSCHEMA.annotatedProperty, - domain=None, - range=Optional[Union[str, AnnotationPropertyId]], -) - -slots.annotatedSource = Slot( - uri=OWL.annotatedSource, - name="annotatedSource", - curie=OWL.curie("annotatedSource"), - model_uri=OMOSCHEMA.annotatedSource, - domain=None, - range=Optional[Union[str, NamedObjectId]], -) - -slots.annotatedTarget = Slot( - uri=OWL.annotatedTarget, - name="annotatedTarget", - curie=OWL.curie("annotatedTarget"), - model_uri=OMOSCHEMA.annotatedTarget, - domain=None, - range=Optional[Union[dict, Any]], -) - -slots.imports = Slot( - uri=OWL.imports, - name="imports", - curie=OWL.curie("imports"), - model_uri=OMOSCHEMA.imports, - domain=None, - range=Optional[str], -) - -slots.logical_predicate = Slot( - uri=OMOSCHEMA.logical_predicate, - name="logical_predicate", - curie=OMOSCHEMA.curie("logical_predicate"), - model_uri=OMOSCHEMA.logical_predicate, - domain=None, - range=Optional[str], -) - -slots.cardinality = Slot( - uri=OWL.cardinality, - name="cardinality", - curie=OWL.curie("cardinality"), - model_uri=OMOSCHEMA.cardinality, - domain=None, - range=Optional[str], -) - -slots.complementOf = Slot( - uri=OWL.complementOf, - name="complementOf", - curie=OWL.curie("complementOf"), - model_uri=OMOSCHEMA.complementOf, - domain=None, - range=Optional[str], -) - -slots.disjointWith = Slot( - uri=OWL.disjointWith, - name="disjointWith", - curie=OWL.curie("disjointWith"), - model_uri=OMOSCHEMA.disjointWith, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.distinctMembers = Slot( - uri=OWL.distinctMembers, - name="distinctMembers", - curie=OWL.curie("distinctMembers"), - model_uri=OMOSCHEMA.distinctMembers, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.equivalentClass = Slot( - uri=OWL.equivalentClass, - name="equivalentClass", - curie=OWL.curie("equivalentClass"), - model_uri=OMOSCHEMA.equivalentClass, - domain=None, - range=Optional[Union[Union[dict, ClassExpression], List[Union[dict, ClassExpression]]]], -) - -slots.sameAs = Slot( - uri=OWL.sameAs, - name="sameAs", - curie=OWL.curie("sameAs"), - model_uri=OMOSCHEMA.sameAs, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.equivalentProperty = Slot( - uri=OWL.equivalentProperty, - name="equivalentProperty", - curie=OWL.curie("equivalentProperty"), - model_uri=OMOSCHEMA.equivalentProperty, - domain=None, - range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]], -) - -slots.hasValue = Slot( - uri=OWL.hasValue, - name="hasValue", - curie=OWL.curie("hasValue"), - model_uri=OMOSCHEMA.hasValue, - domain=None, - range=Optional[Union[dict, Any]], -) - -slots.intersectionOf = Slot( - uri=OWL.intersectionOf, - name="intersectionOf", - curie=OWL.curie("intersectionOf"), - model_uri=OMOSCHEMA.intersectionOf, - domain=None, - range=Optional[Union[dict, ClassExpression]], -) - -slots.inverseOf = Slot( - uri=OWL.inverseOf, - name="inverseOf", - curie=OWL.curie("inverseOf"), - model_uri=OMOSCHEMA.inverseOf, - domain=None, - range=Optional[Union[str, PropertyId]], -) - -slots.maxQualifiedCardinality = Slot( - uri=OWL.maxQualifiedCardinality, - name="maxQualifiedCardinality", - curie=OWL.curie("maxQualifiedCardinality"), - model_uri=OMOSCHEMA.maxQualifiedCardinality, - domain=None, - range=Optional[int], -) - -slots.members = Slot( - uri=OWL.members, - name="members", - curie=OWL.curie("members"), - model_uri=OMOSCHEMA.members, - domain=None, - range=Optional[Union[dict, Thing]], -) - -slots.minCardinality = Slot( - uri=OWL.minCardinality, - name="minCardinality", - curie=OWL.curie("minCardinality"), - model_uri=OMOSCHEMA.minCardinality, - domain=None, - range=Optional[int], -) - -slots.minQualifiedCardinality = Slot( - uri=OWL.minQualifiedCardinality, - name="minQualifiedCardinality", - curie=OWL.curie("minQualifiedCardinality"), - model_uri=OMOSCHEMA.minQualifiedCardinality, - domain=None, - range=Optional[int], -) - -slots.onClass = Slot( - uri=OWL.onClass, - name="onClass", - curie=OWL.curie("onClass"), - model_uri=OMOSCHEMA.onClass, - domain=None, - range=Optional[Union[dict, ClassExpression]], -) - -slots.onProperty = Slot( - uri=OWL.onProperty, - name="onProperty", - curie=OWL.curie("onProperty"), - model_uri=OMOSCHEMA.onProperty, - domain=None, - range=Optional[Union[Union[dict, PropertyExpression], List[Union[dict, PropertyExpression]]]], -) - -slots.oneOf = Slot( - uri=OWL.oneOf, - name="oneOf", - curie=OWL.curie("oneOf"), - model_uri=OMOSCHEMA.oneOf, - domain=None, - range=Optional[Union[dict, ClassExpression]], -) - -slots.propertyChainAxiom = Slot( - uri=OWL.propertyChainAxiom, - name="propertyChainAxiom", - curie=OWL.curie("propertyChainAxiom"), - model_uri=OMOSCHEMA.propertyChainAxiom, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.qualifiedCardinality = Slot( - uri=OWL.qualifiedCardinality, - name="qualifiedCardinality", - curie=OWL.curie("qualifiedCardinality"), - model_uri=OMOSCHEMA.qualifiedCardinality, - domain=None, - range=Optional[str], -) - -slots.allValuesFrom = Slot( - uri=OWL.allValuesFrom, - name="allValuesFrom", - curie=OWL.curie("allValuesFrom"), - model_uri=OMOSCHEMA.allValuesFrom, - domain=None, - range=Optional[str], -) - -slots.someValuesFrom = Slot( - uri=OWL.someValuesFrom, - name="someValuesFrom", - curie=OWL.curie("someValuesFrom"), - model_uri=OMOSCHEMA.someValuesFrom, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.unionOf = Slot( - uri=OWL.unionOf, - name="unionOf", - curie=OWL.curie("unionOf"), - model_uri=OMOSCHEMA.unionOf, - domain=None, - range=Optional[str], -) - -slots.domain = Slot( - uri=RDFS.domain, - name="domain", - curie=RDFS.curie("domain"), - model_uri=OMOSCHEMA.domain, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.range = Slot( - uri=RDFS.range, - name="range", - curie=RDFS.curie("range"), - model_uri=OMOSCHEMA.range, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.isDefinedBy = Slot( - uri=RDFS.isDefinedBy, - name="isDefinedBy", - curie=RDFS.curie("isDefinedBy"), - model_uri=OMOSCHEMA.isDefinedBy, - domain=None, - range=Optional[Union[str, OntologyId]], -) - -slots.seeAlso = Slot( - uri=RDFS.seeAlso, - name="seeAlso", - curie=RDFS.curie("seeAlso"), - model_uri=OMOSCHEMA.seeAlso, - domain=None, - range=Optional[Union[Union[dict, Thing], List[Union[dict, Thing]]]], -) - -slots.type = Slot( - uri=RDF.type, - name="type", - curie=RDF.curie("type"), - model_uri=OMOSCHEMA.type, - domain=None, - range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]], -) - -slots.subClassOf = Slot( - uri=RDFS.subClassOf, - name="subClassOf", - curie=RDFS.curie("subClassOf"), - model_uri=OMOSCHEMA.subClassOf, - domain=None, - range=Optional[Union[Union[dict, ClassExpression], List[Union[dict, ClassExpression]]]], -) - -slots.oboInOwl_id = Slot( - uri=OIO.id, - name="oboInOwl_id", - curie=OIO.curie("id"), - model_uri=OMOSCHEMA.oboInOwl_id, - domain=None, - range=Optional[str], -) - -slots.oboInOwl_ontology = Slot( - uri=OIO.ontology, - name="oboInOwl_ontology", - curie=OIO.curie("ontology"), - model_uri=OMOSCHEMA.oboInOwl_ontology, - domain=None, - range=Optional[str], -) - -slots.is_class_level = Slot( - uri=OIO.is_class_level, - name="is_class_level", - curie=OIO.curie("is_class_level"), - model_uri=OMOSCHEMA.is_class_level, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.is_cyclic = Slot( - uri=OIO.is_cyclic, - name="is_cyclic", - curie=OIO.curie("is_cyclic"), - model_uri=OMOSCHEMA.is_cyclic, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.is_inferred = Slot( - uri=OIO.is_inferred, - name="is_inferred", - curie=OIO.curie("is_inferred"), - model_uri=OMOSCHEMA.is_inferred, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.is_metadata_tag = Slot( - uri=OIO.is_metadata_tag, - name="is_metadata_tag", - curie=OIO.curie("is_metadata_tag"), - model_uri=OMOSCHEMA.is_metadata_tag, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.is_transitive = Slot( - uri=OIO.is_transitive, - name="is_transitive", - curie=OIO.curie("is_transitive"), - model_uri=OMOSCHEMA.is_transitive, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.notes = Slot( - uri=OIO.notes, - name="notes", - curie=OIO.curie("notes"), - model_uri=OMOSCHEMA.notes, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.shorthand = Slot( - uri=OIO.shorthand, - name="shorthand", - curie=OIO.curie("shorthand"), - model_uri=OMOSCHEMA.shorthand, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.url = Slot( - uri=OIO.url, - name="url", - curie=OIO.curie("url"), - model_uri=OMOSCHEMA.url, - domain=None, - range=Optional[str], -) - -slots.evidence = Slot( - uri=OIO.evidence, - name="evidence", - curie=OIO.curie("evidence"), - model_uri=OMOSCHEMA.evidence, - domain=None, - range=Optional[str], -) - -slots.external_ontology = Slot( - uri=OIO.external_ontology, - name="external_ontology", - curie=OIO.curie("external_ontology"), - model_uri=OMOSCHEMA.external_ontology, - domain=None, - range=Optional[Union[str, List[str]]], -) - -slots.NCIT_definition_source = Slot( - uri=NCIT.P378, - name="NCIT_definition_source", - curie=NCIT.curie("P378"), - model_uri=OMOSCHEMA.NCIT_definition_source, - domain=None, - range=Optional[str], -) - -slots.NCIT_term_type = Slot( - uri=NCIT.P383, - name="NCIT_term_type", - curie=NCIT.curie("P383"), - model_uri=OMOSCHEMA.NCIT_term_type, - domain=None, - range=Optional[str], -) - -slots.NCIT_term_source = Slot( - uri=NCIT.P384, - name="NCIT_term_source", - curie=NCIT.curie("P384"), - model_uri=OMOSCHEMA.NCIT_term_source, - domain=None, - range=Optional[str], -) - -slots.annotation__predicate = Slot( - uri=OMOSCHEMA.predicate, - name="annotation__predicate", - curie=OMOSCHEMA.curie("predicate"), - model_uri=OMOSCHEMA.annotation__predicate, - domain=None, - range=Optional[str], -) - -slots.annotation__object = Slot( - uri=OMOSCHEMA.object, - name="annotation__object", - curie=OMOSCHEMA.curie("object"), - model_uri=OMOSCHEMA.annotation__object, - domain=None, - range=Optional[str], -) - -slots.Ontology_title = Slot( - uri=DCTERMS.title, - name="Ontology_title", - curie=DCTERMS.curie("title"), - model_uri=OMOSCHEMA.Ontology_title, - domain=Ontology, - range=Union[str, NarrativeText], -) - -slots.Ontology_license = Slot( - uri=DCTERMS.license, - name="Ontology_license", - curie=DCTERMS.curie("license"), - model_uri=OMOSCHEMA.Ontology_license, - domain=Ontology, - range=Union[dict, Thing], -) - -slots.Ontology_versionIRI = Slot( - uri=OWL.versionIRI, - name="Ontology_versionIRI", - curie=OWL.curie("versionIRI"), - model_uri=OMOSCHEMA.Ontology_versionIRI, - domain=Ontology, - range=Union[str, URIorCURIE], -) - -slots.Ontology_versionInfo = Slot( - uri=OWL.versionInfo, - name="Ontology_versionInfo", - curie=OWL.curie("versionInfo"), - model_uri=OMOSCHEMA.Ontology_versionInfo, - domain=Ontology, - range=str, -) - -slots.Class_label = Slot( - uri=RDFS.label, - name="Class_label", - curie=RDFS.curie("label"), - model_uri=OMOSCHEMA.Class_label, - domain=Class, - range=Union[str, LabelType], -) - -slots.Class_definition = Slot( - uri=IAO["0000115"], - name="Class_definition", - curie=IAO.curie("0000115"), - model_uri=OMOSCHEMA.Class_definition, - domain=Class, - range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]], -) - -slots.Class_broadMatch = Slot( - uri=SKOS.broadMatch, - name="Class_broadMatch", - curie=SKOS.curie("broadMatch"), - model_uri=OMOSCHEMA.Class_broadMatch, - domain=Class, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.Class_exactMatch = Slot( - uri=SKOS.exactMatch, - name="Class_exactMatch", - curie=SKOS.curie("exactMatch"), - model_uri=OMOSCHEMA.Class_exactMatch, - domain=Class, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.Class_narrowMatch = Slot( - uri=SKOS.narrowMatch, - name="Class_narrowMatch", - curie=SKOS.curie("narrowMatch"), - model_uri=OMOSCHEMA.Class_narrowMatch, - domain=Class, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.Class_closeMatch = Slot( - uri=SKOS.closeMatch, - name="Class_closeMatch", - curie=SKOS.curie("closeMatch"), - model_uri=OMOSCHEMA.Class_closeMatch, - domain=Class, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.Class_subClassOf = Slot( - uri=RDFS.subClassOf, - name="Class_subClassOf", - curie=RDFS.curie("subClassOf"), - model_uri=OMOSCHEMA.Class_subClassOf, - domain=Class, - range=Optional[Union[Union[str, ClassId], List[Union[str, ClassId]]]], -) - -slots.Property_label = Slot( - uri=RDFS.label, - name="Property_label", - curie=RDFS.curie("label"), - model_uri=OMOSCHEMA.Property_label, - domain=Property, - range=Optional[Union[str, LabelType]], -) - -slots.Property_definition = Slot( - uri=IAO["0000115"], - name="Property_definition", - curie=IAO.curie("0000115"), - model_uri=OMOSCHEMA.Property_definition, - domain=Property, - range=Optional[Union[Union[str, NarrativeText], List[Union[str, NarrativeText]]]], -) - -slots.Property_broadMatch = Slot( - uri=SKOS.broadMatch, - name="Property_broadMatch", - curie=SKOS.curie("broadMatch"), - model_uri=OMOSCHEMA.Property_broadMatch, - domain=Property, - range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]], -) - -slots.Property_exactMatch = Slot( - uri=SKOS.exactMatch, - name="Property_exactMatch", - curie=SKOS.curie("exactMatch"), - model_uri=OMOSCHEMA.Property_exactMatch, - domain=Property, - range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]], -) - -slots.Property_narrowMatch = Slot( - uri=SKOS.narrowMatch, - name="Property_narrowMatch", - curie=SKOS.curie("narrowMatch"), - model_uri=OMOSCHEMA.Property_narrowMatch, - domain=Property, - range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]], -) - -slots.Property_closeMatch = Slot( - uri=SKOS.closeMatch, - name="Property_closeMatch", - curie=SKOS.curie("closeMatch"), - model_uri=OMOSCHEMA.Property_closeMatch, - domain=Property, - range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]], -) - -slots.Property_subClassOf = Slot( - uri=RDFS.subClassOf, - name="Property_subClassOf", - curie=RDFS.curie("subClassOf"), - model_uri=OMOSCHEMA.Property_subClassOf, - domain=Property, - range=Optional[Union[Union[str, PropertyId], List[Union[str, PropertyId]]]], -) - -slots.HomoSapiens_id = Slot( - uri=OMOSCHEMA.id, - name="HomoSapiens_id", - curie=OMOSCHEMA.curie("id"), - model_uri=OMOSCHEMA.HomoSapiens_id, - domain=HomoSapiens, - range=Union[str, HomoSapiensId], - pattern=re.compile(r"^orcid:.*"), -) - -slots.Agent_id = Slot( - uri=OMOSCHEMA.id, - name="Agent_id", - curie=OMOSCHEMA.curie("id"), - model_uri=OMOSCHEMA.Agent_id, - domain=Agent, - range=Union[str, AgentId], - pattern=re.compile(r"^orcid:.*"), -) - -slots.Axiom_database_cross_reference = Slot( - uri=OIO.hasDbXref, - name="Axiom_database_cross_reference", - curie=OIO.curie("hasDbXref"), - model_uri=OMOSCHEMA.Axiom_database_cross_reference, - domain=Axiom, - range=Optional[Union[Union[str, CURIELiteral], List[Union[str, CURIELiteral]]]], -) - -slots.ObsoleteAspect_label = Slot( - uri=RDFS.label, - name="ObsoleteAspect_label", - curie=RDFS.curie("label"), - model_uri=OMOSCHEMA.ObsoleteAspect_label, - domain=None, - range=Optional[Union[str, LabelType]], - pattern=re.compile(r"^obsolete"), -) +slots.ObsoleteAspect_label = Slot(uri=RDFS.label, name="ObsoleteAspect_label", curie=RDFS.curie('label'), + model_uri=OMOSCHEMA.ObsoleteAspect_label, domain=None, range=Optional[Union[str, LabelType]], + pattern=re.compile(r'^obsolete')) diff --git a/src/oaklib/datamodels/ontology_metadata.yaml b/src/oaklib/datamodels/ontology_metadata.yaml index 127dccacd..077981824 100644 --- a/src/oaklib/datamodels/ontology_metadata.yaml +++ b/src/oaklib/datamodels/ontology_metadata.yaml @@ -1,4 +1,4 @@ -id: http://purl.obolibrary.org/obo/omo/schema +id: https://w3id.org/oak/ontology-metadata name: Ontology-Metadata title: Ontology Metadata Ontology Schema description: >- @@ -11,7 +11,7 @@ default_curi_maps: - semweb_context prefixes: - omoschema: http://purl.obolibrary.org/obo/omo/schema/ + omoschema: https://w3id.org/oak/ontology-metadata/ obo: http://purl.obolibrary.org/obo/ RO: http://purl.obolibrary.org/obo/RO_ OMO: http://purl.obolibrary.org/obo/OMO_ @@ -1309,4 +1309,29 @@ enums: description: >- Text definitions and logical forms should match meaning: omoschema:DCC.S11 + MatchTextAndLogicalGenusNotInText: + is_a: DefinitionConstraint + description: >- + The genus in the logical definition should be in the text definition + meaning: omoschema:DCC.S11.1 + MatchTextAndLogicalDifferentiaNotInText: + is_a: DefinitionConstraint + description: >- + The differentia in the logical definition should be in the text definition + meaning: omoschema:DCC.S11.2 + MatchTextAndReference: + is_a: DefinitionConstraint + description: >- + Text definitions and cited references and provenance for the text definition should match + meaning: omoschema:DCC.S20 + ReferenceNotFound: + is_a: MatchTextAndReference + description: >- + The citation for the reference cannot be found + meaning: omoschema:DCC.S20.1 + ReferenceIsRetracted: + is_a: MatchTextAndReference + description: >- + The citation for the reference is retracted + meaning: omoschema:DCC.S20.2 diff --git a/src/oaklib/datamodels/validation_datamodel.py b/src/oaklib/datamodels/validation_datamodel.py index 3da7b47a3..8f4f3a1c8 100644 --- a/src/oaklib/datamodels/validation_datamodel.py +++ b/src/oaklib/datamodels/validation_datamodel.py @@ -1,5 +1,5 @@ # Auto generated from validation_datamodel.yaml by pythongen.py version: 0.0.1 -# Generation date: 2024-03-07T21:21:02 +# Generation date: 2024-04-14T16:59:08 # Schema: validaton-results # # id: https://w3id.org/linkml/validation_results @@ -8,43 +8,22 @@ import dataclasses import re +from jsonasobj2 import JsonObj, as_dict +from typing import Optional, List, Union, Dict, ClassVar, Any from dataclasses import dataclass -from typing import Any, ClassVar, Dict, List, Optional, Union +from datetime import date, datetime +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions -from jsonasobj2 import JsonObj, as_dict -from linkml_runtime.linkml_model.meta import ( - EnumDefinition, - PermissibleValue, - PvFormulaOptions, -) -from linkml_runtime.linkml_model.types import ( - Boolean, - Float, - Integer, - String, - Uriorcurie, -) -from linkml_runtime.utils.curienamespace import CurieNamespace -from linkml_runtime.utils.dataclass_extensions_376 import ( - dataclasses_init_fn_with_kwargs, -) -from linkml_runtime.utils.enumerations import EnumDefinitionImpl -from linkml_runtime.utils.formatutils import camelcase, sfx, underscore -from linkml_runtime.utils.metamodelcore import ( - Bool, - URIorCURIE, - bnode, - empty_dict, - empty_list, -) from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.yamlutils import ( - YAMLRoot, - extended_float, - extended_int, - extended_str, -) +from linkml_runtime.utils.metamodelcore import empty_list, empty_dict, bnode +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str, extended_float, extended_int +from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs +from linkml_runtime.utils.formatutils import camelcase, underscore, sfx +from linkml_runtime.utils.enumerations import EnumDefinitionImpl from rdflib import Namespace, URIRef +from linkml_runtime.utils.curienamespace import CurieNamespace +from linkml_runtime.linkml_model.types import Boolean, Float, Integer, String, Uriorcurie +from linkml_runtime.utils.metamodelcore import Bool, URIorCURIE metamodel_version = "1.7.0" version = None @@ -53,22 +32,21 @@ dataclasses._init_fn = dataclasses_init_fn_with_kwargs # Namespaces -LINKML = CurieNamespace("linkml", "https://w3id.org/linkml/") -OWL = CurieNamespace("owl", "http://www.w3.org/2002/07/owl#") -PAV = CurieNamespace("pav", "http://purl.org/pav/") -RDF = CurieNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#") -RDFS = CurieNamespace("rdfs", "http://www.w3.org/2000/01/rdf-schema#") -SCHEMA = CurieNamespace("schema", "http://schema.org/") -SH = CurieNamespace("sh", "http://www.w3.org/ns/shacl#") -SKOS = CurieNamespace("skos", "http://www.w3.org/2004/02/skos/core#") -VM = CurieNamespace("vm", "https://w3id.org/linkml/validation-model/") -XSD = CurieNamespace("xsd", "http://www.w3.org/2001/XMLSchema#") +LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') +OWL = CurieNamespace('owl', 'http://www.w3.org/2002/07/owl#') +PAV = CurieNamespace('pav', 'http://purl.org/pav/') +RDF = CurieNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#') +RDFS = CurieNamespace('rdfs', 'http://www.w3.org/2000/01/rdf-schema#') +SCHEMA = CurieNamespace('schema', 'http://schema.org/') +SH = CurieNamespace('sh', 'http://www.w3.org/ns/shacl#') +SKOS = CurieNamespace('skos', 'http://www.w3.org/2004/02/skos/core#') +VM = CurieNamespace('vm', 'https://w3id.org/linkml/validation-model/') +XSD = CurieNamespace('xsd', 'http://www.w3.org/2001/XMLSchema#') DEFAULT_ = VM # Types - # Class references class NamedResourceId(URIorCURIE): pass @@ -151,7 +129,6 @@ class ValidationConfiguration(YAMLRoot): """ Configuration parameters for execution of a validation report """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["ValidationConfiguration"] @@ -160,34 +137,31 @@ class ValidationConfiguration(YAMLRoot): class_model_uri: ClassVar[URIRef] = VM.ValidationConfiguration max_number_results_per_type: Optional[int] = None - type_severity_map: Optional[ - Union[ - Dict[Union[str, TypeSeverityKeyValueType], Union[dict, "TypeSeverityKeyValue"]], - List[Union[dict, "TypeSeverityKeyValue"]], - ] - ] = empty_dict() + type_severity_map: Optional[Union[Dict[Union[str, TypeSeverityKeyValueType], Union[dict, "TypeSeverityKeyValue"]], List[Union[dict, "TypeSeverityKeyValue"]]]] = empty_dict() schema_path: Optional[str] = None + lookup_references: Optional[Union[bool, Bool]] = None prompt_info: Optional[str] = None + documentation_objects: Optional[Union[str, List[str]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.max_number_results_per_type is not None and not isinstance( - self.max_number_results_per_type, int - ): + if self.max_number_results_per_type is not None and not isinstance(self.max_number_results_per_type, int): self.max_number_results_per_type = int(self.max_number_results_per_type) - self._normalize_inlined_as_dict( - slot_name="type_severity_map", - slot_type=TypeSeverityKeyValue, - key_name="type", - keyed=True, - ) + self._normalize_inlined_as_dict(slot_name="type_severity_map", slot_type=TypeSeverityKeyValue, key_name="type", keyed=True) if self.schema_path is not None and not isinstance(self.schema_path, str): self.schema_path = str(self.schema_path) + if self.lookup_references is not None and not isinstance(self.lookup_references, Bool): + self.lookup_references = Bool(self.lookup_references) + if self.prompt_info is not None and not isinstance(self.prompt_info, str): self.prompt_info = str(self.prompt_info) + if not isinstance(self.documentation_objects, list): + self.documentation_objects = [self.documentation_objects] if self.documentation_objects is not None else [] + self.documentation_objects = [v if isinstance(v, str) else str(v) for v in self.documentation_objects] + super().__post_init__(**kwargs) @@ -196,7 +170,6 @@ class RepairConfiguration(YAMLRoot): """ Configuration parameters for execution of validation repairs """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["RepairConfiguration"] @@ -208,12 +181,8 @@ class RepairConfiguration(YAMLRoot): dry_run: Optional[Union[bool, Bool]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): - if self.validation_configuration is not None and not isinstance( - self.validation_configuration, ValidationConfiguration - ): - self.validation_configuration = ValidationConfiguration( - **as_dict(self.validation_configuration) - ) + if self.validation_configuration is not None and not isinstance(self.validation_configuration, ValidationConfiguration): + self.validation_configuration = ValidationConfiguration(**as_dict(self.validation_configuration)) if self.dry_run is not None and not isinstance(self.dry_run, Bool): self.dry_run = Bool(self.dry_run) @@ -226,7 +195,6 @@ class TypeSeverityKeyValue(YAMLRoot): """ key-value pair that maps a validation result type to a severity setting, for overriding default severity """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["TypeSeverityKeyValue"] @@ -254,7 +222,6 @@ class Report(YAMLRoot): """ A report object that is a holder to multiple report results """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["Report"] @@ -277,7 +244,6 @@ class ValidationReport(Report): """ A report that consists of validation results """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = SH["ValidationReport"] @@ -285,17 +251,12 @@ class ValidationReport(Report): class_name: ClassVar[str] = "ValidationReport" class_model_uri: ClassVar[URIRef] = VM.ValidationReport - results: Optional[ - Union[Union[dict, "ValidationResult"], List[Union[dict, "ValidationResult"]]] - ] = empty_list() + results: Optional[Union[Union[dict, "ValidationResult"], List[Union[dict, "ValidationResult"]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.results, list): self.results = [self.results] if self.results is not None else [] - self.results = [ - v if isinstance(v, ValidationResult) else ValidationResult(**as_dict(v)) - for v in self.results - ] + self.results = [v if isinstance(v, ValidationResult) else ValidationResult(**as_dict(v)) for v in self.results] super().__post_init__(**kwargs) @@ -305,7 +266,6 @@ class RepairReport(Report): """ A report that consists of repair operation results """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["RepairReport"] @@ -313,17 +273,12 @@ class RepairReport(Report): class_name: ClassVar[str] = "RepairReport" class_model_uri: ClassVar[URIRef] = VM.RepairReport - results: Optional[ - Union[Union[dict, "RepairOperation"], List[Union[dict, "RepairOperation"]]] - ] = empty_list() + results: Optional[Union[Union[dict, "RepairOperation"], List[Union[dict, "RepairOperation"]]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if not isinstance(self.results, list): self.results = [self.results] if self.results is not None else [] - self.results = [ - v if isinstance(v, RepairOperation) else RepairOperation(**as_dict(v)) - for v in self.results - ] + self.results = [v if isinstance(v, RepairOperation) else RepairOperation(**as_dict(v)) for v in self.results] super().__post_init__(**kwargs) @@ -332,7 +287,6 @@ class Result(YAMLRoot): """ Abstract base class for any individual report result """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["Result"] @@ -346,7 +300,6 @@ class ValidationResult(Result): """ An individual result arising from validation of a data instance using a particular rule """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = SH["ValidationResult"] @@ -399,12 +352,39 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): super().__post_init__(**kwargs) +@dataclass +class DefinitionValidationResult(ValidationResult): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = VM["DefinitionValidationResult"] + class_class_curie: ClassVar[str] = "vm:DefinitionValidationResult" + class_name: ClassVar[str] = "DefinitionValidationResult" + class_model_uri: ClassVar[URIRef] = VM.DefinitionValidationResult + + type: Union[str, ConstraintComponentId] = None + subject: Union[str, NodeId] = None + definition: Optional[str] = None + definition_source: Optional[str] = None + proposed_new_definition: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.definition is not None and not isinstance(self.definition, str): + self.definition = str(self.definition) + + if self.definition_source is not None and not isinstance(self.definition_source, str): + self.definition_source = str(self.definition_source) + + if self.proposed_new_definition is not None and not isinstance(self.proposed_new_definition, str): + self.proposed_new_definition = str(self.proposed_new_definition) + + super().__post_init__(**kwargs) + + @dataclass class MappingValidationResult(Result): """ A validation result where the check is to determine if a mapping is correct """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["MappingValidationResult"] @@ -455,9 +435,7 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.suggested_predicate is not None and not isinstance(self.suggested_predicate, str): self.suggested_predicate = str(self.suggested_predicate) - if self.suggested_modifications is not None and not isinstance( - self.suggested_modifications, str - ): + if self.suggested_modifications is not None and not isinstance(self.suggested_modifications, str): self.suggested_modifications = str(self.suggested_modifications) super().__post_init__(**kwargs) @@ -468,7 +446,6 @@ class RepairOperation(Result): """ The result of performing an individual repair """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["RepairOperation"] @@ -502,7 +479,6 @@ class ExternalReferenceValidationResult(ValidationResult): """ A validation result where the check is to determine if a link to an external resource is still valid """ - _inherited_slots: ClassVar[List[str]] = [] class_class_uri: ClassVar[URIRef] = VM["ExternalReferenceValidationResult"] @@ -537,433 +513,197 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): class SeverityOptions(EnumDefinitionImpl): FATAL = PermissibleValue(text="FATAL") - ERROR = PermissibleValue(text="ERROR", meaning=SH["Violation"]) - WARNING = PermissibleValue(text="WARNING", meaning=SH["Warning"]) - INFO = PermissibleValue(text="INFO", meaning=SH["Info"]) + ERROR = PermissibleValue( + text="ERROR", + meaning=SH["Violation"]) + WARNING = PermissibleValue( + text="WARNING", + meaning=SH["Warning"]) + INFO = PermissibleValue( + text="INFO", + meaning=SH["Info"]) _defn = EnumDefinition( name="SeverityOptions", ) - class ValidationResultType(EnumDefinitionImpl): DatatypeConstraintComponent = PermissibleValue( text="DatatypeConstraintComponent", description="constraint in which the range is a type, and the slot value must conform to the type", - meaning=SH["DatatypeConstraintComponent"], - ) + meaning=SH["DatatypeConstraintComponent"]) MinCountConstraintComponent = PermissibleValue( text="MinCountConstraintComponent", description="cardinality constraint where the slot value must be greater or equal to a specified minimum", - meaning=SH["MinCountConstraintComponent"], - ) + meaning=SH["MinCountConstraintComponent"]) MaxCountConstraintComponent = PermissibleValue( text="MaxCountConstraintComponent", description="cardinality constraint where the slot value must be less than or equal to a specified maximum", - meaning=SH["MaxCountConstraintComponent"], - ) + meaning=SH["MaxCountConstraintComponent"]) DeprecatedPropertyComponent = PermissibleValue( text="DeprecatedPropertyComponent", description="constraint where the instance slot should not be deprecated", - meaning=VM["DeprecatedPropertyComponent"], - ) + meaning=VM["DeprecatedPropertyComponent"]) MaxLengthConstraintComponent = PermissibleValue( text="MaxLengthConstraintComponent", description="constraint where the slot value must have a length equal to or less than a specified maximum", - meaning=SH["MaxLengthConstraintComponent"], - ) + meaning=SH["MaxLengthConstraintComponent"]) MinLengthConstraintComponent = PermissibleValue( text="MinLengthConstraintComponent", description="constraint where the slot value must have a length equal to or less than a specified maximum", - meaning=SH["MinLengthConstraintComponent"], - ) + meaning=SH["MinLengthConstraintComponent"]) PatternConstraintComponent = PermissibleValue( text="PatternConstraintComponent", description="constraint where the slot value must match a given regular expression pattern", - meaning=SH["PatternConstraintComponent"], - ) + meaning=SH["PatternConstraintComponent"]) ClosedConstraintComponent = PermissibleValue( text="ClosedConstraintComponent", description="constraint where the slot value must be allowable for the type of an instance", - meaning=SH["ClosedConstraintComponent"], - ) + meaning=SH["ClosedConstraintComponent"]) RuleConstraintComponent = PermissibleValue( text="RuleConstraintComponent", - description="constraint where the structure of an object must conform to a specified rule", - ) + description="constraint where the structure of an object must conform to a specified rule") _defn = EnumDefinition( name="ValidationResultType", ) - # Slots class slots: pass +slots.type = Slot(uri=SH.sourceConstraintComponent, name="type", curie=SH.curie('sourceConstraintComponent'), + model_uri=VM.type, domain=None, range=Union[str, ConstraintComponentId]) + +slots.subject = Slot(uri=SH.focusNode, name="subject", curie=SH.curie('focusNode'), + model_uri=VM.subject, domain=None, range=Union[str, NodeId]) + +slots.instantiates = Slot(uri=VM.instantiates, name="instantiates", curie=VM.curie('instantiates'), + model_uri=VM.instantiates, domain=None, range=Optional[Union[str, NodeId]]) + +slots.predicate = Slot(uri=VM.predicate, name="predicate", curie=VM.curie('predicate'), + model_uri=VM.predicate, domain=None, range=Optional[Union[str, NodeId]]) + +slots.object = Slot(uri=SH.value, name="object", curie=SH.curie('value'), + model_uri=VM.object, domain=None, range=Optional[Union[str, NodeId]]) + +slots.object_str = Slot(uri=VM.object_str, name="object_str", curie=VM.curie('object_str'), + model_uri=VM.object_str, domain=None, range=Optional[str]) + +slots.source = Slot(uri=VM.source, name="source", curie=VM.curie('source'), + model_uri=VM.source, domain=None, range=Optional[str]) + +slots.severity = Slot(uri=SH.resultSeverity, name="severity", curie=SH.curie('resultSeverity'), + model_uri=VM.severity, domain=None, range=Optional[Union[str, "SeverityOptions"]]) + +slots.info = Slot(uri=SH.resultMessage, name="info", curie=SH.curie('resultMessage'), + model_uri=VM.info, domain=None, range=Optional[str]) + +slots.results = Slot(uri=SH.result, name="results", curie=SH.curie('result'), + model_uri=VM.results, domain=None, range=Optional[Union[Union[dict, Result], List[Union[dict, Result]]]]) + +slots.namedResource__id = Slot(uri=VM.id, name="namedResource__id", curie=VM.curie('id'), + model_uri=VM.namedResource__id, domain=None, range=URIRef) + +slots.validationConfiguration__max_number_results_per_type = Slot(uri=VM.max_number_results_per_type, name="validationConfiguration__max_number_results_per_type", curie=VM.curie('max_number_results_per_type'), + model_uri=VM.validationConfiguration__max_number_results_per_type, domain=None, range=Optional[int]) + +slots.validationConfiguration__type_severity_map = Slot(uri=VM.type_severity_map, name="validationConfiguration__type_severity_map", curie=VM.curie('type_severity_map'), + model_uri=VM.validationConfiguration__type_severity_map, domain=None, range=Optional[Union[Dict[Union[str, TypeSeverityKeyValueType], Union[dict, TypeSeverityKeyValue]], List[Union[dict, TypeSeverityKeyValue]]]]) + +slots.validationConfiguration__schema_path = Slot(uri=VM.schema_path, name="validationConfiguration__schema_path", curie=VM.curie('schema_path'), + model_uri=VM.validationConfiguration__schema_path, domain=None, range=Optional[str]) + +slots.validationConfiguration__lookup_references = Slot(uri=VM.lookup_references, name="validationConfiguration__lookup_references", curie=VM.curie('lookup_references'), + model_uri=VM.validationConfiguration__lookup_references, domain=None, range=Optional[Union[bool, Bool]]) + +slots.validationConfiguration__prompt_info = Slot(uri=VM.prompt_info, name="validationConfiguration__prompt_info", curie=VM.curie('prompt_info'), + model_uri=VM.validationConfiguration__prompt_info, domain=None, range=Optional[str]) + +slots.validationConfiguration__documentation_objects = Slot(uri=VM.documentation_objects, name="validationConfiguration__documentation_objects", curie=VM.curie('documentation_objects'), + model_uri=VM.validationConfiguration__documentation_objects, domain=None, range=Optional[Union[str, List[str]]]) + +slots.repairConfiguration__validation_configuration = Slot(uri=VM.validation_configuration, name="repairConfiguration__validation_configuration", curie=VM.curie('validation_configuration'), + model_uri=VM.repairConfiguration__validation_configuration, domain=None, range=Optional[Union[dict, ValidationConfiguration]]) + +slots.repairConfiguration__dry_run = Slot(uri=VM.dry_run, name="repairConfiguration__dry_run", curie=VM.curie('dry_run'), + model_uri=VM.repairConfiguration__dry_run, domain=None, range=Optional[Union[bool, Bool]]) + +slots.typeSeverityKeyValue__type = Slot(uri=VM.type, name="typeSeverityKeyValue__type", curie=VM.curie('type'), + model_uri=VM.typeSeverityKeyValue__type, domain=None, range=URIRef) + +slots.typeSeverityKeyValue__severity = Slot(uri=VM.severity, name="typeSeverityKeyValue__severity", curie=VM.curie('severity'), + model_uri=VM.typeSeverityKeyValue__severity, domain=None, range=Optional[Union[str, "SeverityOptions"]]) + +slots.definitionValidationResult__definition = Slot(uri=VM.definition, name="definitionValidationResult__definition", curie=VM.curie('definition'), + model_uri=VM.definitionValidationResult__definition, domain=None, range=Optional[str]) + +slots.definitionValidationResult__definition_source = Slot(uri=VM.definition_source, name="definitionValidationResult__definition_source", curie=VM.curie('definition_source'), + model_uri=VM.definitionValidationResult__definition_source, domain=None, range=Optional[str]) + +slots.definitionValidationResult__proposed_new_definition = Slot(uri=VM.proposed_new_definition, name="definitionValidationResult__proposed_new_definition", curie=VM.curie('proposed_new_definition'), + model_uri=VM.definitionValidationResult__proposed_new_definition, domain=None, range=Optional[str]) + +slots.mappingValidationResult__subject_id = Slot(uri=VM.subject_id, name="mappingValidationResult__subject_id", curie=VM.curie('subject_id'), + model_uri=VM.mappingValidationResult__subject_id, domain=None, range=Optional[str]) + +slots.mappingValidationResult__subject_info = Slot(uri=VM.subject_info, name="mappingValidationResult__subject_info", curie=VM.curie('subject_info'), + model_uri=VM.mappingValidationResult__subject_info, domain=None, range=Optional[str]) + +slots.mappingValidationResult__object_id = Slot(uri=VM.object_id, name="mappingValidationResult__object_id", curie=VM.curie('object_id'), + model_uri=VM.mappingValidationResult__object_id, domain=None, range=Optional[str]) + +slots.mappingValidationResult__object_info = Slot(uri=VM.object_info, name="mappingValidationResult__object_info", curie=VM.curie('object_info'), + model_uri=VM.mappingValidationResult__object_info, domain=None, range=Optional[str]) + +slots.mappingValidationResult__predicate_id = Slot(uri=VM.predicate_id, name="mappingValidationResult__predicate_id", curie=VM.curie('predicate_id'), + model_uri=VM.mappingValidationResult__predicate_id, domain=None, range=Optional[str]) + +slots.mappingValidationResult__category = Slot(uri=VM.category, name="mappingValidationResult__category", curie=VM.curie('category'), + model_uri=VM.mappingValidationResult__category, domain=None, range=Optional[str]) + +slots.mappingValidationResult__problem = Slot(uri=VM.problem, name="mappingValidationResult__problem", curie=VM.curie('problem'), + model_uri=VM.mappingValidationResult__problem, domain=None, range=Optional[Union[bool, Bool]]) + +slots.mappingValidationResult__info = Slot(uri=VM.info, name="mappingValidationResult__info", curie=VM.curie('info'), + model_uri=VM.mappingValidationResult__info, domain=None, range=Optional[str]) + +slots.mappingValidationResult__confidence = Slot(uri=VM.confidence, name="mappingValidationResult__confidence", curie=VM.curie('confidence'), + model_uri=VM.mappingValidationResult__confidence, domain=None, range=Optional[float]) + +slots.mappingValidationResult__suggested_predicate = Slot(uri=VM.suggested_predicate, name="mappingValidationResult__suggested_predicate", curie=VM.curie('suggested_predicate'), + model_uri=VM.mappingValidationResult__suggested_predicate, domain=None, range=Optional[str]) + +slots.mappingValidationResult__suggested_modifications = Slot(uri=VM.suggested_modifications, name="mappingValidationResult__suggested_modifications", curie=VM.curie('suggested_modifications'), + model_uri=VM.mappingValidationResult__suggested_modifications, domain=None, range=Optional[str]) + +slots.repairOperation__repairs = Slot(uri=VM.repairs, name="repairOperation__repairs", curie=VM.curie('repairs'), + model_uri=VM.repairOperation__repairs, domain=None, range=Optional[Union[dict, ValidationResult]]) + +slots.repairOperation__modified = Slot(uri=VM.modified, name="repairOperation__modified", curie=VM.curie('modified'), + model_uri=VM.repairOperation__modified, domain=None, range=Optional[Union[bool, Bool]]) + +slots.repairOperation__successful = Slot(uri=VM.successful, name="repairOperation__successful", curie=VM.curie('successful'), + model_uri=VM.repairOperation__successful, domain=None, range=Optional[Union[bool, Bool]]) + +slots.repairOperation__info = Slot(uri=VM.info, name="repairOperation__info", curie=VM.curie('info'), + model_uri=VM.repairOperation__info, domain=None, range=Optional[str]) + +slots.externalReferenceValidationResult__url = Slot(uri=VM.url, name="externalReferenceValidationResult__url", curie=VM.curie('url'), + model_uri=VM.externalReferenceValidationResult__url, domain=None, range=Optional[str]) + +slots.externalReferenceValidationResult__time_checked = Slot(uri=VM.time_checked, name="externalReferenceValidationResult__time_checked", curie=VM.curie('time_checked'), + model_uri=VM.externalReferenceValidationResult__time_checked, domain=None, range=Optional[str]) + +slots.externalReferenceValidationResult__number_of_attempts = Slot(uri=VM.number_of_attempts, name="externalReferenceValidationResult__number_of_attempts", curie=VM.curie('number_of_attempts'), + model_uri=VM.externalReferenceValidationResult__number_of_attempts, domain=None, range=Optional[int]) + +slots.externalReferenceValidationResult__http_response_code = Slot(uri=VM.http_response_code, name="externalReferenceValidationResult__http_response_code", curie=VM.curie('http_response_code'), + model_uri=VM.externalReferenceValidationResult__http_response_code, domain=None, range=Optional[int]) + +slots.ValidationReport_results = Slot(uri=SH.result, name="ValidationReport_results", curie=SH.curie('result'), + model_uri=VM.ValidationReport_results, domain=ValidationReport, range=Optional[Union[Union[dict, "ValidationResult"], List[Union[dict, "ValidationResult"]]]]) -slots.type = Slot( - uri=SH.sourceConstraintComponent, - name="type", - curie=SH.curie("sourceConstraintComponent"), - model_uri=VM.type, - domain=None, - range=Union[str, ConstraintComponentId], -) - -slots.subject = Slot( - uri=SH.focusNode, - name="subject", - curie=SH.curie("focusNode"), - model_uri=VM.subject, - domain=None, - range=Union[str, NodeId], -) - -slots.instantiates = Slot( - uri=VM.instantiates, - name="instantiates", - curie=VM.curie("instantiates"), - model_uri=VM.instantiates, - domain=None, - range=Optional[Union[str, NodeId]], -) - -slots.predicate = Slot( - uri=VM.predicate, - name="predicate", - curie=VM.curie("predicate"), - model_uri=VM.predicate, - domain=None, - range=Optional[Union[str, NodeId]], -) - -slots.object = Slot( - uri=SH.value, - name="object", - curie=SH.curie("value"), - model_uri=VM.object, - domain=None, - range=Optional[Union[str, NodeId]], -) - -slots.object_str = Slot( - uri=VM.object_str, - name="object_str", - curie=VM.curie("object_str"), - model_uri=VM.object_str, - domain=None, - range=Optional[str], -) - -slots.source = Slot( - uri=VM.source, - name="source", - curie=VM.curie("source"), - model_uri=VM.source, - domain=None, - range=Optional[str], -) - -slots.severity = Slot( - uri=SH.resultSeverity, - name="severity", - curie=SH.curie("resultSeverity"), - model_uri=VM.severity, - domain=None, - range=Optional[Union[str, "SeverityOptions"]], -) - -slots.info = Slot( - uri=SH.resultMessage, - name="info", - curie=SH.curie("resultMessage"), - model_uri=VM.info, - domain=None, - range=Optional[str], -) - -slots.results = Slot( - uri=SH.result, - name="results", - curie=SH.curie("result"), - model_uri=VM.results, - domain=None, - range=Optional[Union[Union[dict, Result], List[Union[dict, Result]]]], -) - -slots.namedResource__id = Slot( - uri=VM.id, - name="namedResource__id", - curie=VM.curie("id"), - model_uri=VM.namedResource__id, - domain=None, - range=URIRef, -) - -slots.validationConfiguration__max_number_results_per_type = Slot( - uri=VM.max_number_results_per_type, - name="validationConfiguration__max_number_results_per_type", - curie=VM.curie("max_number_results_per_type"), - model_uri=VM.validationConfiguration__max_number_results_per_type, - domain=None, - range=Optional[int], -) - -slots.validationConfiguration__type_severity_map = Slot( - uri=VM.type_severity_map, - name="validationConfiguration__type_severity_map", - curie=VM.curie("type_severity_map"), - model_uri=VM.validationConfiguration__type_severity_map, - domain=None, - range=Optional[ - Union[ - Dict[Union[str, TypeSeverityKeyValueType], Union[dict, TypeSeverityKeyValue]], - List[Union[dict, TypeSeverityKeyValue]], - ] - ], -) - -slots.validationConfiguration__schema_path = Slot( - uri=VM.schema_path, - name="validationConfiguration__schema_path", - curie=VM.curie("schema_path"), - model_uri=VM.validationConfiguration__schema_path, - domain=None, - range=Optional[str], -) - -slots.validationConfiguration__prompt_info = Slot( - uri=VM.prompt_info, - name="validationConfiguration__prompt_info", - curie=VM.curie("prompt_info"), - model_uri=VM.validationConfiguration__prompt_info, - domain=None, - range=Optional[str], -) - -slots.repairConfiguration__validation_configuration = Slot( - uri=VM.validation_configuration, - name="repairConfiguration__validation_configuration", - curie=VM.curie("validation_configuration"), - model_uri=VM.repairConfiguration__validation_configuration, - domain=None, - range=Optional[Union[dict, ValidationConfiguration]], -) - -slots.repairConfiguration__dry_run = Slot( - uri=VM.dry_run, - name="repairConfiguration__dry_run", - curie=VM.curie("dry_run"), - model_uri=VM.repairConfiguration__dry_run, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.typeSeverityKeyValue__type = Slot( - uri=VM.type, - name="typeSeverityKeyValue__type", - curie=VM.curie("type"), - model_uri=VM.typeSeverityKeyValue__type, - domain=None, - range=URIRef, -) - -slots.typeSeverityKeyValue__severity = Slot( - uri=VM.severity, - name="typeSeverityKeyValue__severity", - curie=VM.curie("severity"), - model_uri=VM.typeSeverityKeyValue__severity, - domain=None, - range=Optional[Union[str, "SeverityOptions"]], -) - -slots.mappingValidationResult__subject_id = Slot( - uri=VM.subject_id, - name="mappingValidationResult__subject_id", - curie=VM.curie("subject_id"), - model_uri=VM.mappingValidationResult__subject_id, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__subject_info = Slot( - uri=VM.subject_info, - name="mappingValidationResult__subject_info", - curie=VM.curie("subject_info"), - model_uri=VM.mappingValidationResult__subject_info, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__object_id = Slot( - uri=VM.object_id, - name="mappingValidationResult__object_id", - curie=VM.curie("object_id"), - model_uri=VM.mappingValidationResult__object_id, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__object_info = Slot( - uri=VM.object_info, - name="mappingValidationResult__object_info", - curie=VM.curie("object_info"), - model_uri=VM.mappingValidationResult__object_info, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__predicate_id = Slot( - uri=VM.predicate_id, - name="mappingValidationResult__predicate_id", - curie=VM.curie("predicate_id"), - model_uri=VM.mappingValidationResult__predicate_id, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__category = Slot( - uri=VM.category, - name="mappingValidationResult__category", - curie=VM.curie("category"), - model_uri=VM.mappingValidationResult__category, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__problem = Slot( - uri=VM.problem, - name="mappingValidationResult__problem", - curie=VM.curie("problem"), - model_uri=VM.mappingValidationResult__problem, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.mappingValidationResult__info = Slot( - uri=VM.info, - name="mappingValidationResult__info", - curie=VM.curie("info"), - model_uri=VM.mappingValidationResult__info, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__confidence = Slot( - uri=VM.confidence, - name="mappingValidationResult__confidence", - curie=VM.curie("confidence"), - model_uri=VM.mappingValidationResult__confidence, - domain=None, - range=Optional[float], -) - -slots.mappingValidationResult__suggested_predicate = Slot( - uri=VM.suggested_predicate, - name="mappingValidationResult__suggested_predicate", - curie=VM.curie("suggested_predicate"), - model_uri=VM.mappingValidationResult__suggested_predicate, - domain=None, - range=Optional[str], -) - -slots.mappingValidationResult__suggested_modifications = Slot( - uri=VM.suggested_modifications, - name="mappingValidationResult__suggested_modifications", - curie=VM.curie("suggested_modifications"), - model_uri=VM.mappingValidationResult__suggested_modifications, - domain=None, - range=Optional[str], -) - -slots.repairOperation__repairs = Slot( - uri=VM.repairs, - name="repairOperation__repairs", - curie=VM.curie("repairs"), - model_uri=VM.repairOperation__repairs, - domain=None, - range=Optional[Union[dict, ValidationResult]], -) - -slots.repairOperation__modified = Slot( - uri=VM.modified, - name="repairOperation__modified", - curie=VM.curie("modified"), - model_uri=VM.repairOperation__modified, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.repairOperation__successful = Slot( - uri=VM.successful, - name="repairOperation__successful", - curie=VM.curie("successful"), - model_uri=VM.repairOperation__successful, - domain=None, - range=Optional[Union[bool, Bool]], -) - -slots.repairOperation__info = Slot( - uri=VM.info, - name="repairOperation__info", - curie=VM.curie("info"), - model_uri=VM.repairOperation__info, - domain=None, - range=Optional[str], -) - -slots.externalReferenceValidationResult__url = Slot( - uri=VM.url, - name="externalReferenceValidationResult__url", - curie=VM.curie("url"), - model_uri=VM.externalReferenceValidationResult__url, - domain=None, - range=Optional[str], -) - -slots.externalReferenceValidationResult__time_checked = Slot( - uri=VM.time_checked, - name="externalReferenceValidationResult__time_checked", - curie=VM.curie("time_checked"), - model_uri=VM.externalReferenceValidationResult__time_checked, - domain=None, - range=Optional[str], -) - -slots.externalReferenceValidationResult__number_of_attempts = Slot( - uri=VM.number_of_attempts, - name="externalReferenceValidationResult__number_of_attempts", - curie=VM.curie("number_of_attempts"), - model_uri=VM.externalReferenceValidationResult__number_of_attempts, - domain=None, - range=Optional[int], -) - -slots.externalReferenceValidationResult__http_response_code = Slot( - uri=VM.http_response_code, - name="externalReferenceValidationResult__http_response_code", - curie=VM.curie("http_response_code"), - model_uri=VM.externalReferenceValidationResult__http_response_code, - domain=None, - range=Optional[int], -) - -slots.ValidationReport_results = Slot( - uri=SH.result, - name="ValidationReport_results", - curie=SH.curie("result"), - model_uri=VM.ValidationReport_results, - domain=ValidationReport, - range=Optional[Union[Union[dict, "ValidationResult"], List[Union[dict, "ValidationResult"]]]], -) - -slots.RepairReport_results = Slot( - uri=SH.result, - name="RepairReport_results", - curie=SH.curie("result"), - model_uri=VM.RepairReport_results, - domain=RepairReport, - range=Optional[Union[Union[dict, "RepairOperation"], List[Union[dict, "RepairOperation"]]]], -) +slots.RepairReport_results = Slot(uri=SH.result, name="RepairReport_results", curie=SH.curie('result'), + model_uri=VM.RepairReport_results, domain=RepairReport, range=Optional[Union[Union[dict, "RepairOperation"], List[Union[dict, "RepairOperation"]]]]) diff --git a/src/oaklib/datamodels/validation_datamodel.yaml b/src/oaklib/datamodels/validation_datamodel.yaml index 582e14db2..92d715901 100644 --- a/src/oaklib/datamodels/validation_datamodel.yaml +++ b/src/oaklib/datamodels/validation_datamodel.yaml @@ -1,5 +1,5 @@ id: https://w3id.org/linkml/validation_results -title: Validation Results Datamodel +title: Validation Results Data Model name: validaton-results description: |- A datamodel for data validation results. @@ -60,9 +60,18 @@ classes: schema_path: range: string description: allows overriding the default OMO schema + lookup_references: + range: boolean + description: if true, then look up references used as provenance (axiom annotation). + This may include looking up the PMID and checking if a publication is retracted. prompt_info: range: string description: for AI agents, this allows passing through of additional info to the prompt + documentation_objects: + range: string + multivalued: true + description: paths or URLs to files containing best practice documentation, SOPs, etc. Primarily for AI + agents to read when performing validation. RepairConfiguration: description: Configuration parameters for execution of validation repairs @@ -126,6 +135,16 @@ classes: - source - info + DefinitionValidationResult: + is_a: ValidationResult + attributes: + definition: + range: string + definition_source: + range: string + proposed_new_definition: + range: string + MappingValidationResult: is_a: Result description: A validation result where the check is to determine if a mapping is correct diff --git a/src/oaklib/implementations/llm_implementation.py b/src/oaklib/implementations/llm_implementation.py index 54f6fc65c..b913f49a1 100644 --- a/src/oaklib/implementations/llm_implementation.py +++ b/src/oaklib/implementations/llm_implementation.py @@ -8,6 +8,8 @@ from dataclasses import dataclass from typing import TYPE_CHECKING, Dict, Iterable, Iterator, List, Optional, Tuple +import pystow +from linkml_runtime.dumpers import yaml_dumper from sssom_schema import Mapping from tenacity import ( retry, @@ -20,13 +22,16 @@ from oaklib.datamodels.class_enrichment import ClassEnrichmentResult from oaklib.datamodels.item_list import ItemList from oaklib.datamodels.obograph import DefinitionPropertyValue +from oaklib.datamodels.ontology_metadata import DefinitionConstraintComponent from oaklib.datamodels.similarity import TermPairwiseSimilarity from oaklib.datamodels.text_annotator import TextAnnotation, TextAnnotationConfiguration from oaklib.datamodels.validation_datamodel import ( + DefinitionValidationResult, MappingValidationResult, + SeverityOptions, ValidationConfiguration, ) -from oaklib.datamodels.vocabulary import HAS_DBXREF, SKOS_EXACT_MATCH +from oaklib.datamodels.vocabulary import HAS_DBXREF, HAS_DEFINITION_CURIE, SKOS_EXACT_MATCH from oaklib.interfaces import ( MappingProviderInterface, OboGraphInterface, @@ -41,6 +46,7 @@ from oaklib.interfaces.semsim_interface import SemanticSimilarityInterface from oaklib.interfaces.text_annotator_interface import TEXT from oaklib.types import CURIE, PRED_CURIE +from oaklib.utilities.iterator_utils import chunk if TYPE_CHECKING: import llm @@ -130,6 +136,27 @@ def query_model_to_json(model, *args, **kwargs): return text +def config_to_prompt(configuration: Optional[ValidationConfiguration]) -> Optional[str]: + if not configuration: + return None + prompt = "" + if configuration: + if configuration.prompt_info: + prompt += configuration.prompt_info + if configuration.documentation_objects: + import html2text + + for obj in configuration.documentation_objects: + if obj.startswith("http:") or obj.startswith("https:"): + path = pystow.ensure("oaklib", "documents", url=obj) + else: + path = obj + with open(path) as f: + html = f.read() + prompt += html2text.html2text(html) + return prompt + + @dataclass class LLMImplementation( OboGraphInterface, @@ -499,6 +526,79 @@ def _get_description(entity: CURIE) -> Optional[str]: suggested_modifications=mods, ) + def validate_definitions( + self, + entities: Iterable[CURIE] = None, + configuration: ValidationConfiguration = None, + skip_text_annotation=False, + **kwargs, + ) -> Iterable[DefinitionValidationResult]: + """ + Validate text definitions for a set of entities. + + :param entities: + :param configuration: + :param kwargs: + :return: + """ + model = self.get_model() + system_prompt = ( + "Your job is to evaluate how well aligned an ontology term's definition " + "to the reference cited in that definition. Rank the level of alignment between LOW, " + "MEDIUM, and HIGH. If the definition is too specific, say this. " + "Highlight sections from the abstract that align with, or misalign with the definition." + ) + extra = config_to_prompt(configuration) + if extra: + system_prompt += "\n" + extra + + if entities is None: + entities = self.entities(filter_obsoletes=True) + + wrapped = self.wrapped_adapter + if not isinstance(wrapped, ValidatorInterface): + raise NotImplementedError("Wrapped adapter must support validation") + for entity_it in chunk(entities): + for entity, defn, metadata in wrapped.definitions( + entity_it, + include_metadata=True, + ): + for _, vs in metadata.items(): + ref_map = wrapped.lookup_references(vs) + if not ref_map: + continue + node = wrapped.node(entity) + for ref, ref_obj in ref_map.items(): + ref_obj_str = yaml_dumper.dumps(ref_obj) + prompt = ( + "Term:\n" + f"{yaml_dumper.dumps(node)}" + "Definition references:\n" + f"{ref_obj_str}" + ) + resp = query_model(model, prompt, system_prompt).text() + if "HIGH" in resp: + severity = SeverityOptions.INFO + elif "MEDIUM" in resp: + severity = SeverityOptions.WARNING + elif "LOW" in resp: + severity = SeverityOptions.ERROR + else: + severity = SeverityOptions.INFO + logger.warning(f"Unknown severity: {resp}") + resp += " (defaulting to INFO as no ranking found)" + result = DefinitionValidationResult( + subject=entity, + severity=SeverityOptions(severity), + predicate=HAS_DEFINITION_CURIE, + object_str=ref_obj_str, + definition=defn, + definition_source=ref, + type=DefinitionConstraintComponent.MatchTextAndReference.meaning, + info=resp, + ) + yield result + def enriched_classes( self, subjects: Optional[Iterable[CURIE]] = None, diff --git a/src/oaklib/implementations/simpleobo/simple_obo_implementation.py b/src/oaklib/implementations/simpleobo/simple_obo_implementation.py index f99ade6a6..3e0d05d1f 100644 --- a/src/oaklib/implementations/simpleobo/simple_obo_implementation.py +++ b/src/oaklib/implementations/simpleobo/simple_obo_implementation.py @@ -101,6 +101,7 @@ from oaklib.interfaces import TextAnnotatorInterface from oaklib.interfaces.basic_ontology_interface import ( ALIAS_MAP, + DEFINITION, LANGUAGE_TAG, METADATA_MAP, RELATIONSHIP, @@ -448,6 +449,29 @@ def definition(self, curie: CURIE, lang: Optional[LANGUAGE_TAG] = None) -> Optio if s: return s.quoted_value(TAG_DEFINITION) + def definitions( + self, + curies: Iterable[CURIE], + include_metadata=False, + include_missing=False, + lang: Optional[LANGUAGE_TAG] = None, + ) -> Iterator[DEFINITION]: + for curie in curies: + s = self._stanza(curie, strict=False) + if s: + d = s.quoted_value(TAG_DEFINITION) + if d: + if include_metadata: + defn_tvs = [tv for tv in s.tag_values if tv.tag == TAG_DEFINITION] + if defn_tvs: + defn_tv = defn_tvs[0] + defn, xrefs = defn_tv.as_definition() + yield curie, defn, {HAS_DBXREF: xrefs} + else: + yield curie, d, None + elif include_missing: + yield curie, None, None + def comments(self, curies: Iterable[CURIE]) -> Iterable[Tuple[CURIE, str]]: for curie in curies: s = self._stanza(curie) @@ -474,11 +498,14 @@ def synonym_property_values( if isinstance(subject, str): subject = [subject] for curie in subject: - for p, vs in self.entity_alias_map(curie).items(): - if p == LABEL_PREDICATE: - continue - for v in vs: - yield curie, SynonymPropertyValue(pred=p.replace("oio:", ""), val=v) + s = self._stanza(curie, strict=False) + if not s: + continue + for syn in s.synonyms(): + pred = _synonym_scope_pred(syn[1]).replace("oio:", "") + yield curie, SynonymPropertyValue( + pred=pred, val=syn[0], synonymType=syn[2], xrefs=syn[3] + ) def map_shorthand_to_curie(self, rel_code: PRED_CODE) -> PRED_CURIE: """ diff --git a/src/oaklib/implementations/simpleobo/simple_obo_parser.py b/src/oaklib/implementations/simpleobo/simple_obo_parser.py index 56bbac6a0..0514d36ca 100644 --- a/src/oaklib/implementations/simpleobo/simple_obo_parser.py +++ b/src/oaklib/implementations/simpleobo/simple_obo_parser.py @@ -19,6 +19,7 @@ re_tag_value = re.compile(r"^(\S+):\s*(.*)$") re_stanza_type = re.compile(r"^\[(\w+)\]$") re_empty = re.compile(r"^\S*$") +re_def = re.compile(r"^\"(.*)\"\s+\[(.*)\](?:\s+\{(.*)\})?$") re_synonym1 = re.compile(r"^\"(.*)\"\s+(\w+)\s+\[(.*)\](?:\s+\{(.*)\})?$") re_synonym2 = re.compile(r"^\"(.*)\"\s+(\w+)\s+(\S)+\s\[(.*)\](?:\s+\{(.*)\})?$") re_quoted_simple = re.compile(r'^"(.*)"\s+\[') @@ -189,6 +190,23 @@ def as_synonym(self) -> Optional[SYNONYM_TUPLE]: raise ValueError(f"Bad synonym: {self.value}") return syn[0], syn[1], syn[2], _parse_list(syn[3]) + def as_definition(self) -> Optional[Tuple[str, List[str]]]: + """ + Cast a tag-value pair as a definition + + Returns None if this is not a definition TV + + :return: definition tuple structure + """ + if self.tag != TAG_DEF: + return + m = re_def.match(self.value) + if m: + xrefs = _parse_list(m.group(2)) if m.group(2) else [] + return m.group(1), xrefs + else: + raise ValueError(f"Bad definition: {self.value}") + def as_property_value(self) -> Optional[PROPERTY_VALUE_TUPLE]: """ Cast a tag-value pair as a property value diff --git a/src/oaklib/interfaces/obograph_interface.py b/src/oaklib/interfaces/obograph_interface.py index 1fbef629f..2165c3f51 100644 --- a/src/oaklib/interfaces/obograph_interface.py +++ b/src/oaklib/interfaces/obograph_interface.py @@ -182,6 +182,29 @@ def _graph(self, triples: Iterable[RELATIONSHIP]) -> Graph: graph_id = "test" return Graph(id=graph_id, nodes=list(node_map.values()), edges=edges) + def direct_graph( + self, + curies: Union[CURIE, List[CURIE]], + **kwargs, + ) -> Graph: + """ + Return a graph object that consists of all the nodes specified in the curies list, + extended with all direct relationships + + :param curies: + :return: direct graph + """ + if not isinstance(curies, list): + curies = [curies] + g = self._graph(self.relationships(subjects=curies)) + for curie in curies: + n = self.node(curie, include_metadata=True) + if n: + g.nodes.append(n) + ldefs = list(self.logical_definitions(curies)) + g.logicalDefinitionAxioms = ldefs + return g + def ancestor_graph( self, start_curies: Union[CURIE, List[CURIE]], predicates: List[PRED_CURIE] = None ) -> Graph: diff --git a/src/oaklib/interfaces/validator_interface.py b/src/oaklib/interfaces/validator_interface.py index 7e79a91bb..8421859ff 100644 --- a/src/oaklib/interfaces/validator_interface.py +++ b/src/oaklib/interfaces/validator_interface.py @@ -1,21 +1,32 @@ from abc import ABC -from typing import Dict, Iterable +from typing import Any, Dict, Iterable, List, Optional, Union +from linkml_runtime.dumpers import json_dumper + +from oaklib.datamodels.ontology_metadata import DefinitionConstraintComponent +from oaklib.datamodels.synonymizer_datamodel import RuleSet from oaklib.datamodels.validation_datamodel import ( MappingValidationResult, RepairConfiguration, RepairOperation, + SeverityOptions, ValidationConfiguration, ValidationResult, ) -from oaklib.interfaces import MappingProviderInterface +from oaklib.datamodels.vocabulary import HAS_DEFINITION_CURIE +from oaklib.interfaces import MappingProviderInterface, OboGraphInterface from oaklib.interfaces.basic_ontology_interface import BasicOntologyInterface from oaklib.types import CURIE +from oaklib.utilities.iterator_utils import chunk +from oaklib.utilities.lexical.synonymizer import apply_synonymizer +from oaklib.utilities.publication_utils.pubmed_wrapper import PubmedWrapper class ValidatorInterface(BasicOntologyInterface, ABC): """ - Basic ontology QC + Multi-faceted ontology validator. + + This interface defines a number of different validation processes The overall goal is to support the following @@ -38,7 +49,7 @@ class ValidatorInterface(BasicOntologyInterface, ABC): def term_curies_without_definitions(self) -> Iterable[CURIE]: """ - TODO: decide whether to write highly specific methods or use a generic validate method + Yields all entities that do not have a definition. :return: """ @@ -69,7 +80,17 @@ def validate_mappings( """ Validate mappings for a set of entities. - :param entities: + Different adapters may implement different aspects of mapping validation. + + It includes: + + - checking cardinality of mappings (e.g. skos:exactMatch should be 1:1) + - looking up mapped entities to check they are not obsolete + - using AI to validate the content of mappings + + :param entities: entities to validate mappings for (None=all) + :param adapters: adapter mapping to look up external entities + :param configuration: validation configuration :return: """ from oaklib.utilities.mapping.mapping_validation import validate_mappings @@ -87,6 +108,143 @@ def validate_mappings( ) yield result + def validate_synonyms( + self, + entities: Iterable[CURIE] = None, + adapters: Dict[str, BasicOntologyInterface] = None, + configuration: ValidationConfiguration = None, + synonymizer_rules: Optional[RuleSet] = None, + ) -> Iterable[ValidationResult]: + """ + Validate synonyms for a set of entities. + + Different adapters may implement different aspects of synonym validation. + + It includes: + + - checking for duplicates + - looking up mapped entities to check they are not obsolete + - ensuring that a referenced synonym is still supported + - using AI to validate the content of mappings + + :param entities: entities to validate mappings for (None=all) + :param adapters: adapter mapping to look up external entities + :param configuration: validation configuration + :return: + """ + + if not isinstance(self, OboGraphInterface): + raise ValueError(f"Cannot validate synonyms on {self}") + nodes = [self.node(n, include_metadata=True) for n in entities] + for node in nodes: + if node is None: + continue + syns = node.meta.synonyms + for syn in syns: + if syn.xrefs: + for xref in syn.xrefs: + from oaklib.utilities.mapping.mapping_validation import ( + lookup_mapping_adapter, + ) + + ext_adapter = lookup_mapping_adapter(xref, adapters) + if ext_adapter is None: + continue + if not isinstance(ext_adapter, OboGraphInterface): + raise ValueError(f"Cannot validate synonyms on {ext_adapter}") + ext_node = ext_adapter.node(xref, include_metadata=True) + ext_syns = ext_node.meta.synonyms + # normalize to lower case for comparison + # TODO: allow configurability of case rules + synonym_forms = {syn.val} + if synonymizer_rules: + for _, syn_form, _ in apply_synonymizer( + syn.val, synonymizer_rules.rules + ): + synonym_forms.add(syn_form.lower()) + ext_syn_vals = [x.val.lower() for x in ext_syns] + if not synonym_forms.intersection(ext_syn_vals): + yield ValidationResult( + subject=node.id, + predicate=syn.pred, + object=xref, + object_str=syn.val, + severity=SeverityOptions(SeverityOptions.ERROR), + type="oio:SynonymNotFound", + info=f"synonym not found in {xref}", + ) + + def validate_definitions( + self, + entities: Iterable[CURIE] = None, + adapters: Dict[str, BasicOntologyInterface] = None, + configuration: ValidationConfiguration = None, + skip_text_annotation=False, + **kwargs, + ) -> Iterable[ValidationResult]: + """ + Validate text definitions for a set of entities. + + Different adapters may implement different aspects of mapping validation. + + It includes: + + - testing definitions are present + - validating the text definition against the SRS rubric + - using AI to align the definition against any references + + :param entities: + :param configuration: + :param kwargs: + :return: + """ + from oaklib.utilities.validation.definition_ontology_rule import DefinitionOntologyRule + + definition_rule = DefinitionOntologyRule(skip_text_annotation=skip_text_annotation) + entities = list(entities) if entities else self.entities(filter_obsoletes=True) + + def _contract(url): + return url.replace("https://w3id.org/oak/ontology-metadata/DCC.", "oaklib.om:DCC#") + + for r in definition_rule.evaluate(self, entities=entities): + r.type = _contract(r.type) + yield r + if configuration and configuration.lookup_references: + for entity_it in chunk(entities): + for entity, defn, metadata in self.definitions( + entity_it, + include_metadata=True, + ): + if not metadata: + continue + for _k, vs in metadata.items(): + refs = self.lookup_references(vs, adapters=adapters) + for ref, obj in refs.items(): + if obj is not None and not obj: + yield ValidationResult( + subject=entity, + predicate=HAS_DEFINITION_CURIE, + object=ref, + object_str=defn, + severity=SeverityOptions(SeverityOptions.ERROR), + type=_contract( + DefinitionConstraintComponent.ReferenceNotFound.meaning + ), + info=f"publication not found: {ref}", + ) + continue + if isinstance(obj, dict) and obj.get("retracted", False): + yield ValidationResult( + subject=entity, + predicate=HAS_DEFINITION_CURIE, + object=ref, + severity=SeverityOptions(SeverityOptions.ERROR), + type=_contract( + DefinitionConstraintComponent.ReferenceIsRetracted.meaning + ), + info=f"publication is retracted: {obj.get('title', obj)}", + ) + def repair( self, configuration: RepairConfiguration = None, dry_run=False ) -> Iterable[RepairOperation]: @@ -120,3 +278,38 @@ def unsatisfiable_classes(self, exclude_nothing=True) -> Iterable[CURIE]: :return: class curie iterator """ raise NotImplementedError + + def lookup_references( + self, references: List[CURIE], adapters: Dict[str, BasicOntologyInterface] = None, **kwargs + ) -> Dict[CURIE, Union[bool, Dict[str, Any]]]: + """ + Lookup references in external ontologies. + + :param references: list of CURIEs to look up + :param adapters: adapter mapping to look up external entities + :param kwargs: additional arguments + :return: mapping between CURIEs and pub objects + """ + pubmed_wrapper = PubmedWrapper() + pub_prefixes = ["PMID", "DOI", "PMC", "PMCID"] + publication_ids = [ + x for x in references if any(x.upper().startswith(y) for y in pub_prefixes) + ] + objs = pubmed_wrapper.objects_by_ids(publication_ids) + # seed with Nones + obj_map = {pmid: False for pmid in references if pmid.startswith("PMID")} + for x in objs: + obj_map[x["id"]] = x + for x in references: + # split out the prefix + prefix, _ = x.split(":", 1) + if prefix.upper() in pub_prefixes: + continue + if adapters is not None: + if prefix in adapters: + adapter = adapters[prefix] + if not isinstance(adapter, OboGraphInterface): + continue + obj = adapter.node(x) + obj_map[x] = json_dumper.to_dict(obj) + return obj_map diff --git a/src/oaklib/io/streaming_obo_writer.py b/src/oaklib/io/streaming_obo_writer.py index e0dd28084..ea1a8d9bb 100644 --- a/src/oaklib/io/streaming_obo_writer.py +++ b/src/oaklib/io/streaming_obo_writer.py @@ -2,18 +2,15 @@ from dataclasses import dataclass from typing import Any, Iterable -from sssom.constants import OWL_EQUIVALENT_CLASS - from oaklib.converters.obo_graph_to_obo_format_converter import ( OboGraphToOboFormatConverter, ) from oaklib.datamodels.obograph import ( DisjointClassExpressionsAxiom, + Graph, GraphDocument, LogicalDefinitionAxiom, ) -from oaklib.datamodels.vocabulary import IS_A, RDF_TYPE, SYNONYM_PRED_TO_SCOPE_MAP -from oaklib.interfaces.metadata_interface import MetadataInterface from oaklib.interfaces.obograph_interface import OboGraphInterface from oaklib.io.streaming_writer import StreamingWriter from oaklib.types import CURIE @@ -25,6 +22,8 @@ class StreamingOboWriter(StreamingWriter): A writer that emits one OBO stanza at a time in one stream """ + converter: OboGraphToOboFormatConverter = None + def tag_val(self, k: str, v: Any, xrefs=None): self.file.write(f"{k}: {v}") if xrefs is not None: @@ -33,46 +32,15 @@ def tag_val(self, k: str, v: Any, xrefs=None): def emit_curie(self, curie: CURIE, label=None): oi = self.ontology_interface - self.line("[Term]") - self.line(f"id: {curie}") - if label is None: - label = oi.label(curie) - self.tag_val("name", label) - defn = oi.definition(curie) - if defn: - if isinstance(oi, MetadataInterface): - _, anns = oi.definition_with_annotations(curie) - else: - anns = [] - self.tag_val("def", f'"{defn}"', xrefs=[ann.object for ann in anns]) - for _, x in oi.simple_mappings_by_curie(curie): - self.line(f"xref: {x}") - amap = oi.entity_alias_map(curie) - for a, vs in amap.items(): - if a in SYNONYM_PRED_TO_SCOPE_MAP: - scope = SYNONYM_PRED_TO_SCOPE_MAP[a] - for v in vs: - self.line(f'synonym: "{v}" {scope} []') - if isinstance(oi, OboGraphInterface): - rmap = oi.outgoing_relationship_map(curie) - for p in rmap.get(IS_A, []): - self.line(f"is_a: {p} ! {oi.label(p)}") - for r, ps in rmap.items(): - if r != IS_A and r != RDF_TYPE and r != OWL_EQUIVALENT_CLASS: - for p in ps: - self.line(f"relationship: {r} {p} ! {oi.label(p)}") - try: - for ldef in oi.logical_definitions([curie]): - for p in ldef.genusIds: - self.line(f"intersection_of: {p} ! {oi.label(p)}") - for r in ldef.restrictions: - self.line( - f"intersection_of: {r.propertyId} {r.fillerId} ! {oi.label(r.fillerId)}" - ) - except NotImplementedError: - logging.info("Logical definitions not implemented") - - self.line("\n") + if self.converter is None: + self.converter = OboGraphToOboFormatConverter() + if not isinstance(oi, OboGraphInterface): + raise NotImplementedError + graph = oi.direct_graph(curie) + ext_graph = Graph(id="ext", nodes=[n for n in graph.nodes if n.id != curie]) + graph.nodes = [n for n in graph.nodes if n.id == curie] + text = self.converter.dumps(graph, aux_graphs=[ext_graph]) + self.file.write(text) def emit_multiple(self, entities: Iterable[CURIE], **kwargs): oi = self.ontology_interface diff --git a/src/oaklib/utilities/publication_utils/__init__.py b/src/oaklib/utilities/publication_utils/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/src/oaklib/utilities/publication_utils/doi_wrapper.py b/src/oaklib/utilities/publication_utils/doi_wrapper.py new file mode 100644 index 000000000..c8fbaec98 --- /dev/null +++ b/src/oaklib/utilities/publication_utils/doi_wrapper.py @@ -0,0 +1,142 @@ +import logging +import tarfile +import tempfile +from dataclasses import dataclass, field +from typing import ClassVar, Dict, List, Optional +from urllib.parse import urlparse +from urllib.request import urlretrieve + +import pystow +import requests +import requests_cache +from defusedxml.ElementTree import fromstring + +from oaklib.utilities.publication_utils.pubdb_wrapper import PubDBWrapper + +logger = logging.getLogger(__name__) + +RATE_LIMIT_DELAY = 1.0 + + +@dataclass +class DOIWrapper(PubDBWrapper): + """ + A wrapper to provide a search facade over datacite. + """ + + name: ClassVar[str] = "datacite" + + cache_path: Optional[str] = None + + session: requests.Session = field(default_factory=lambda: requests.Session()) + + base_url: str = "https://api.crossref.org" + + api_key: Optional[str] = None + + email: Optional[str] = None + + where: Optional[Dict] = None + + _uses_cache: bool = False + + def __post_init__(self): + cache_path = self.cache_path + if not cache_path: + cache_path = pystow.join("oaklib", "session_cache", "ncbi", ensure_exists=True) + self.set_cache(cache_path) + + def set_cache(self, name: str) -> None: + self.session = requests_cache.CachedSession(name) + self._uses_cache = True + + def objects_by_ids(self, dois: List[str]) -> List[Dict]: + parsed_data = [] + + for doi in dois: + doi = doi.replace("DOI:", "") # Remove the "DOI:" prefix if present + url = f"{self.base_url}/works/{doi}" + response = self.session.get(url) + + if response.status_code == 200: + data = response.json() + + record = { + "id": f"DOI:{data['DOI']}", + "title": data["title"][0] if "title" in data else None, + "abstract": data.get("abstract", None), + "published_online": data.get("published-online", {}).get( + "date-parts", [[None]] + )[0][0], + "published_print": data.get("published-print", {}).get("date-parts", [[None]])[ + 0 + ][0], + "volume": data.get("volume", None), + "issue": data.get("issue", None), + "page": data.get("page", None), + "publisher": data.get("publisher", None), + "type": data.get("type", None), + "journal": data.get("container-title", [None])[0], + "ISSN": data.get("ISSN", [None])[0], + } + + parsed_data.append(record) + else: + logger.error( + f"Error fetching data for DOI: {doi}. Status code: {response.status_code}" + ) + + return parsed_data + + def fetch_pmcid(self, pmid: str) -> Optional[str]: + pmid = pmid.replace("PMID:", "") + session = self.session + params = {"db": "pmc", "linkname": "datacite_pmc", "id": pmid} + url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi" + response = session.get(url, params=params) + root = fromstring(response.content) + + for link_set in root.findall(".//LinkSet"): + for link in link_set.findall(".//Link"): + pmcid = link.find("./Id").text + if pmcid: + return f"PMC:PMC{pmcid}" + return None + + def fetch_full_text(self, object_id: str) -> Optional[str]: + session = self.session + if object_id.startswith("PMID:"): + pmcid = self.fetch_pmcid(object_id) + else: + pmcid = object_id + # PMC is a banana - get rid of the PMC prefix as well as local prefix + pmcid = pmcid.replace("PMC:", "") + pmcid = pmcid.replace("PMC", "") + url = f"https://www.ncbi.nlm.nih.gov/pmc/utils/oa/oa.fcgi?id=PMC{pmcid}" + response = session.get(url) + root = fromstring(response.content) + + for record in root.findall(".//record"): + for link in record.findall(".//link"): + format_type = link.attrib.get("format") + download_url = link.attrib.get("href") + if format_type == "xml": + xml_response = requests.get(download_url) # noqa S113 + return xml_response.text + elif format_type == "tgz": + # make a named temp file + local_file_path = tempfile.NamedTemporaryFile().name + parsed_url = urlparse(download_url) + if parsed_url.scheme not in ["http", "https", "ftp"]: + continue + urlretrieve(download_url, local_file_path) # noqa S310 + + # Open and extract the tar.gz file + with tarfile.open(local_file_path, "r:gz") as tar: + for member in tar.getmembers(): + if member.name.endswith(".xml") or member.name.endswith(".nxml"): + f = tar.extractfile(member) + xml_str = f.read().decode("utf-8") + # return extract_text_from_xml(xml_str) + return xml_str + return None diff --git a/src/oaklib/utilities/publication_utils/pubdb_wrapper.py b/src/oaklib/utilities/publication_utils/pubdb_wrapper.py new file mode 100644 index 000000000..916b23175 --- /dev/null +++ b/src/oaklib/utilities/publication_utils/pubdb_wrapper.py @@ -0,0 +1,36 @@ +from abc import ABC +from dataclasses import dataclass, field +from typing import ClassVar, Dict, List, Optional + +import pystow +import requests +import requests_cache + + +@dataclass +class PubDBWrapper(ABC): + + name: ClassVar[str] = "__generic__" + + cache_path: Optional[str] = None + + session: requests.Session = field(default_factory=lambda: requests.Session()) + + api_key: Optional[str] = None + + email: Optional[str] = None + + _uses_cache: bool = False + + def __post_init__(self): + cache_path = self.cache_path + if not cache_path: + cache_path = pystow.join("oaklib", "session_cache", self.name, ensure_exists=True) + self.set_cache(cache_path) + + def set_cache(self, name: str) -> None: + self.session = requests_cache.CachedSession(name) + self._uses_cache = True + + def objects_by_ids(self, object_ids: List[str]) -> List[Dict]: + raise NotImplementedError diff --git a/src/oaklib/utilities/publication_utils/pubmed_wrapper.py b/src/oaklib/utilities/publication_utils/pubmed_wrapper.py new file mode 100644 index 000000000..be066f304 --- /dev/null +++ b/src/oaklib/utilities/publication_utils/pubmed_wrapper.py @@ -0,0 +1,167 @@ +import logging +import tarfile +import tempfile +import time +from dataclasses import dataclass, field +from typing import ClassVar, Dict, List, Optional +from urllib.parse import urlparse +from urllib.request import urlretrieve + +import requests +from defusedxml.ElementTree import fromstring + +from oaklib.utilities.publication_utils.pubdb_wrapper import PubDBWrapper + +logger = logging.getLogger(__name__) + +ESEARCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/esearch.fcgi" +EFETCH_URL = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/efetch.fcgi" + +RATE_LIMIT_DELAY = 1.0 + + +def extract_all_text(element): + text = element.text or "" + for subelement in element: + text += extract_all_text(subelement) + text += subelement.tail if subelement.tail else "" + return text + + +def extract_text_from_xml(xml_content): + root = fromstring(xml_content) + return extract_all_text(root).strip() + + +@dataclass +class PubmedWrapper(PubDBWrapper): + """ + A wrapper to provide a search facade over PubMed. + """ + + name: ClassVar[str] = "ncbi" + + cache_path: Optional[str] = None + + session: requests.Session = field(default_factory=lambda: requests.Session()) + + api_key: Optional[str] = None + + email: Optional[str] = None + + where: Optional[Dict] = None + + _uses_cache: bool = False + + def objects_by_ids(self, object_ids: List[str]) -> List[Dict]: + pubmed_ids = sorted([x.replace("PMID:", "") for x in object_ids]) + session = self.session + logger.info(f"Using session: {session} [cached: {self._uses_cache} for {pubmed_ids}") + + # Parameters for the efetch request + efetch_params = { + "db": "pubmed", + "id": ",".join(pubmed_ids), # Combine PubMed IDs into a comma-separated string + "rettype": "medline", + "retmode": "text", + } + efetch_response = session.get(EFETCH_URL, params=efetch_params) + if not self._uses_cache or not efetch_response.from_cache: + # throttle if not using cache or if not cached + logger.debug(f"Sleeping for {RATE_LIMIT_DELAY} seconds") + time.sleep(RATE_LIMIT_DELAY) + if not efetch_response.ok: + logger.error(f"Failed to fetch data for {pubmed_ids}") + raise ValueError( + f"Failed to fetch data for {pubmed_ids} using {session} and {efetch_params}" + ) + medline_records = efetch_response.text + + # Parsing titles and abstracts from the MEDLINE records + parsed_data = [] + current_record = {} + current_field = None + + for line in medline_records.split("\n"): + if line.startswith("PMID- "): + current_field = "id" + current_record[current_field] = "PMID:" + line.replace("PMID- ", "").strip() + if line.startswith("PMC - "): + current_field = "pmcid" + current_record[current_field] = "PMCID:" + line.replace("PMC - ", "").strip() + elif line.startswith("TI - "): + current_field = "title" + current_record[current_field] = line.replace("TI - ", "").strip() + elif line.startswith("PT - "): + current_field = "publication_type" + v = line.replace("PT - ", "").strip() + current_record[current_field] = v + if v == "Retracted Publication": + current_record["retracted"] = True + elif line.startswith("AB - "): + current_field = "abstract" + current_record[current_field] = line.replace("AB - ", "").strip() + elif line.startswith(" "): # Continuation of the previous field + if current_field and current_field in current_record: + current_record[current_field] += " " + line.strip() + else: + current_field = None + + if line == "": + if current_record: + parsed_data.append(current_record) + current_record = {} + return parsed_data + + def fetch_pmcid(self, pmid: str) -> Optional[str]: + pmid = pmid.replace("PMID:", "") + session = self.session + params = {"db": "pmc", "linkname": "pubmed_pmc", "id": pmid} + url = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/elink.fcgi" + response = session.get(url, params=params) + root = fromstring(response.content) # noqa S113 + + for link_set in root.findall(".//LinkSet"): + for link in link_set.findall(".//Link"): + pmcid = link.find("./Id").text + if pmcid: + return f"PMC:PMC{pmcid}" + return None + + def fetch_full_text(self, object_id: str) -> Optional[str]: + session = self.session + if object_id.startswith("PMID:"): + pmcid = self.fetch_pmcid(object_id) + else: + pmcid = object_id + # PMC is a banana - get rid of the PMC prefix as well as local prefix + pmcid = pmcid.replace("PMC:", "") + pmcid = pmcid.replace("PMC", "") + url = f"https://www.ncbi.nlm.nih.gov/pmc/utils/oa/oa.fcgi?id=PMC{pmcid}" + response = session.get(url) + root = fromstring(response.content) + + for record in root.findall(".//record"): + for link in record.findall(".//link"): + format_type = link.attrib.get("format") + download_url = link.attrib.get("href") + if format_type == "xml": + xml_response = requests.get(download_url) # noqa S113 + return xml_response.text + elif format_type == "tgz": + # make a named temp file + local_file_path = tempfile.NamedTemporaryFile().name + parsed_url = urlparse(download_url) + if parsed_url.scheme not in ["http", "https", "ftp"]: + continue + urlretrieve(download_url, local_file_path) # noqa S310 + + # Open and extract the tar.gz file + with tarfile.open(local_file_path, "r:gz") as tar: + for member in tar.getmembers(): + if member.name.endswith(".xml") or member.name.endswith(".nxml"): + f = tar.extractfile(member) + xml_str = f.read().decode("utf-8") + return extract_text_from_xml(xml_str) + # return xml_str + return None diff --git a/src/oaklib/utilities/validation/definition_ontology_rule.py b/src/oaklib/utilities/validation/definition_ontology_rule.py index a48d0b8ab..ac30bd979 100644 --- a/src/oaklib/utilities/validation/definition_ontology_rule.py +++ b/src/oaklib/utilities/validation/definition_ontology_rule.py @@ -1,10 +1,11 @@ import logging from dataclasses import dataclass -from typing import Iterable, Iterator, List, Optional +from typing import Dict, Iterable, Iterator, List, Optional from oaklib import BasicOntologyInterface from oaklib.datamodels.obograph import LogicalDefinitionAxiom from oaklib.datamodels.ontology_metadata import OMOSCHEMA, DefinitionConstraintComponent +from oaklib.datamodels.text_annotator import TextAnnotation from oaklib.datamodels.validation_datamodel import SeverityOptions, ValidationResult from oaklib.datamodels.vocabulary import HAS_DEFINITION_CURIE from oaklib.interfaces import TextAnnotatorInterface @@ -51,7 +52,7 @@ class ProcessedTextDefinition: @dataclass -class TextAndLogicalDefinitionMatchOntologyRule(OntologyRule): +class DefinitionOntologyRule(OntologyRule): """ Text and logical definitions should match. @@ -65,6 +66,8 @@ class TextAndLogicalDefinitionMatchOntologyRule(OntologyRule): - S7: Avoid circularity - S11: Match text and logical definitions + See ``_ for more details. + """ name: str = "text and logical definition match rule" @@ -107,6 +110,7 @@ def check_against_logical_definition( oi: BasicOntologyInterface, pdef: ProcessedTextDefinition, ldef: LogicalDefinitionAxiom, + anns_by_object: Dict[CURIE, TextAnnotation] = None, ) -> Iterator[ValidationResult]: """ Check a text definition against a logical definition. @@ -114,64 +118,52 @@ def check_against_logical_definition( :param oi: :param pdef: :param ldef: + :param anns_by_object: text annotations of the text definition by object :return: """ subject = ldef.definedClassId - if isinstance(oi, TextAnnotatorInterface) and not self.skip_text_annotation: - anns = list(oi.annotate_text(pdef.main_definition)) - anns_by_object = {ann.object_id: ann for ann in anns} - - def _check( - expected_id: CURIE, expected_in_text: str, is_genus=False - ) -> Iterator[ValidationResult]: - if expected_id in anns_by_object: - if not expected_in_text: - pass - else: - ann = anns_by_object[expected_id] - if ann.match_string in expected_in_text: - if is_genus and len(ann.match_string) < len(expected_in_text): - yield ValidationResult( - subject=subject, - predicate=HAS_DEFINITION_CURIE, - type=DefinitionConstraintComponent.GenusDifferentiaForm.meaning, - object_str=expected_in_text, - info=f"Did not match whole text: {ann.match_string} < {expected_in_text}", - ) - else: + + def _check( + expected_id: CURIE, expected_in_text: str, is_genus=False + ) -> Iterator[ValidationResult]: + if expected_id in anns_by_object: + if not expected_in_text: + pass + else: + ann = anns_by_object[expected_id] + if ann.match_string in expected_in_text: + if is_genus and len(ann.match_string) < len(expected_in_text): yield ValidationResult( - type=DefinitionConstraintComponent.MatchTextAndLogical.meaning, subject=subject, predicate=HAS_DEFINITION_CURIE, + type=DefinitionConstraintComponent.GenusDifferentiaForm.meaning, object_str=expected_in_text, - info=f"Wrong position, '{ann.match_string}' not in '{expected_in_text}'", + info=f"Did not match whole text: {ann.match_string} < {expected_in_text}", ) - else: - yield ValidationResult( - type=DefinitionConstraintComponent.MatchTextAndLogical.meaning, - # object=expected_id, - predicate=HAS_DEFINITION_CURIE, - object_str=expected_in_text, - subject=subject, - info=f"Not found: {expected_id}", - ) - - for genus in ldef.genusIds: - for result in _check(genus, pdef.genus_text, is_genus=True): - yield result - for restr in ldef.restrictions: - for result in _check(restr.fillerId, pdef.differentia_text): - yield result - if subject in anns_by_object: + else: + yield ValidationResult( + type=DefinitionConstraintComponent.MatchTextAndLogical.meaning, + subject=subject, + predicate=HAS_DEFINITION_CURIE, + object_str=expected_in_text, + info=f"Wrong position, '{ann.match_string}' not in '{expected_in_text}'", + ) + else: yield ValidationResult( - type=DefinitionConstraintComponent.Circularity.meaning, - subject=subject, + type=DefinitionConstraintComponent.MatchTextAndLogical.meaning, + # object=expected_id, predicate=HAS_DEFINITION_CURIE, - object_str=pdef.main_definition, - info=f"Circular, {anns_by_object[subject].match_string} in definition", + object_str=expected_in_text, + subject=subject, + info=f"Logical definition element not found in text: {expected_id}", ) - else: - logging.info(f"Skipping text annotation for {subject}") + + for genus in ldef.genusIds: + for result in _check(genus, pdef.genus_text, is_genus=True): + yield result + for restr in ldef.restrictions: + for result in _check(restr.fillerId, pdef.differentia_text): + yield result def evaluate( self, oi: BasicOntologyInterface, entities: Iterable[CURIE] = None @@ -195,6 +187,8 @@ def evaluate( if subject.startswith("<"): continue tdef = oi.definition(subject) + + anns_by_object = {} if tdef: pdef = self.process_text_definition(tdef) if not pdef.genus_text or not pdef.differentia_text: @@ -207,6 +201,10 @@ def evaluate( info="Cannot parse genus and differentia", ) problem_count += 1 + if isinstance(oi, TextAnnotatorInterface) and not self.skip_text_annotation: + anns = list(oi.annotate_text(pdef.main_definition)) + anns_by_object = {ann.object_id: ann for ann in anns} + logging.debug(f"ANNS {tdef} ==> {len(anns)}") else: pdef = None yield ValidationResult( @@ -217,10 +215,34 @@ def evaluate( info="Missing text definition", ) problem_count += 1 + if subject in anns_by_object: + ann = anns_by_object[subject] + text_before = tdef[0 : ann.subject_start] + text_after = tdef[ann.subject_end :] + is_terms = [" is ", " are ", " were "] + if len(text_before) < 5 or any(t for t in is_terms if text_after.startswith(t)): + yield ValidationResult( + subject=subject, + predicate=HAS_DEFINITION_CURIE, + type=DefinitionConstraintComponent.Conventions.meaning, + info="Definiendum should not appear at the start", + ) + problem_count += 1 + else: + yield ValidationResult( + type=DefinitionConstraintComponent.Circularity.meaning, + subject=subject, + predicate=HAS_DEFINITION_CURIE, + object_str=pdef.main_definition, + info=f"Circular, {ann.match_string} ({subject} in definition", + ) + problem_count += 1 if isinstance(oi, OboGraphInterface): for ldef in oi.logical_definitions([subject]): if pdef: - for result in self.check_against_logical_definition(oi, pdef, ldef): + for result in self.check_against_logical_definition( + oi, pdef, ldef, anns_by_object + ): yield result problem_count += 1 if len(ldef.genusIds) != 1: diff --git a/src/oaklib/utilities/validation/rule_runner.py b/src/oaklib/utilities/validation/rule_runner.py index d661ac9fc..9d9f45236 100644 --- a/src/oaklib/utilities/validation/rule_runner.py +++ b/src/oaklib/utilities/validation/rule_runner.py @@ -5,12 +5,12 @@ from oaklib import BasicOntologyInterface from oaklib.datamodels.validation_datamodel import ValidationResult from oaklib.utilities.validation.definition_ontology_rule import ( - TextAndLogicalDefinitionMatchOntologyRule, + DefinitionOntologyRule, ) from oaklib.utilities.validation.disjointness_rule import DisjointnessRule from oaklib.utilities.validation.ontology_rule import OntologyRule -RULES = [TextAndLogicalDefinitionMatchOntologyRule, DisjointnessRule] +RULES = [DefinitionOntologyRule, DisjointnessRule] @dataclass diff --git a/tests/test_implementations/__init__.py b/tests/test_implementations/__init__.py index fc28f423a..18c45bffb 100644 --- a/tests/test_implementations/__init__.py +++ b/tests/test_implementations/__init__.py @@ -151,12 +151,16 @@ class ComplianceTester: It is recommended that within the `setUp` method of the unit test, the following is performed. - >>> self.compliance_tester = ComplianceTester(self) + .. code-block:: python + + self.compliance_tester = ComplianceTester(self) Then individual test can call this: - >>> def test_foo(self): - >>> self.compliance_tester.test_foo(self.oi) + .. code-block:: python + + def test_foo(self): + self.compliance_tester.test_foo(self.oi) """ test: unittest.TestCase diff --git a/tests/test_implementations/test_pronto.py b/tests/test_implementations/test_pronto.py index cdc746d57..3c5610fce 100644 --- a/tests/test_implementations/test_pronto.py +++ b/tests/test_implementations/test_pronto.py @@ -20,7 +20,7 @@ index_graph_nodes, ) from oaklib.utilities.validation.definition_ontology_rule import ( - TextAndLogicalDefinitionMatchOntologyRule, + DefinitionOntologyRule, ) from tests import ( @@ -500,7 +500,7 @@ def test_logical_definitions(self): def test_ontology_rules(self): # TODO: decide whether ontology rules should be validated # as part of each implementation, or as a standalone - rule = TextAndLogicalDefinitionMatchOntologyRule() + rule = DefinitionOntologyRule() results = list(rule.evaluate(self.oi)) self.assertGreater(len(results), 5) diff --git a/tests/test_implementations/test_simple_obo.py b/tests/test_implementations/test_simple_obo.py index f4a9632ab..b7328a10e 100644 --- a/tests/test_implementations/test_simple_obo.py +++ b/tests/test_implementations/test_simple_obo.py @@ -215,7 +215,7 @@ def test_sssom_mappings(self): self.compliance_tester.test_sssom_mappings(self.oi) def test_definitions(self): - self.compliance_tester.test_definitions(self.oi) + self.compliance_tester.test_definitions(self.oi, include_metadata=True) def test_subsets(self): self.compliance_tester.test_subsets(self.oi) diff --git a/tests/test_utilities/test_pubdb_wrapper.py b/tests/test_utilities/test_pubdb_wrapper.py new file mode 100644 index 000000000..f18216dcf --- /dev/null +++ b/tests/test_utilities/test_pubdb_wrapper.py @@ -0,0 +1,13 @@ +import pytest +from oaklib.utilities.publication_utils.pubmed_wrapper import PubmedWrapper + + +@pytest.fixture +def pubmed_wrapper(): + return PubmedWrapper() + + +def test_retracted(pubmed_wrapper): + objs = pubmed_wrapper.objects_by_ids(["PMID:19717156"]) + [obj] = objs + assert obj["retracted"] diff --git a/tests/test_validation/test_definition_ontology_rules.py b/tests/test_validation/test_definition_ontology_rules.py index e730782b9..edf2fc308 100644 --- a/tests/test_validation/test_definition_ontology_rules.py +++ b/tests/test_validation/test_definition_ontology_rules.py @@ -8,7 +8,7 @@ from oaklib.implementations.pronto.pronto_implementation import ProntoImplementation from oaklib.resource import OntologyResource from oaklib.utilities.validation.definition_ontology_rule import ( - TextAndLogicalDefinitionMatchOntologyRule, + DefinitionOntologyRule, ) from oaklib.utilities.validation.rule_runner import RuleRunner @@ -24,7 +24,7 @@ def setUp(self) -> None: oi = ProntoImplementation(resource) self.oi = oi self.rule_runner = RuleRunner() - self.rule = TextAndLogicalDefinitionMatchOntologyRule() + self.rule = DefinitionOntologyRule() def test_rule(self): """ @@ -56,13 +56,6 @@ def test_rule(self): None, 1, ), - ( - "A nuclear membrane is a membrane that is part of a nucleus", - "membrane", - "is part of a nucleus", - None, - 1, - ), ] ldef = LogicalDefinitionAxiom( definedClassId=NUCLEAR_MEMBRANE, @@ -75,12 +68,16 @@ def test_rule(self): self.assertEqual(genus, pdef.genus_text) self.assertEqual(differentia, pdef.differentia_text) self.assertEqual(gloss, pdef.gloss) - results = list(rule.check_against_logical_definition(self.oi, pdef, ldef)) + anns = list(self.oi.annotate_text(tdef)) + anns_by_object = {ann.object_id: ann for ann in anns} + results = list( + rule.check_against_logical_definition(self.oi, pdef, ldef, anns_by_object) + ) self.assertEqual( expected_results, len(results), f"check_against_logical_definition unexpected; Case: {case}", ) - results = list(rule.evaluate(self.oi)) - for result in results: - print(result) + for r in results: + print(f"{tdef} :: {r.type} :: {r.info}") + _results = list(rule.evaluate(self.oi))