diff --git a/.github/workflows/build-deploy-documentation.yaml b/.github/workflows/build-deploy-documentation.yaml deleted file mode 100644 index 4056c7c..0000000 --- a/.github/workflows/build-deploy-documentation.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: Build and Deploy Static Mkdocs Documentation - -# Controls when the action will run. Triggers the workflow on pull request -on: - push: - branches: - - main - paths: - - 'mkdocs.yml' - - 'src/schema/*.yaml' - - 'src/docs/*' - - repository_dispatch: - types: trigger-build-deploy-documentation - -# A workflow run is made up of one or more jobs that can run sequentially or in parallel -jobs: - github-pages: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-python@v2 - with: - python-version: 3.x - - # install dependencies - - run: pip install --upgrade pip - - run: pip install mkdocs - - run: pip install linkml - - # generate markdown files - - run: make stage-docs - - # deploy documentation (note: requires documentation is in docs dir) - - run: make gh-deploy diff --git a/.github/workflows/check-pull-request.yaml b/.github/workflows/check-pull-request.yaml index 92df1fb..e722fd5 100644 --- a/.github/workflows/check-pull-request.yaml +++ b/.github/workflows/check-pull-request.yaml @@ -17,13 +17,13 @@ jobs: fail-fast: false matrix: os: [ ubuntu-latest, windows-latest ] - python-version: [ "3.9", "3.10" ] - exclude: - - os: windows-latest - python-version: "3.9" + python-version: [ "3.9", "3.10", "3.11", "3.12" , "3.13" ] runs-on: ${{ matrix.os }} + # Allow Python 3.13 to fail due to scipy not being available yet + continue-on-error: ${{ matrix.python-version == '3.13' }} + steps: #---------------------------------------------- @@ -57,7 +57,7 @@ jobs: #---------------------------------------------- - name: Load cached venv id: cached-poetry-dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: .venv key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }} @@ -86,3 +86,6 @@ jobs: run: | poetry run pip install -U pytest poetry run pytest tests/ + + - name: Check project dependencies + run: make check-dependencies diff --git a/.github/workflows/codespell.yml b/.github/workflows/codespell.yml new file mode 100644 index 0000000..dd0eb8e --- /dev/null +++ b/.github/workflows/codespell.yml @@ -0,0 +1,23 @@ +# Codespell configuration is within pyproject.toml +--- +name: Codespell + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + codespell: + name: Check for spelling errors + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Codespell + uses: codespell-project/actions-codespell@v2 diff --git a/.github/workflows/doc_pages.yaml b/.github/workflows/doc_pages.yaml index a6a0669..510ecd4 100644 --- a/.github/workflows/doc_pages.yaml +++ b/.github/workflows/doc_pages.yaml @@ -27,6 +27,7 @@ jobs: run: | mkdir gh-pages touch gh-pages/.nojekyll + make all-docs cd docs/ poetry run sphinx-build -b html . _build cp -r _build/* ../gh-pages/ @@ -37,4 +38,4 @@ jobs: with: branch: gh-pages force: true - folder: gh-pages \ No newline at end of file + folder: gh-pages diff --git a/.gitignore b/.gitignore index ec442c0..5bddbe2 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,5 @@ tests/outputs/* venv/ .venv/ target/ -local/ \ No newline at end of file +local/ +.python-version diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index f877cf0..cff6b45 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -6,7 +6,7 @@ In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, sex characteristics, gender identity and expression, -level of experience, education, socio-economic status, nationality, personal +level of experience, education, socioeconomic status, nationality, personal appearance, race, religion, or sexual identity and orientation. ## Our Standards diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 77f7219..8e3a3fe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -29,7 +29,7 @@ For running tests, we use `pytest`. ## Discussion If you run into any issues or find certain functionality not documented/explained properly then feel free to -raise a ticket in the project's [issue tracker](https://github.com/linkml/issues). +raise a ticket in the project's [issue tracker](https://github.com/linkml/schema-automator/issues). There are issue templates to capture certain types of issues. ## First Time Contributors @@ -73,12 +73,12 @@ with a 'Do Not Merge' label. ## How to Report a Bug We recommend making a new ticket for each bug that you encounter while working with KGX. Please be sure to provide -sufficient context for a bug you are reporting. There are [Issue Templates](https://github.com/linkml/issues/new/choose) +sufficient context for a bug you are reporting. There are [Issue Templates](https://github.com/linkml/schema-automator/issues/new/choose) that you can use as a starting point. ## How to Request an Enhancement -We welcome request for enhancements and you can make these requestes via the issue tracker. Please be sure to provide +We welcome request for enhancements and you can make these requests via the issue tracker. Please be sure to provide sufficient context to what the enhancement is trying to address, its utility, and how it's likely to be useful to you and the broader community. diff --git a/Makefile b/Makefile index 0e7e671..444951b 100644 --- a/Makefile +++ b/Makefile @@ -1,76 +1,41 @@ RUN = poetry run VERSION = $(shell git tag | tail -1) +MODELS = cadsr frictionless -.PHONY: all clean test +.PHONY: all clean test all-docs sphinx-html check-dependencies -all: clean test target/soil_meanings.yaml +all: clean test -clean: - rm -rf target/soil_meanings.yaml - rm -rf target/soil_meanings_generated.yaml - rm -rf target/availabilities_g_s_strain_202112151116.yaml - rm -rf target/availabilities_g_s_strain_202112151116_org_meanings.yaml - test: $(RUN) pytest tests/ schema_automator/metamodels/%.py: schema_automator/metamodels/%.yaml $(RUN) gen-python $< > $@.tmp && mv $@.tmp $@ -# tried to find a single meaning for each permissible value -# unlike term mapping, which can tolerate multiple mapped terms -target/soil_meanings.yaml: tests/resources/mixs/terms.yaml - poetry run enum_annotator \ - --modelfile $< \ - --requested_enum_name fao_class_enum \ - --ontology_string ENVO > $@ - -# validate that it's still valid LinkML -# FileNotFoundError: [Errno 2] No such file or directory: '/Users/MAM/Documents/gitrepos/linkml-model-enrichment/target/ranges.yaml' -# cp tests/resources/mixs/*yaml target -target/soil_meanings_generated.yaml: target/soil_meanings.yaml - poetry run gen-yaml $< > $@ - -# requires Felix files -# add demonstration SQL file -target/availabilities_g_s_strain_202112151116.yaml: local/availabilities_g_s_strain_202112151116.tsv - poetry run tsv2linkml \ - --enum-columns organism \ - --output $@ \ - --class_name availabilities \ - --schema_name availabilities $< - -# KeyError: 'iri' could mean that an unrecognized ontology name was used -target/availabilities_g_s_strain_202112151116_org_meanings.yaml: target/availabilities_g_s_strain_202112151116.yaml - poetry run enum_annotator \ - --modelfile $< \ - --requested_enum_name organism_enum \ - --ontology_string NCBITAXON > $@ - -target/availabilities_g_s_strain_202112151116_org_meanings_curateable.tsv: target/availabilities_g_s_strain_202112151116_org_meanings.yaml - poetry run enums_to_curateable \ - --modelfile $< \ - --enum organism_enum \ - --tsv_out $@ - -# do some curation on target/availabilities_g_s_strain_202112151116_org_meanings_curateable.tsv -# and save as target/availabilities_g_s_strain_202112151116_org_meanings_curated.txt -# Excel wants to call it "*.txt". I'm saving as UTF 16 so I can be sure about the encoding at import time. - -target/availabilities_g_s_strain_202112151116_org_meanings_curated.yaml: target/availabilities_g_s_strain_202112151116_org_meanings_curated.txt - poetry run curated_to_enums \ - --tsv_in $< \ - --tsv_encoding utf_16 \ - --model_in target/availabilities_g_s_strain_202112151116_org_meanings.yaml \ - --curated_yaml $@ \ - --selected_enum organism_enum +check-dependencies: + $(RUN) deptry schema_automator --known-first-party schema_automator # create a convenient wrapper script; # this can be used outside the poetry environment bin/schemauto: echo `poetry run which schemauto` '"$$@"' > $@ && chmod +x $@ +######################## +#### Metamodel docs #### +######################## + +all-docs: $(patsubst %,docs-%,$(MODELS)) + +docs-dosdp: schema_automator/metamodels/dosdp/dosdp_linkml.yaml + $(RUN) gen-doc -d docs/metamodels/dosdp $< + +docs-%: schema_automator/metamodels/%.yaml + $(RUN) gen-doc -d docs/metamodels/$* $< + +sphinx-%: + cd docs && $(RUN) make $* +.PHONY: sphinx-% ################################################ #### Commands for building the Docker image #### diff --git a/schema_automator/enhancer/__init__.py b/docs/_static/.gitkeep similarity index 100% rename from schema_automator/enhancer/__init__.py rename to docs/_static/.gitkeep diff --git a/docs/cli.rst b/docs/cli.rst index 941633b..7303875 100644 --- a/docs/cli.rst +++ b/docs/cli.rst @@ -1,24 +1,24 @@ -.. cli: +.. _cli: -Command Line -============ +Command Line Interface +====================== -All Schema Automator functionality is available via the ``schemauto`` command +All Schema Automator functionality is available via the ``schemauto`` command. Preamble -------- -.. warning :: +.. warning:: Previous versions had specific commands like ``tsv2linkml`` these are now deprecated. Instead these are now *subcommands* of the main ``schemauto`` command, and have been renamed. -.. note :: +.. note:: we follow the `CLIG `_ guidelines as far as possible Main commands ---------- +------------- .. currentmodule:: schema_automator.cli diff --git a/docs/conf.py b/docs/conf.py index 4bc31b9..ac52fa6 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,9 +12,9 @@ # import os import sys -import sphinx_pdj_theme +#import sphinx_pdj_theme -sys.path.insert(0, os.path.abspath('../..')) +sys.path.insert(0, os.path.abspath('..')) # -- Project information ----------------------------------------------------- @@ -33,32 +33,32 @@ # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ - 'sphinx.ext.autodoc', - 'sphinx.ext.githubpages', - 'sphinx.ext.autosectionlabel', - 'sphinx_pdj_theme', - 'sphinx_click', - 'sphinx.ext.viewcode', - 'sphinx.ext.todo', - 'sphinx.ext.coverage', - 'sphinx.ext.autosummary', - 'myst_parser', - 'sphinx.ext.intersphinx', - 'sphinxcontrib.mermaid' + "sphinx.ext.autodoc", + "sphinx.ext.githubpages", + "sphinx.ext.autosectionlabel", + "sphinx_pdj_theme", + "sphinx_click", + "sphinx.ext.viewcode", + "sphinx.ext.todo", + "sphinx.ext.coverage", + "sphinx.ext.autosummary", + "myst_parser", + "sphinx.ext.intersphinx", + "sphinxcontrib.mermaid" ] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = ['.rst', '.md'] +# source_suffix = [".rst", ".md"] +source_suffix = [".rst", ".md"] # Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] +templates_path = ["_templates"] # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # -- Options for HTML output ------------------------------------------------- @@ -66,10 +66,10 @@ # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # -html_theme = 'sphinx_pdj_theme' -html_theme_path = [sphinx_pdj_theme.get_html_theme_path()] +#html_theme = "sphinx_pdj_theme" +#html_theme_path = [sphinx_pdj_theme.get_html_theme_path()] # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] \ No newline at end of file +html_static_path = ["_static"] diff --git a/docs/index.rst b/docs/index.rst index dfd4006..0dd92be 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -1,13 +1,15 @@ LinkML Schema Automator -============================================ +======================= Schema Automator is a toolkit for bootstrapping and automatically enhancing schemas from a variety of sources. +The project is open source (BSD 3-clause license) and hosted on `GitHub `_. + Use cases include: 1. Inferring an initial schema or data dictionary from a dataset that is a collection of TSVs 2. Automatically annotating schema elements and enumerations using the BioPortal annotator -3. Importing from a language like RDFS/OWL +3. Importing from a language like RDFS/OWL/SQL The primary output of Schema Automator is a `LinkML Schema `_. This can be converted to other schema frameworks, including: @@ -23,11 +25,11 @@ schema frameworks, including: :maxdepth: 3 :caption: Contents: - index introduction install cli packages/index + metamodels/index Indices and tables diff --git a/docs/install.rst b/docs/install.rst index db4c120..eae5a78 100644 --- a/docs/install.rst +++ b/docs/install.rst @@ -1,8 +1,8 @@ Installation -====== +============ Direct Installation ------------- +------------------- ``schema-automator`` and its components require Python 3.9 or greater. @@ -17,7 +17,7 @@ To check this works: schemauto --help Running via Docker ------------- +------------------ You can use the `Schema Automator Docker Container `_ diff --git a/docs/introduction.rst b/docs/introduction.rst index 97cf33f..06b93f4 100644 --- a/docs/introduction.rst +++ b/docs/introduction.rst @@ -1,7 +1,5 @@ -.. _introduction: - Introduction -======================= +============ This is a toolkit that assists with generating and enhancing schemas and data models from a variety of sources. @@ -9,7 +7,7 @@ of sources. The primary end target is a `LinkML `_ schema, but the framework can be used to generate JSON-Schema, SHACL, SQL DDL etc via the `LinkML Generator `_ framework. -All functionality is available via a :ref:`cli`. In future there will be a web-based interface. +All functionality is available via a :ref:`CLI `. In future there will be a web-based interface. The functionality is also available by using the relevant Python :ref:`packages`. Generalization from Instance Data @@ -24,17 +22,18 @@ Generalizers allow you to *bootstrap* a schema by generalizing from existing dat * RDF instance graphs Importing from alternative modeling frameworks ---------------------------------- +---------------------------------------------- See :ref:`importers` * OWL (but this only works for schema-style OWL) * JSON-Schema +* SQL DDL In future other frameworks will be supported Annotating schemas ---------------------------------- +------------------ See :ref:`annotators` @@ -42,9 +41,10 @@ Annotators to provide ways to automatically add metadata to your schema, includi * Assigning class or slot URIs to schema elements * Mapping enums to ontologies and vocabularies +* Annotate using Large Language Models (LLMs) General Utilities ---------------------------------- +----------------- -See :ref:`utilitiess` +See :ref:`utilities` diff --git a/docs/metamodels/index.rst b/docs/metamodels/index.rst new file mode 100644 index 0000000..179b512 --- /dev/null +++ b/docs/metamodels/index.rst @@ -0,0 +1,13 @@ +Source Metamodels +================= + +Schema Automator makes use of LinkML Schema representations of source +metamodels in order to define transformations. + +.. toctree:: + :maxdepth: 3 + :caption: Contents: + + cadsr/index + frictionless/index + dosdp/index diff --git a/docs/packages/annotators.rst b/docs/packages/annotators.rst index 5b87e44..0520a08 100644 --- a/docs/packages/annotators.rst +++ b/docs/packages/annotators.rst @@ -1,7 +1,5 @@ -.. annotators: - Annotators -========= +========== Importers take an existing schema and *annotate* it with information @@ -17,7 +15,7 @@ of different sources that can be used for annotation, including: For documentation on selecting the right ontology source, see: -`Selectors `_ +- `Selectors `_ .. currentmodule:: schema_automator.annotators @@ -27,4 +25,5 @@ For documentation on selecting the right ontology source, see: .. autoclass:: JsonLdAnnotator :members: - +.. autoclass:: LLMAnnotator + :members: diff --git a/docs/packages/generalizers.rst b/docs/packages/generalizers.rst index 9ce15d8..32542b4 100644 --- a/docs/packages/generalizers.rst +++ b/docs/packages/generalizers.rst @@ -1,7 +1,5 @@ -.. generalizers: - Generalizers -========= +============ Generalizers take example data and *generalizes* to a schema @@ -11,11 +9,11 @@ Generalizers take example data and *generalizes* to a schema that *semi*-automates the creation of a new schema for you. Generalizing from a single TSV ------------------ +------------------------------ .. code-block:: - schemauto generalize-csv tests/resources/NWT_wildfires_biophysical_2016.tsv -o wildfire.yaml + schemauto generalize-tsv tests/resources/NWT_wildfires_biophysical_2016.tsv -o wildfire.yaml The schema will have a slot for every column, e,g: @@ -90,65 +88,9 @@ Enums will be automatically inferred: Lowland Black Spruce: description: Lowland Black Spruce -Chaining an annotator ------------------ - -If you provide an ``--annotator`` option you can auto-annotate enums: - -.. code-block:: - - schemauto generalize-csv \ - --annotator bioportal:envo \ - tests/resources/NWT_wildfires_biophysical_2016.tsv \ - -o wildfire.yaml - -.. code-block:: yaml - - ecosystem_enum: - from_schema: https://w3id.org/MySchema - permissible_values: - Open Fen: - description: Open Fen - meaning: ENVO:00000232 - exact_mappings: - - ENVO:00000232 - Treed Fen: - description: Treed Fen - meaning: ENVO:00000232 - exact_mappings: - - ENVO:00000232 - Black Spruce: - description: Black Spruce - Poor Fen: - description: Poor Fen - meaning: ENVO:00000232 - exact_mappings: - - ENVO:00000232 - Fen: - description: Fen - meaning: ENVO:00000232 - Lowland: - description: Lowland - Upland: - description: Upland - meaning: ENVO:00000182 - Bog: - description: Bog - meaning: ENVO:01000534 - exact_mappings: - - ENVO:01000535 - - ENVO:00000044 - - ENVO:01001209 - - ENVO:01000527 - Lowland Black Spruce: - description: Lowland Black Spruce - -The annotation can also be run as a separate step - -See :ref:`annotators` Generalizing from multiple TSVs ------------- +------------------------------- You can use the ``generalize-tsvs`` command to generalize from *multiple* TSVs, with foreign key linkages auto-inferred. @@ -217,7 +159,7 @@ slots: range: string Generalizing from tables on the web ------------------ +----------------------------------- You can use ``generalize-htmltable`` @@ -274,12 +216,69 @@ Will generate: - TWAS P value Generalizing from JSON ------------ +---------------------- +tbw +Chaining an annotator +--------------------- + +If you provide an ``--annotator`` option you can auto-annotate enums: + +.. code-block:: + + schemauto generalize-tsv \ + --annotator bioportal:envo \ + tests/resources/NWT_wildfires_biophysical_2016.tsv \ + -o wildfire.yaml -Packages --------- +.. code-block:: yaml + + ecosystem_enum: + from_schema: https://w3id.org/MySchema + permissible_values: + Open Fen: + description: Open Fen + meaning: ENVO:00000232 + exact_mappings: + - ENVO:00000232 + Treed Fen: + description: Treed Fen + meaning: ENVO:00000232 + exact_mappings: + - ENVO:00000232 + Black Spruce: + description: Black Spruce + Poor Fen: + description: Poor Fen + meaning: ENVO:00000232 + exact_mappings: + - ENVO:00000232 + Fen: + description: Fen + meaning: ENVO:00000232 + Lowland: + description: Lowland + Upland: + description: Upland + meaning: ENVO:00000182 + Bog: + description: Bog + meaning: ENVO:01000534 + exact_mappings: + - ENVO:01000535 + - ENVO:00000044 + - ENVO:01001209 + - ENVO:01000527 + Lowland Black Spruce: + description: Lowland Black Spruce + +The annotation can also be run as a separate step + +See :ref:`annotators` + +Packages for generalizing +------------------------- .. currentmodule:: schema_automator.generalizers @@ -290,4 +289,4 @@ Packages :members: .. autoclass:: RdfDataGeneralizer - :members: \ No newline at end of file + :members: diff --git a/docs/packages/importers.rst b/docs/packages/importers.rst index cb40d42..e12f859 100644 --- a/docs/packages/importers.rst +++ b/docs/packages/importers.rst @@ -1,11 +1,9 @@ -.. importers: - Importers ========= Importers take either a representation of a schema in a different language or example data and bootstraps a schema. -Importers are the opposite of `Generalizers `_ in the core LinkML framework +Importers are the opposite of `Generators `_ in the core LinkML framework .. warning:: @@ -15,7 +13,7 @@ Importers are the opposite of `Generalizers `_. + +NCI implements a JSON serialization of ISO-11197. You can import this JSON and convert to LinkML: + +.. code-block:: + + schemauto import-cadsr "cdes/*.json" + + +Importing from DBML +-------------------- + +DBML is a simple DSL for defining database schemas. It is a subset of SQL DDL. + + + +Packages for importing +---------------------- .. currentmodule:: schema_automator.importers @@ -72,3 +101,5 @@ Packages .. autoclass:: DOSDPImportEngine :members: +.. autoclass:: CADSRImportEngine + :members: \ No newline at end of file diff --git a/docs/packages/index.rst b/docs/packages/index.rst index 3b0e99f..0c5a5f9 100644 --- a/docs/packages/index.rst +++ b/docs/packages/index.rst @@ -1,5 +1,3 @@ -.. packages: - Packages ======== @@ -12,3 +10,4 @@ The code is organized into different python *packages* importers generalizers annotators + utilities diff --git a/docs/packages/utilities.rst b/docs/packages/utilities.rst index 49a5a17..950d8f8 100644 --- a/docs/packages/utilities.rst +++ b/docs/packages/utilities.rst @@ -1,5 +1,3 @@ -.. utilities: - Utilities ========= diff --git a/notebooks/images/FRED.png b/notebooks/images/FRED.png new file mode 100644 index 0000000..2b04a4d Binary files /dev/null and b/notebooks/images/FRED.png differ diff --git a/poetry.lock b/poetry.lock index a49bf78..0edde3b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,261 +1,478 @@ +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. + [[package]] -name = "aiohttp" -version = "3.8.3" -description = "Async http client/server framework (asyncio)" -category = "main" +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." optional = false -python-versions = ">=3.6" - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = ">=4.0.0a3,<5.0" -attrs = ">=17.3.0" -charset-normalizer = ">=2.0,<3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" +python-versions = "*" +groups = ["main"] +files = [ + {file = "airium-0.2.6-py3-none-any.whl", hash = "sha256:50af5cf491e084f27909e29a93550b4170e587cde01334d58c6249644ee8c6c2"}, + {file = "airium-0.2.6.tar.gz", hash = "sha256:ccab36b798b6cce3d0c5074e52ce8059f6e82991caae4985f42cadfad80b1de4"}, +] [package.extras] -speedups = ["aiodns", "brotli", "cchardet"] +dev = ["pytest (>=6.2,<7.0)", "pytest-cov (>=3.0,<4.0)", "pytest-mock (>=3.6,<4.0)"] +parse = ["beautifulsoup4 (>=4.10.0,<5.0)", "requests (>=2.12.0,<3)"] [[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -frozenlist = ">=1.1.0" +name = "alabaster" +version = "0.7.16" +description = "A light, configurable Sphinx theme" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "alabaster-0.7.16-py3-none-any.whl", hash = "sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92"}, + {file = "alabaster-0.7.16.tar.gz", hash = "sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65"}, +] [[package]] name = "alabaster" -version = "0.7.12" -description = "A configurable sidebar-enabled Sphinx theme" -category = "main" +version = "1.0.0" +description = "A light, configurable Sphinx theme" +optional = false +python-versions = ">=3.10" +groups = ["main", "dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "alabaster-1.0.0-py3-none-any.whl", hash = "sha256:fc6786402dc3fcb2de3cabd5fe455a2db534b371124f1f21de8731783dec828b"}, + {file = "alabaster-1.0.0.tar.gz", hash = "sha256:c00dca57bca26fa62a6d7d0a9fcce65f3e026e9bfe33e9c538fd3fbb2144fd9e"}, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +description = "Reusable constraint types to use with typing.Annotated" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, +] [[package]] name = "antlr4-python3-runtime" version = "4.9.3" description = "ANTLR 4.9.3 runtime for Python 3.7" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, +] [[package]] name = "anyio" -version = "3.6.2" +version = "4.9.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, +] +markers = {main = "extra == \"llm\""} [package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["packaging", "sphinx-rtd-theme", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["coverage[toml] (>=4.5)", "hypothesis (>=4.0)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "contextlib2", "uvloop (<0.15)", "mock (>=4)", "uvloop (>=0.15)"] -trio = ["trio (>=0.16,<0.22)"] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] +trio = ["trio (>=0.26.1)"] [[package]] 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 = "*" +groups = ["main"] +files = [ + {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, + {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, +] [[package]] name = "appnope" -version = "0.1.3" +version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" +groups = ["dev"] +markers = "platform_system == \"Darwin\"" +files = [ + {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, + {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, +] [[package]] name = "argon2-cffi" -version = "21.3.0" -description = "The secure Argon2 password hashing algorithm." -category = "dev" +version = "23.1.0" +description = "Argon2 for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, + {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, +] [package.dependencies] argon2-cffi-bindings = "*" [package.extras] -dev = ["pre-commit", "cogapp", "tomli", "coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "sphinx-notfound-page", "furo"] -docs = ["sphinx", "sphinx-notfound-page", "furo"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +dev = ["argon2-cffi[tests,typing]", "tox (>4)"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] +tests = ["hypothesis", "pytest"] +typing = ["mypy"] [[package]] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, + {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, + {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, + {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, + {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, +] [package.dependencies] cffi = ">=1.0.1" [package.extras] -dev = ["pytest", "cogapp", "pre-commit", "wheel"] +dev = ["cogapp", "pre-commit", "pytest", "wheel"] tests = ["pytest"] [[package]] name = "arrow" -version = "1.2.3" +version = "1.3.0" description = "Better dates & times for Python" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, + {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, +] [package.dependencies] python-dateutil = ">=2.7.0" +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.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] [[package]] name = "asttokens" -version = "2.1.0" +version = "3.0.0" description = "Annotate AST trees with source code positions" -category = "dev" optional = false -python-versions = "*" - -[package.dependencies] -six = "*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, +] [package.extras] -test = ["astroid (<=2.5.3)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] -name = "async-timeout" -version = "4.0.2" -description = "Timeout context manager for asyncio programs" -category = "main" +name = "async-lru" +version = "2.0.5" +description = "Simple LRU cache for asyncio" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "async_lru-2.0.5-py3-none-any.whl", hash = "sha256:ab95404d8d2605310d345932697371a5f40def0487c03d6d0ad9138de52c9943"}, + {file = "async_lru-2.0.5.tar.gz", hash = "sha256:481d52ccdd27275f42c43a928b4a50c3bfb2d67af4e78b170e3e0bb39c66e5bb"}, +] + +[package.dependencies] +typing_extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} [[package]] name = "attrs" -version = "22.1.0" +version = "25.3.0" description = "Classes Without Boilerplate" -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3"}, + {file = "attrs-25.3.0.tar.gz", hash = "sha256:75d7cefc7fb576747b2c81b4442d4d4a1ce0900973527c011d1030fd3bf4af1b"}, +] [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] +benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +dev = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier"] +tests = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.10\""] [[package]] name = "babel" -version = "2.11.0" +version = "2.17.0" description = "Internationalization utilities" -category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pytz = ">=2015.7" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "babel-2.17.0-py3-none-any.whl", hash = "sha256:4d0b53093fdfb4b21c92b5213dba5a1b23885afa8383709427046b21c366e5f2"}, + {file = "babel-2.17.0.tar.gz", hash = "sha256:0c54cffb19f690cdcc52a3b50bcbf71e07a808d1c80d549f2459b9d2cf0afb9d"}, +] -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -category = "dev" -optional = false -python-versions = "*" +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "freezegun (>=1.0,<2.0)", "jinja2 (>=3.0)", "pytest (>=6.0)", "pytest-cov", "pytz", "setuptools", "tzdata ; sys_platform == \"win32\""] [[package]] name = "bcp47" -version = "0.0.4" +version = "0.1.0" description = "Language tags made easy" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "bcp47-0.1.0-py3-none-any.whl", hash = "sha256:a567b7fe881c900916a9db62ac8f792370c7ddf2664e601b74eeed35d8758aa5"}, + {file = "bcp47-0.1.0.tar.gz", hash = "sha256:37cc7a03fd696149ebfe7de785c5bad473f911eddac8415cf479584049cf03d5"}, +] [[package]] name = "beautifulsoup4" -version = "4.11.1" +version = "4.13.4" description = "Screen-scraping library" -category = "dev" optional = false -python-versions = ">=3.6.0" +python-versions = ">=3.7.0" +groups = ["main", "dev"] +files = [ + {file = "beautifulsoup4-4.13.4-py3-none-any.whl", hash = "sha256:9bbbb14bfde9d79f38b8cd5f8c7c85f4b8f2523190ebed90e950a8dea4cb1c4b"}, + {file = "beautifulsoup4-4.13.4.tar.gz", hash = "sha256:dbb3c4e1ceae6aefebdaf2423247260cd062430a410e38c66f2baa50a8437195"}, +] [package.dependencies] soupsieve = ">1.2" +typing-extensions = ">=4.0.0" [package.extras] +cchardet = ["cchardet"] +chardet = ["chardet"] +charset-normalizer = ["charset-normalizer"] html5lib = ["html5lib"] lxml = ["lxml"] [[package]] name = "bioregistry" -version = "0.5.143" +version = "0.12.13" description = "Integrated registry of biological databases and nomenclatures" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "bioregistry-0.12.13-py3-none-any.whl", hash = "sha256:d2a9d3d7bf40aecd2f5f54cbe61cea222d1192b6315058ebceea22ff1c2365dd"}, + {file = "bioregistry-0.12.13.tar.gz", hash = "sha256:1e5d462cede81c27e121081aaac467a6f3839135a2841ec2581e1c906b63a9e7"}, +] [package.dependencies] click = "*" -curies = "*" -more-click = "*" -pydantic = "*" +curies = ">=0.7.0" +more_click = ">=0.1.2" +pydantic = {version = ">=2.0", extras = ["email"]} pystow = ">=0.1.13" requests = "*" tqdm = "*" [package.extras] -align = ["pyyaml", "beautifulsoup4", "tabulate", "defusedxml", "class-resolver"] -charts = ["matplotlib", "matplotlib-venn", "seaborn", "pandas"] -docs = ["sphinx", "sphinx-rtd-theme", "sphinx-click", "sphinx-autodoc-typehints", "sphinx-automodapi", "autodoc-pydantic"] -export = ["pyyaml", "rdflib", "rdflib-jsonld", "ndex2"] -gha = ["more-itertools"] -health = ["click-default-group", "pandas", "tabulate", "pyyaml"] -tests = ["coverage", "pytest", "more-itertools"] -web = ["pyyaml", "rdflib", "rdflib-jsonld", "flask", "flasgger", "bootstrap-flask (<=2.0.0)", "markdown"] +align = ["beautifulsoup4", "class-resolver", "defusedxml", "fairsharing-client (>=0.1.0)", "pandas", "pyyaml", "tabulate"] +charts = ["jinja2", "matplotlib", "matplotlib_venn", "pandas", "seaborn"] +docs = ["autodoc_pydantic", "sphinx (>=8)", "sphinx-click", "sphinx-rtd-theme (>=3.0)", "sphinx_automodapi"] +export = ["ndex2", "pyyaml", "rdflib", "rdflib-jsonld"] +gha = ["more_itertools"] +health = ["click_default_group", "jinja2", "pandas", "pyyaml", "tabulate"] +mapping-checking = ["pandas", "sentence_transformers"] +paper-ranking = ["indra", "pandas", "scikit-learn", "tabulate"] +tests = ["coverage", "httpx", "indra", "more_itertools", "pytest", "scikit-learn"] +web = ["a2wsgi", "bootstrap-flask", "curies[fastapi]", "fastapi", "flask (>=3.0.0)", "markdown", "pyyaml", "rdflib", "rdflib-endpoint (>=0.5.3)", "rdflib-jsonld", "uvicorn", "werkzeug (>=3.0.0)"] [[package]] name = "bleach" -version = "5.0.1" +version = "6.2.0" description = "An easy safelist-based HTML-sanitizing tool." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, + {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, +] [package.dependencies] -six = ">=1.9.0" +tinycss2 = {version = ">=1.1.0,<1.5", optional = true, markers = "extra == \"css\""} webencodings = "*" [package.extras] -css = ["tinycss2 (>=1.1.0,<1.2)"] -dev = ["build (==0.8.0)", "flake8 (==4.0.1)", "hashin (==0.17.0)", "pip-tools (==6.6.2)", "pytest (==7.1.2)", "Sphinx (==4.3.2)", "tox (==3.25.0)", "twine (==4.0.1)", "wheel (==0.37.1)", "black (==22.3.0)", "mypy (==0.961)"] +css = ["tinycss2 (>=1.1.0,<1.5)"] + +[[package]] +name = "cachetools" +version = "5.5.2" +description = "Extensible memoizing collections and decorators" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "cachetools-5.5.2-py3-none-any.whl", hash = "sha256:d26a22bcc62eb95c3beabd9f1ee5e820d3d2704fe2967cbe350e20c8ffcd3f0a"}, + {file = "cachetools-5.5.2.tar.gz", hash = "sha256:1a661caa9175d26759571b2e19580f9d6393969e5dfca11fdb1f947a23e640d4"}, +] + +[[package]] +name = "cattrs" +version = "24.1.3" +description = "Composable complex class support for attrs and dataclasses." +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "cattrs-24.1.3-py3-none-any.whl", hash = "sha256:adf957dddd26840f27ffbd060a6c4dd3b2192c5b7c2c0525ef1bd8131d8a83f5"}, + {file = "cattrs-24.1.3.tar.gz", hash = "sha256:981a6ef05875b5bb0c7fb68885546186d306f10f0f6718fe9b96c226e68821ff"}, +] + +[package.dependencies] +attrs = ">=23.1.0" +exceptiongroup = {version = ">=1.1.1", markers = "python_version < \"3.11\""} +typing-extensions = {version = ">=4.1.0,<4.6.3 || >4.6.3", markers = "python_version < \"3.11\""} + +[package.extras] +bson = ["pymongo (>=4.4.0)"] +cbor2 = ["cbor2 (>=5.4.6)"] +msgpack = ["msgpack (>=1.0.5)"] +msgspec = ["msgspec (>=0.18.5) ; implementation_name == \"cpython\""] +orjson = ["orjson (>=3.9.2) ; implementation_name == \"cpython\""] +pyyaml = ["pyyaml (>=6.0)"] +tomlkit = ["tomlkit (>=0.11.8)"] +ujson = ["ujson (>=5.7.0)"] [[package]] name = "certifi" -version = "2022.9.24" +version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, +] [[package]] name = "cffi" -version = "1.15.1" +version = "1.17.1" description = "Foreign Function Interface for Python calling C code." -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, +] [package.dependencies] pycparser = "*" @@ -264,68 +481,217 @@ pycparser = "*" name = "cfgraph" version = "0.2.1" description = "rdflib collections flattening graph" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "CFGraph-0.2.1.tar.gz", hash = "sha256:b57fe7044a10b8ff65aa3a8a8ddc7d4cd77bf511b42e57289cd52cbc29f8fe74"}, +] [package.dependencies] rdflib = ">=0.4.2" [[package]] name = "chardet" -version = "4.0.0" -description = "Universal encoding detector for Python 2 and 3" -category = "main" +version = "5.2.0" +description = "Universal encoding detector for Python 3" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, + {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, +] [[package]] name = "charset-normalizer" -version = "2.1.1" +version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false -python-versions = ">=3.6.0" - -[package.extras] -unicode_backport = ["unicodedata2"] +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, +] [[package]] name = "class-resolver" -version = "0.3.10" +version = "0.6.0" description = "Lookup and instantiate classes with style." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "class_resolver-0.6.0-py3-none-any.whl", hash = "sha256:cc629187a10bacff2e360939f8a4e8e7d209583dc8b318485ff91a0d24d5c9d0"}, + {file = "class_resolver-0.6.0.tar.gz", hash = "sha256:8a3c20ab771925477f65cad8a49bb431e11543c82fbfadbf611c6769228a6cae"}, +] + +[package.dependencies] +importlib-metadata = {version = ">3.6", markers = "python_full_version < \"3.10.0\""} +typing-extensions = "*" [package.extras] click = ["click"] -docdata = ["docdata"] -docs = ["sphinx", "sphinx-rtd-theme", "sphinx-autodoc-typehints", "sphinx-automodapi"] numpy = ["numpy"] optuna = ["optuna"] -ray = ["ray"] -tests = ["coverage", "pytest"] +sklearn = ["scikit-learn"] +tabulate = ["tabulate"] torch = ["torch"] +torch-geometric = ["torch", "torch-geometric", "torch-sparse"] [[package]] name = "click" -version = "8.1.3" +version = "8.1.8" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} +[[package]] +name = "click" +version = "8.2.0" +description = "Composable command line interface toolkit" +optional = false +python-versions = ">=3.10" +groups = ["main", "dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "click-8.2.0-py3-none-any.whl", hash = "sha256:6b303f0b2aa85f1cb4e5303078fadcbcd4e476f114fab9b5007005711839325c"}, + {file = "click-8.2.0.tar.gz", hash = "sha256:f5452aeddd9988eefa20f90f05ab66f17fce1ee2a36907fd30b05bbb5953814d"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[[package]] +name = "click-default-group" +version = "1.2.4" +description = "click_default_group" +optional = true +python-versions = ">=2.7" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "click_default_group-1.2.4-py2.py3-none-any.whl", hash = "sha256:9b60486923720e7fc61731bdb32b617039aba820e22e1c88766b1125592eaa5f"}, + {file = "click_default_group-1.2.4.tar.gz", hash = "sha256:eb3f3c99ec0d456ca6cd2a7f08f7d4e91771bef51b01bdd9580cc6450fe1251e"}, +] + +[package.dependencies] +click = "*" + +[package.extras] +test = ["pytest"] + [[package]] name = "click-log" version = "0.4.0" description = "Logging integration for Click" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "click-log-0.4.0.tar.gz", hash = "sha256:3970f8570ac54491237bcdb3d8ab5e3eef6c057df29f8c3d1151a51a9c23b975"}, + {file = "click_log-0.4.0-py2.py3-none-any.whl", hash = "sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756"}, +] [package.dependencies] click = "*" @@ -334,468 +700,1259 @@ click = "*" 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" +groups = ["main", "dev"] +markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] -name = "curies" -version = "0.4.0" -description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." -category = "main" +name = "comm" +version = "0.2.2" +description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "comm-0.2.2-py3-none-any.whl", hash = "sha256:e6fb86cb70ff661ee8c9c14e7d36d6de3b4066f1441be4063df9c5009f0a64d3"}, + {file = "comm-0.2.2.tar.gz", hash = "sha256:3fd7a84065306e07bea1773df6eb8282de51ba82f77c72f9c85716ab11fe980e"}, +] + +[package.dependencies] +traitlets = ">=4" + +[package.extras] +test = ["pytest"] + +[[package]] +name = "curies" +version = "0.10.19" +description = "Idiomatic conversion between URIs and compact URIs (CURIEs)" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "curies-0.10.19-py3-none-any.whl", hash = "sha256:8f34e945c5101f6ba0916bc73c1e1e244da5412adf35eabcf0e596acb47460d6"}, + {file = "curies-0.10.19.tar.gz", hash = "sha256:aeae5e7cbb7aee6c5144376fcb69e15a0d3c0557a12f9edff809bd0ce5004ea2"}, +] [package.dependencies] +eval-type-backport = {version = "*", markers = "python_version < \"3.10\""} +pydantic = ">=2.0" pytrie = "*" -requests = "*" +typing-extensions = "*" [package.extras] -tests = ["coverage", "pytest"] +docs = ["sphinx (>=8)", "sphinx-automodapi", "sphinx-rtd-theme (>=3.0)"] +fastapi = ["defusedxml", "fastapi", "httpx", "python-multipart", "uvicorn"] +flask = ["defusedxml", "flask"] pandas = ["pandas"] -docs = ["sphinx-automodapi", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinx"] -bioregistry = ["bioregistry (>=0.5.136)"] +rdflib = ["rdflib"] +tests = ["coverage[toml]", "pytest", "requests"] + +[[package]] +name = "daff" +version = "1.4.2" +description = "Diff and patch tables" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "daff-1.4.2-py3-none-any.whl", hash = "sha256:88981a21d065e4378b5c4bd40b975dbfdea9b7ff540071f3bb5e20cc8b3590b5"}, + {file = "daff-1.4.2.tar.gz", hash = "sha256:47f0391eda7e2b5011f7ccac006b9178accb465bcb94a2c9f284257fff5d2686"}, +] [[package]] name = "debugpy" -version = "1.6.3" +version = "1.8.14" description = "An implementation of the Debug Adapter Protocol for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "debugpy-1.8.14-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:93fee753097e85623cab1c0e6a68c76308cd9f13ffdf44127e6fab4fbf024339"}, + {file = "debugpy-1.8.14-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d937d93ae4fa51cdc94d3e865f535f185d5f9748efb41d0d49e33bf3365bd79"}, + {file = "debugpy-1.8.14-cp310-cp310-win32.whl", hash = "sha256:c442f20577b38cc7a9aafecffe1094f78f07fb8423c3dddb384e6b8f49fd2987"}, + {file = "debugpy-1.8.14-cp310-cp310-win_amd64.whl", hash = "sha256:f117dedda6d969c5c9483e23f573b38f4e39412845c7bc487b6f2648df30fe84"}, + {file = "debugpy-1.8.14-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:1b2ac8c13b2645e0b1eaf30e816404990fbdb168e193322be8f545e8c01644a9"}, + {file = "debugpy-1.8.14-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf431c343a99384ac7eab2f763980724834f933a271e90496944195318c619e2"}, + {file = "debugpy-1.8.14-cp311-cp311-win32.whl", hash = "sha256:c99295c76161ad8d507b413cd33422d7c542889fbb73035889420ac1fad354f2"}, + {file = "debugpy-1.8.14-cp311-cp311-win_amd64.whl", hash = "sha256:7816acea4a46d7e4e50ad8d09d963a680ecc814ae31cdef3622eb05ccacf7b01"}, + {file = "debugpy-1.8.14-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:8899c17920d089cfa23e6005ad9f22582fd86f144b23acb9feeda59e84405b84"}, + {file = "debugpy-1.8.14-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6bb5c0dcf80ad5dbc7b7d6eac484e2af34bdacdf81df09b6a3e62792b722826"}, + {file = "debugpy-1.8.14-cp312-cp312-win32.whl", hash = "sha256:281d44d248a0e1791ad0eafdbbd2912ff0de9eec48022a5bfbc332957487ed3f"}, + {file = "debugpy-1.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:5aa56ef8538893e4502a7d79047fe39b1dae08d9ae257074c6464a7b290b806f"}, + {file = "debugpy-1.8.14-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:329a15d0660ee09fec6786acdb6e0443d595f64f5d096fc3e3ccf09a4259033f"}, + {file = "debugpy-1.8.14-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f920c7f9af409d90f5fd26e313e119d908b0dd2952c2393cd3247a462331f15"}, + {file = "debugpy-1.8.14-cp313-cp313-win32.whl", hash = "sha256:3784ec6e8600c66cbdd4ca2726c72d8ca781e94bce2f396cc606d458146f8f4e"}, + {file = "debugpy-1.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:684eaf43c95a3ec39a96f1f5195a7ff3d4144e4a18d69bb66beeb1a6de605d6e"}, + {file = "debugpy-1.8.14-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:d5582bcbe42917bc6bbe5c12db1bffdf21f6bfc28d4554b738bf08d50dc0c8c3"}, + {file = "debugpy-1.8.14-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5349b7c3735b766a281873fbe32ca9cca343d4cc11ba4a743f84cb854339ff35"}, + {file = "debugpy-1.8.14-cp38-cp38-win32.whl", hash = "sha256:7118d462fe9724c887d355eef395fae68bc764fd862cdca94e70dcb9ade8a23d"}, + {file = "debugpy-1.8.14-cp38-cp38-win_amd64.whl", hash = "sha256:d235e4fa78af2de4e5609073972700523e372cf5601742449970110d565ca28c"}, + {file = "debugpy-1.8.14-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:413512d35ff52c2fb0fd2d65e69f373ffd24f0ecb1fac514c04a668599c5ce7f"}, + {file = "debugpy-1.8.14-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c9156f7524a0d70b7a7e22b2e311d8ba76a15496fb00730e46dcdeedb9e1eea"}, + {file = "debugpy-1.8.14-cp39-cp39-win32.whl", hash = "sha256:b44985f97cc3dd9d52c42eb59ee9d7ee0c4e7ecd62bca704891f997de4cef23d"}, + {file = "debugpy-1.8.14-cp39-cp39-win_amd64.whl", hash = "sha256:b1528cfee6c1b1c698eb10b6b096c598738a8238822d218173d21c3086de8123"}, + {file = "debugpy-1.8.14-py2.py3-none-any.whl", hash = "sha256:5cd9a579d553b6cb9759a7908a41988ee6280b961f24f63336835d9418216a20"}, + {file = "debugpy-1.8.14.tar.gz", hash = "sha256:7cd287184318416850aa8b60ac90105837bb1e59531898c07569d197d2ed5322"}, +] [[package]] name = "decorator" -version = "5.1.1" +version = "5.2.1" description = "Decorators for Humans" -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, +] [[package]] 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.*" +groups = ["main", "dev"] +files = [ + {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, + {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, +] [[package]] name = "deprecated" -version = "1.2.13" +version = "1.2.18" 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.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +groups = ["main"] +files = [ + {file = "Deprecated-1.2.18-py2.py3-none-any.whl", hash = "sha256:bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec"}, + {file = "deprecated-1.2.18.tar.gz", hash = "sha256:422b6f6d859da6f2ef57857761bfb392480502a64c3028ca9bbe86085d72115d"}, +] [package.dependencies] wrapt = ">=1.10,<2" [package.extras] -dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] +dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "setuptools ; python_version >= \"3.12\"", "tox"] [[package]] name = "deprecation" version = "2.1.0" description = "A library to handle automated deprecations" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, + {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, +] [package.dependencies] packaging = "*" [[package]] -name = "distlib" -version = "0.3.6" -description = "Distribution utilities" -category = "main" +name = "deptry" +version = "0.23.0" +description = "A command line utility to check for unused, missing and transitive dependencies in a Python project." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "deptry-0.23.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:1f2a6817a37d76e8f6b667381b7caf6ea3e6d6c18b5be24d36c625f387c79852"}, + {file = "deptry-0.23.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:9601b64cc0aed42687fdd5c912d5f1e90d7f7333fb589b14e35bfdfebae866f3"}, + {file = "deptry-0.23.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6172b2205f6e84bcc9df25226693d4deb9576a6f746c2ace828f6d13401d357"}, + {file = "deptry-0.23.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1cfa4b3a46ee8a026eaa38e4b9ba43fe6036a07fe16bf0a663cb611b939f6af8"}, + {file = "deptry-0.23.0-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:9d03cc99a61c348df92074a50e0a71b28f264f0edbf686084ca90e6fd44e3abe"}, + {file = "deptry-0.23.0-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:9a46f78098f145100dc582a59af8548b26cdfa16cf0fbd85d2d44645e724cb6a"}, + {file = "deptry-0.23.0-cp39-abi3-win_amd64.whl", hash = "sha256:d53e803b280791d89a051b6183d9dc40411200e22a8ab7e6c32c6b169822a664"}, + {file = "deptry-0.23.0-cp39-abi3-win_arm64.whl", hash = "sha256:da7678624f4626d839c8c03675452cefc59d6cf57d25c84a9711dae514719279"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:40706dcbed54141f2d23afa70a272171c8c46531cd6f0f9c8ef482c906b3cee2"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:889541844092f18e7b48631852195f36c25c5afd4d7e074b19ba824b430add50"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aff9156228eb16cd81792f920c1623c00cb59091ae572600ba0eac587da33c0c"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:583154732cfd438a4a090b7d13d8b2016f1ac2732534f34fb689345768d8538b"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:736e7bc557aec6118b2a4d454f0d81f070782faeaa9d8d3c9a15985c9f265372"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:5f7e4b1a5232ed6d352fca7173750610a169377d1951d3e9782947191942a765"}, + {file = "deptry-0.23.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:04afae204654542406318fd3dd6f4a6697579597f37195437daf84a53ee0ebbf"}, + {file = "deptry-0.23.0.tar.gz", hash = "sha256:4915a3590ccf38ad7a9176aee376745aa9de121f50f8da8fb9ccec87fa93e676"}, +] + +[package.dependencies] +click = ">=8.0.0,<9" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +packaging = ">=23.2" +requirements-parser = ">=0.11.0,<1" +tomli = {version = ">=2.0.1", markers = "python_version < \"3.11\""} + +[[package]] +name = "distro" +version = "1.9.0" +description = "Distro - an OS platform information API" +optional = true +python-versions = ">=3.6" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, + {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, +] + +[[package]] +name = "dnspython" +version = "2.7.0" +description = "DNS toolkit" optional = false -python-versions = "*" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "dnspython-2.7.0-py3-none-any.whl", hash = "sha256:b4c34b7d10b51bcc3a5071e7b8dee77939f1e878477eeecc965e9835f63c6c86"}, + {file = "dnspython-2.7.0.tar.gz", hash = "sha256:ce9c432eda0dc91cf618a5cedf1a4e142651196bbcd2c80e89ed5a907e5cfaf1"}, +] + +[package.extras] +dev = ["black (>=23.1.0)", "coverage (>=7.0)", "flake8 (>=7)", "hypercorn (>=0.16.0)", "mypy (>=1.8)", "pylint (>=3)", "pytest (>=7.4)", "pytest-cov (>=4.1.0)", "quart-trio (>=0.11.0)", "sphinx (>=7.2.0)", "sphinx-rtd-theme (>=2.0.0)", "twine (>=4.0.0)", "wheel (>=0.42.0)"] +dnssec = ["cryptography (>=43)"] +doh = ["h2 (>=4.1.0)", "httpcore (>=1.0.0)", "httpx (>=0.26.0)"] +doq = ["aioquic (>=1.0.0)"] +idna = ["idna (>=3.7)"] +trio = ["trio (>=0.23)"] +wmi = ["wmi (>=1.5.1)"] [[package]] name = "docopt" version = "0.6.2" description = "Pythonic argument parser, that will make you smile" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491"}, +] [[package]] name = "docutils" -version = "0.17.1" +version = "0.21.2" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2"}, + {file = "docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f"}, +] + +[[package]] +name = "duckdb" +version = "0.10.3" +description = "DuckDB in-process database" +optional = true +python-versions = ">=3.7.0" +groups = ["main"] +markers = "extra == \"duckdb\"" +files = [ + {file = "duckdb-0.10.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd25cc8d001c09a19340739ba59d33e12a81ab285b7a6bed37169655e1cefb31"}, + {file = "duckdb-0.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f9259c637b917ca0f4c63887e8d9b35ec248f5d987c886dfc4229d66a791009"}, + {file = "duckdb-0.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b48f5f1542f1e4b184e6b4fc188f497be8b9c48127867e7d9a5f4a3e334f88b0"}, + {file = "duckdb-0.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e327f7a3951ea154bb56e3fef7da889e790bd9a67ca3c36afc1beb17d3feb6d6"}, + {file = "duckdb-0.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d8b20ed67da004b4481973f4254fd79a0e5af957d2382eac8624b5c527ec48c"}, + {file = "duckdb-0.10.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d37680b8d7be04e4709db3a66c8b3eb7ceba2a5276574903528632f2b2cc2e60"}, + {file = "duckdb-0.10.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3d34b86d6a2a6dfe8bb757f90bfe7101a3bd9e3022bf19dbddfa4b32680d26a9"}, + {file = "duckdb-0.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:73b1cb283ca0f6576dc18183fd315b4e487a545667ffebbf50b08eb4e8cdc143"}, + {file = "duckdb-0.10.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d917dde19fcec8cadcbef1f23946e85dee626ddc133e1e3f6551f15a61a03c61"}, + {file = "duckdb-0.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:46757e0cf5f44b4cb820c48a34f339a9ccf83b43d525d44947273a585a4ed822"}, + {file = "duckdb-0.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:338c14d8ac53ac4aa9ec03b6f1325ecfe609ceeb72565124d489cb07f8a1e4eb"}, + {file = "duckdb-0.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:651fcb429602b79a3cf76b662a39e93e9c3e6650f7018258f4af344c816dab72"}, + {file = "duckdb-0.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3ae3c73b98b6215dab93cc9bc936b94aed55b53c34ba01dec863c5cab9f8e25"}, + {file = "duckdb-0.10.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56429b2cfe70e367fb818c2be19f59ce2f6b080c8382c4d10b4f90ba81f774e9"}, + {file = "duckdb-0.10.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b46c02c2e39e3676b1bb0dc7720b8aa953734de4fd1b762e6d7375fbeb1b63af"}, + {file = "duckdb-0.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:bcd460feef56575af2c2443d7394d405a164c409e9794a4d94cb5fdaa24a0ba4"}, + {file = "duckdb-0.10.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e229a7c6361afbb0d0ab29b1b398c10921263c52957aefe3ace99b0426fdb91e"}, + {file = "duckdb-0.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:732b1d3b6b17bf2f32ea696b9afc9e033493c5a3b783c292ca4b0ee7cc7b0e66"}, + {file = "duckdb-0.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f5380d4db11fec5021389fb85d614680dc12757ef7c5881262742250e0b58c75"}, + {file = "duckdb-0.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:468a4e0c0b13c55f84972b1110060d1b0f854ffeb5900a178a775259ec1562db"}, + {file = "duckdb-0.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fa1e7ff8d18d71defa84e79f5c86aa25d3be80d7cb7bc259a322de6d7cc72da"}, + {file = "duckdb-0.10.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ed1063ed97c02e9cf2e7fd1d280de2d1e243d72268330f45344c69c7ce438a01"}, + {file = "duckdb-0.10.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:22f2aad5bb49c007f3bfcd3e81fdedbc16a2ae41f2915fc278724ca494128b0c"}, + {file = "duckdb-0.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:8f9e2bb00a048eb70b73a494bdc868ce7549b342f7ffec88192a78e5a4e164bd"}, + {file = "duckdb-0.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6c2fc49875b4b54e882d68703083ca6f84b27536d57d623fc872e2f502b1078"}, + {file = "duckdb-0.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a66c125d0c30af210f7ee599e7821c3d1a7e09208196dafbf997d4e0cfcb81ab"}, + {file = "duckdb-0.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99dd7a1d901149c7a276440d6e737b2777e17d2046f5efb0c06ad3b8cb066a6"}, + {file = "duckdb-0.10.3-cp37-cp37m-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5ec3bbdb209e6095d202202893763e26c17c88293b88ef986b619e6c8b6715bd"}, + {file = "duckdb-0.10.3-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:2b3dec4ef8ed355d7b7230b40950b30d0def2c387a2e8cd7efc80b9d14134ecf"}, + {file = "duckdb-0.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:04129f94fb49bba5eea22f941f0fb30337f069a04993048b59e2811f52d564bc"}, + {file = "duckdb-0.10.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:d75d67024fc22c8edfd47747c8550fb3c34fb1cbcbfd567e94939ffd9c9e3ca7"}, + {file = "duckdb-0.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f3796e9507c02d0ddbba2e84c994fae131da567ce3d9cbb4cbcd32fadc5fbb26"}, + {file = "duckdb-0.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:78e539d85ebd84e3e87ec44d28ad912ca4ca444fe705794e0de9be3dd5550c11"}, + {file = "duckdb-0.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a99b67ac674b4de32073e9bc604b9c2273d399325181ff50b436c6da17bf00a"}, + {file = "duckdb-0.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1209a354a763758c4017a1f6a9f9b154a83bed4458287af9f71d84664ddb86b6"}, + {file = "duckdb-0.10.3-cp38-cp38-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3b735cea64aab39b67c136ab3a571dbf834067f8472ba2f8bf0341bc91bea820"}, + {file = "duckdb-0.10.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:816ffb9f758ed98eb02199d9321d592d7a32a6cb6aa31930f4337eb22cfc64e2"}, + {file = "duckdb-0.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:1631184b94c3dc38b13bce4045bf3ae7e1b0ecbfbb8771eb8d751d8ffe1b59b3"}, + {file = "duckdb-0.10.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fb98c35fc8dd65043bc08a2414dd9f59c680d7e8656295b8969f3f2061f26c52"}, + {file = "duckdb-0.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7e75c9f5b6a92b2a6816605c001d30790f6d67ce627a2b848d4d6040686efdf9"}, + {file = "duckdb-0.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ae786eddf1c2fd003466e13393b9348a44b6061af6fe7bcb380a64cac24e7df7"}, + {file = "duckdb-0.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9387da7b7973707b0dea2588749660dd5dd724273222680e985a2dd36787668"}, + {file = "duckdb-0.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:538f943bf9fa8a3a7c4fafa05f21a69539d2c8a68e557233cbe9d989ae232899"}, + {file = "duckdb-0.10.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6930608f35025a73eb94252964f9f19dd68cf2aaa471da3982cf6694866cfa63"}, + {file = "duckdb-0.10.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:03bc54a9cde5490918aad82d7d2a34290e3dfb78d5b889c6626625c0f141272a"}, + {file = "duckdb-0.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:372b6e3901d85108cafe5df03c872dfb6f0dbff66165a0cf46c47246c1957aa0"}, + {file = "duckdb-0.10.3.tar.gz", hash = "sha256:c5bd84a92bc708d3a6adffe1f554b94c6e76c795826daaaf482afc3d9c636971"}, +] [[package]] -name = "entrypoints" -version = "0.4" -description = "Discover and load entry points from installed packages." -category = "dev" +name = "email-validator" +version = "2.2.0" +description = "A robust email address syntax and deliverability validation library." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "email_validator-2.2.0-py3-none-any.whl", hash = "sha256:561977c2d73ce3611850a06fa56b414621e0c8faa9d66f2611407d87465da631"}, + {file = "email_validator-2.2.0.tar.gz", hash = "sha256:cb690f344c617a714f22e66ae771445a1ceb46821152df8e165c5f9a364582b7"}, +] + +[package.dependencies] +dnspython = ">=2.0.0" +idna = ">=2.0.0" [[package]] name = "et-xmlfile" -version = "1.1.0" +version = "2.0.0" description = "An implementation of lxml.xmlfile for the standard library" -category = "main" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, +] + +[[package]] +name = "eutils" +version = "0.6.0" +description = "\"Python interface to NCBI's eutilities API\"" optional = false python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "eutils-0.6.0-py2.py3-none-any.whl", hash = "sha256:4938c4baff6ca52141204ff3eff3a91ec1e83e52a6c5d92e7163585117b96566"}, + {file = "eutils-0.6.0.tar.gz", hash = "sha256:3515178c0aadb836206a3eee2bc9f340f3213c13b53632e058eb58a9219d03cf"}, +] + +[package.dependencies] +lxml = "*" +pytz = "*" +requests = "*" + +[package.extras] +dev = ["flake8", "ipython", "mock", "pytest", "pytest-cov", "restview", "setuptools", "sphinx", "sphinx-rtd-theme", "tox", "vcrpy", "yapf"] + +[[package]] +name = "eval-type-backport" +version = "0.2.2" +description = "Like `typing._eval_type`, but lets older Python versions use newer typing features." +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.9\"" +files = [ + {file = "eval_type_backport-0.2.2-py3-none-any.whl", hash = "sha256:cb6ad7c393517f476f96d456d0412ea80f0a8cf96f6892834cd9340149111b0a"}, + {file = "eval_type_backport-0.2.2.tar.gz", hash = "sha256:f0576b4cf01ebb5bd358d02314d31846af5e07678387486e2c798af0e7d849c1"}, +] + +[package.extras] +tests = ["pytest"] [[package]] name = "exceptiongroup" -version = "1.0.1" +version = "1.3.0" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, + {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, +] + +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} [package.extras] test = ["pytest (>=6)"] [[package]] name = "executing" -version = "1.2.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, +] [package.extras] -tests = ["asttokens", "pytest", "littleutils", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] [[package]] name = "fastjsonschema" -version = "2.16.2" +version = "2.21.1" description = "Fastest Python implementation of JSON schema" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, +] [package.extras] -devel = ["colorama", "jsonschema", "json-spec", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] +devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] [[package]] name = "fastobo" -version = "0.12.1" +version = "0.13.0" description = "Faultless AST for Open Biomedical Ontologies in Python." -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "fastobo-0.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4620527cb6575a844dd244c725984f2d3d9b41d32140026782d18e1666f8228d"}, + {file = "fastobo-0.13.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:4e126c58378c9df1c3f3c2f21f62b4badcd97076656e6f708ee5d0ec776c960c"}, + {file = "fastobo-0.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a2976412a05939ea57ecdd7d60ede6d97d20f18f89131e9c182c26484738cd8"}, + {file = "fastobo-0.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5431b840dba3aac04cb7a70704bb0453eabfec71f407937cc93f49fa8daac7cc"}, + {file = "fastobo-0.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:ee6011d23097bbb234e4d054c922ad61f3ab0f781315503ae3aa41cff956504b"}, + {file = "fastobo-0.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:eb2021500483fab3b7c756412bf1d27f8b991f16661943bfb281a83ecab2cfc8"}, + {file = "fastobo-0.13.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:50a42abc476c1a9c0831e015abd53328705f8289de406c807b6f54b0b436e90e"}, + {file = "fastobo-0.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6ca19f7e81dc5c369ffee2f5b5a03658302a3d1b8520b8b655fe5af8995be0b"}, + {file = "fastobo-0.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bcbc0ae0c74feb9e0bcaba305026bb8f03cbebf71a13b1dda5e06a29e0dfcf64"}, + {file = "fastobo-0.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:4f812fd9392d1049323ce73270885e81b6fb330035acdeb2488bc5aad326d6db"}, + {file = "fastobo-0.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:80fe72f334801e9815ba59565210501a8f614283c4d8b6151b63ffa9aef3167a"}, + {file = "fastobo-0.13.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:c3d457ce4b54686f299811b921b3ce9ad4d25bb6cdd72a71bbe4bcad56693543"}, + {file = "fastobo-0.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c389fa99ca7a941cde2f72743a12dbc586be73a6ebc0b84f0fa7b7651892ccc"}, + {file = "fastobo-0.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d525e3fe1ca321a1a59671947827fb431822f5f7a467aa03f22d86437505bb1"}, + {file = "fastobo-0.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:72572abcea0c01bc7c004553ac3fa80df8938be1013f7a514701b13d89f788a1"}, + {file = "fastobo-0.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7ad230422eec31aa668081a9cdd0030058ed200e79181f132c74536fbe7f066b"}, + {file = "fastobo-0.13.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:ff01175bb43745c089b4249e18af15d9955b31a88dd6ba69f63ad25161d80175"}, + {file = "fastobo-0.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:728014987eff7c3e05249b3ea59830fb9cb24293947c9a05a85f21853baa4304"}, + {file = "fastobo-0.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65885c095c2260e011cfbca197ee68710e6cc3cb31bdc6d470b0ae5c8382de2b"}, + {file = "fastobo-0.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:ffa708db4157c40f8ff61edc228f5bfae30f88b8d96d3d3ea4a1f0eb01cba474"}, + {file = "fastobo-0.13.0-cp37-cp37m-macosx_12_0_x86_64.whl", hash = "sha256:026d2e4f841248aaa58f61667a2bdb6ec4950f6ef06ccf23f4bc48bab52696bb"}, + {file = "fastobo-0.13.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f520caef3b577427c4f3cafbd3726b256df0b2bda849d15861c7a63d65e835c3"}, + {file = "fastobo-0.13.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5ada41082672560373e2657e3b5a7258b863a3a4fe6f20efdf291c43221dd59"}, + {file = "fastobo-0.13.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6092c1847f76809245c0611fde93931552311011194b3f630b133de419858abc"}, + {file = "fastobo-0.13.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2f23da932a20bd28bc0815c0ac652341eeb9689d247f78f1fde01df3c85f404c"}, + {file = "fastobo-0.13.0-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:d89baa235d13dedb4d081d103c1cc40e90c5c6a9a7404a60775b6cf92857fa31"}, + {file = "fastobo-0.13.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e40faeafa83840fdb14035b1ab3cea06e4da6bed4ef2cfb32f9bb6261cf04160"}, + {file = "fastobo-0.13.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5b2bb2482d9d10a003a8b5c633b7d7711e8d1bb12c7747aa1bb5a970e8fe969"}, + {file = "fastobo-0.13.0-cp38-cp38-win_amd64.whl", hash = "sha256:292705768e77588469e9137f110e3cb04afb5d0da07d53a3afff02aff321d4a0"}, + {file = "fastobo-0.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4045e5cb2d016d00ada73a4a1e34165d0ab6b28f0416f892eacc67d370c0cd7d"}, + {file = "fastobo-0.13.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:e6ac03ec93d165626ad70238a0d3c5345c94f03858b42af4462f8468418ffa41"}, + {file = "fastobo-0.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be08e40821c3b83d57a5fa55126ec935ac7402a07cdd670f873c2df7901c6b9"}, + {file = "fastobo-0.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8a3bf6fd683a37d7768c261aea855f1be2e55b295f33ebbba78fa5cfeb008f4"}, + {file = "fastobo-0.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:699da60c277c02ce8db253d37fe05b1ba1388483f7b521c3a0a6eedc4f761f8a"}, + {file = "fastobo-0.13.0.tar.gz", hash = "sha256:c4548bcfb7f9f87188bf5d8e4c7fd530162707265a8d644ee75259d305cd6964"}, +] + +[[package]] +name = "fqdn" +version = "1.5.1" +description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" +optional = false +python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +groups = ["main", "dev"] +files = [ + {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, + {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, +] [[package]] -name = "filelock" -version = "3.8.0" -description = "A platform independent file lock." -category = "main" +name = "funowl" +version = "0.2.3" +description = "Python rendering of the OWL Functional syntax" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "funowl-0.2.3-py3-none-any.whl", hash = "sha256:4c4328d03c7815cd61d6691f0fafc78dc9a78ec3dcab4c83afb64d125ad3660e"}, + {file = "funowl-0.2.3.tar.gz", hash = "sha256:eecc2f58d792c714f6671a826cb2744e80cd3019fa56b3c8539ce69c8d874126"}, +] -[package.extras] -docs = ["furo (>=2022.6.21)", "sphinx (>=5.1.1)", "sphinx-autodoc-typehints (>=1.19.1)"] -testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)", "pytest-cov (>=3)", "pytest-timeout (>=2.1)"] +[package.dependencies] +bcp47 = "*" +jsonasobj = "*" +pyjsg = ">=0.11.6" +rdflib = ">=6.2.0,<8" +rdflib-shim = "*" +rfc3987 = "*" [[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -category = "main" +name = "google" +version = "3.0.0" +description = "Python bindings to the Google search engine." optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +python-versions = "*" +groups = ["main"] +files = [ + {file = "google-3.0.0-py2.py3-none-any.whl", hash = "sha256:889cf695f84e4ae2c55fbc0cfdaf4c1e729417fa52ab1db0485202ba173e4935"}, + {file = "google-3.0.0.tar.gz", hash = "sha256:143530122ee5130509ad5e989f0512f7cb218b2d4eddbafbad40fd10e8d8ccbe"}, +] + +[package.dependencies] +beautifulsoup4 = "*" [[package]] -name = "frozenlist" -version = "1.3.3" -description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" +name = "google-api-core" +version = "2.24.2" +description = "Google API client core library" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "google_api_core-2.24.2-py3-none-any.whl", hash = "sha256:810a63ac95f3c441b7c0e43d344e372887f62ce9071ba972eacf32672e072de9"}, + {file = "google_api_core-2.24.2.tar.gz", hash = "sha256:81718493daf06d96d6bc76a91c23874dbf2fac0adbbf542831b805ee6e974696"}, +] + +[package.dependencies] +google-auth = ">=2.14.1,<3.0.0" +googleapis-common-protos = ">=1.56.2,<2.0.0" +proto-plus = [ + {version = ">=1.25.0,<2.0.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.22.3,<2.0.0", markers = "python_version < \"3.13\""}, +] +protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" +requests = ">=2.18.0,<3.0.0" + +[package.extras] +async-rest = ["google-auth[aiohttp] (>=2.35.0,<3.0.dev0)"] +grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0) ; python_version >= \"3.11\""] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] [[package]] -name = "fsspec" -version = "2022.11.0" -description = "File-system specification" -category = "main" +name = "google-api-python-client" +version = "2.169.0" +description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "google_api_python_client-2.169.0-py3-none-any.whl", hash = "sha256:dae3e882dc0e6f28e60cf09c1f13fedfd881db84f824dd418aa9e44def2fe00d"}, + {file = "google_api_python_client-2.169.0.tar.gz", hash = "sha256:0585bb97bd5f5bf3ed8d4bf624593e4c5a14d06c811d1952b07a1f94b4d12c51"}, +] [package.dependencies] -aiohttp = {version = "<4.0.0a0 || >4.0.0a0,<4.0.0a1 || >4.0.0a1", optional = true, markers = "extra == \"http\""} -requests = {version = "*", optional = true, markers = "extra == \"http\""} - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -dropbox = ["dropboxdrivefs", "requests", "dropbox"] -entrypoints = ["importlib-metadata"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["requests", "aiohttp (!=4.0.0a0,!=4.0.0a1)"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] +google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0" +google-auth = ">=1.32.0,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0" +google-auth-httplib2 = ">=0.2.0,<1.0.0" +httplib2 = ">=0.19.0,<1.0.0" +uritemplate = ">=3.0.1,<5" [[package]] -name = "funowl" -version = "0.1.12" -description = "Python rendering of the OWL Functional syntax" -category = "main" +name = "google-auth" +version = "2.40.1" +description = "Google Authentication Library" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "google_auth-2.40.1-py2.py3-none-any.whl", hash = "sha256:ed4cae4f5c46b41bae1d19c036e06f6c371926e97b19e816fc854eff811974ee"}, + {file = "google_auth-2.40.1.tar.gz", hash = "sha256:58f0e8416a9814c1d86c9b7f6acf6816b51aba167b2c76821965271bac275540"}, +] [package.dependencies] -bcp47 = "*" -pyjsg = ">=0.11.6" -rdflib = ">=5.0.0" -rdflib-shim = "*" -rfc3987 = "*" +cachetools = ">=2.0.0,<6.0" +pyasn1-modules = ">=0.2.1" +rsa = ">=3.1.4,<5" + +[package.extras] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] +enterprise-cert = ["cryptography", "pyopenssl"] +pyjwt = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyjwt (>=2.0)"] +pyopenssl = ["cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] +reauth = ["pyu2f (>=0.1.5)"] +requests = ["requests (>=2.20.0,<3.0.0)"] +testing = ["aiohttp (<3.10.0)", "aiohttp (>=3.6.2,<4.0.0)", "aioresponses", "cryptography (<39.0.0) ; python_version < \"3.8\"", "cryptography (>=38.0.3)", "flask", "freezegun", "grpcio", "mock", "oauth2client", "packaging", "pyjwt (>=2.0)", "pyopenssl (<24.3.0)", "pyopenssl (>=20.0.0)", "pytest", "pytest-asyncio", "pytest-cov", "pytest-localserver", "pyu2f (>=0.1.5)", "requests (>=2.20.0,<3.0.0)", "responses", "urllib3"] +urllib3 = ["packaging", "urllib3"] [[package]] -name = "ghp-import" -version = "2.1.0" -description = "Copy your docs directly to the gh-pages branch." -category = "main" +name = "google-auth-httplib2" +version = "0.2.0" +description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, + {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, +] + +[package.dependencies] +google-auth = "*" +httplib2 = ">=0.19.0" + +[[package]] +name = "google-auth-oauthlib" +version = "1.2.2" +description = "Google Authentication Library" +optional = false +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "google_auth_oauthlib-1.2.2-py3-none-any.whl", hash = "sha256:fd619506f4b3908b5df17b65f39ca8d66ea56986e5472eb5978fd8f3786f00a2"}, + {file = "google_auth_oauthlib-1.2.2.tar.gz", hash = "sha256:11046fb8d3348b296302dd939ace8af0a724042e8029c1b872d87fabc9f41684"}, +] + +[package.dependencies] +google-auth = ">=2.15.0" +requests-oauthlib = ">=0.7.0" + +[package.extras] +tool = ["click (>=6.0.0)"] + +[[package]] +name = "googleapis-common-protos" +version = "1.70.0" +description = "Common protobufs used in Google APIs" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "googleapis_common_protos-1.70.0-py3-none-any.whl", hash = "sha256:b8bfcca8c25a2bb253e0e0b0adaf8c00773e5e6af6fd92397576680b807e0fd8"}, + {file = "googleapis_common_protos-1.70.0.tar.gz", hash = "sha256:0e1b44e0ea153e6594f9f394fef15193a68aaaea2d843f83e2742717ca753257"}, +] [package.dependencies] -python-dateutil = ">=2.8.1" +protobuf = ">=3.20.2,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<7.0.0" [package.extras] -dev = ["wheel", "flake8", "markdown", "twine"] +grpc = ["grpcio (>=1.44.0,<2.0.0)"] [[package]] name = "graphviz" -version = "0.20.1" +version = "0.20.3" description = "Simple Python interface for Graphviz" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, + {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, +] [package.extras] -dev = ["tox (>=3)", "flake8", "pep8-naming", "wheel", "twine"] -docs = ["sphinx (>=5)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["pytest (>=7)", "pytest-mock (>=3)", "mock (>=4)", "pytest-cov", "coverage"] +dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] +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 = "2.0.1" +version = "3.2.2" description = "Lightweight in-process concurrent programming" -category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version <= \"3.13\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")" +files = [ + {file = "greenlet-3.2.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:c49e9f7c6f625507ed83a7485366b46cbe325717c60837f7244fc99ba16ba9d6"}, + {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3cc1a3ed00ecfea8932477f729a9f616ad7347a5e55d50929efa50a86cb7be7"}, + {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7c9896249fbef2c615853b890ee854f22c671560226c9221cfd27c995db97e5c"}, + {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7409796591d879425997a518138889d8d17e63ada7c99edc0d7a1c22007d4907"}, + {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7791dcb496ec53d60c7f1c78eaa156c21f402dda38542a00afc3e20cae0f480f"}, + {file = "greenlet-3.2.2-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d8009ae46259e31bc73dc183e402f548e980c96f33a6ef58cc2e7865db012e13"}, + {file = "greenlet-3.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:fd9fb7c941280e2c837b603850efc93c999ae58aae2b40765ed682a6907ebbc5"}, + {file = "greenlet-3.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:00cd814b8959b95a546e47e8d589610534cfb71f19802ea8a2ad99d95d702057"}, + {file = "greenlet-3.2.2-cp310-cp310-win_amd64.whl", hash = "sha256:d0cb7d47199001de7658c213419358aa8937df767936506db0db7ce1a71f4a2f"}, + {file = "greenlet-3.2.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:dcb9cebbf3f62cb1e5afacae90761ccce0effb3adaa32339a0670fe7805d8068"}, + {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf3fc9145141250907730886b031681dfcc0de1c158f3cc51c092223c0f381ce"}, + {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:efcdfb9df109e8a3b475c016f60438fcd4be68cd13a365d42b35914cdab4bb2b"}, + {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4bd139e4943547ce3a56ef4b8b1b9479f9e40bb47e72cc906f0f66b9d0d5cab3"}, + {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:71566302219b17ca354eb274dfd29b8da3c268e41b646f330e324e3967546a74"}, + {file = "greenlet-3.2.2-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3091bc45e6b0c73f225374fefa1536cd91b1e987377b12ef5b19129b07d93ebe"}, + {file = "greenlet-3.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:44671c29da26539a5f142257eaba5110f71887c24d40df3ac87f1117df589e0e"}, + {file = "greenlet-3.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c23ea227847c9dbe0b3910f5c0dd95658b607137614eb821e6cbaecd60d81cc6"}, + {file = "greenlet-3.2.2-cp311-cp311-win_amd64.whl", hash = "sha256:0a16fb934fcabfdfacf21d79e6fed81809d8cd97bc1be9d9c89f0e4567143d7b"}, + {file = "greenlet-3.2.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:df4d1509efd4977e6a844ac96d8be0b9e5aa5d5c77aa27ca9f4d3f92d3fcf330"}, + {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da956d534a6d1b9841f95ad0f18ace637668f680b1339ca4dcfb2c1837880a0b"}, + {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9c7b15fb9b88d9ee07e076f5a683027bc3befd5bb5d25954bb633c385d8b737e"}, + {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:752f0e79785e11180ebd2e726c8a88109ded3e2301d40abced2543aa5d164275"}, + {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ae572c996ae4b5e122331e12bbb971ea49c08cc7c232d1bd43150800a2d6c65"}, + {file = "greenlet-3.2.2-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02f5972ff02c9cf615357c17ab713737cccfd0eaf69b951084a9fd43f39833d3"}, + {file = "greenlet-3.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4fefc7aa68b34b9224490dfda2e70ccf2131368493add64b4ef2d372955c207e"}, + {file = "greenlet-3.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a31ead8411a027c2c4759113cf2bd473690517494f3d6e4bf67064589afcd3c5"}, + {file = "greenlet-3.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:b24c7844c0a0afc3ccbeb0b807adeefb7eff2b5599229ecedddcfeb0ef333bec"}, + {file = "greenlet-3.2.2-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:3ab7194ee290302ca15449f601036007873028712e92ca15fc76597a0aeb4c59"}, + {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc5c43bb65ec3669452af0ab10729e8fdc17f87a1f2ad7ec65d4aaaefabf6bf"}, + {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:decb0658ec19e5c1f519faa9a160c0fc85a41a7e6654b3ce1b44b939f8bf1325"}, + {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6fadd183186db360b61cb34e81117a096bff91c072929cd1b529eb20dd46e6c5"}, + {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1919cbdc1c53ef739c94cf2985056bcc0838c1f217b57647cbf4578576c63825"}, + {file = "greenlet-3.2.2-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3885f85b61798f4192d544aac7b25a04ece5fe2704670b4ab73c2d2c14ab740d"}, + {file = "greenlet-3.2.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:85f3e248507125bf4af607a26fd6cb8578776197bd4b66e35229cdf5acf1dfbf"}, + {file = "greenlet-3.2.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1e76106b6fc55fa3d6fe1c527f95ee65e324a13b62e243f77b48317346559708"}, + {file = "greenlet-3.2.2-cp313-cp313-win_amd64.whl", hash = "sha256:fe46d4f8e94e637634d54477b0cfabcf93c53f29eedcbdeecaf2af32029b4421"}, + {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba30e88607fb6990544d84caf3c706c4b48f629e18853fc6a646f82db9629418"}, + {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:055916fafad3e3388d27dd68517478933a97edc2fc54ae79d3bec827de2c64c4"}, + {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2593283bf81ca37d27d110956b79e8723f9aa50c4bcdc29d3c0543d4743d2763"}, + {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89c69e9a10670eb7a66b8cef6354c24671ba241f46152dd3eed447f79c29fb5b"}, + {file = "greenlet-3.2.2-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:02a98600899ca1ca5d3a2590974c9e3ec259503b2d6ba6527605fcd74e08e207"}, + {file = "greenlet-3.2.2-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b50a8c5c162469c3209e5ec92ee4f95c8231b11db6a04db09bbe338176723bb8"}, + {file = "greenlet-3.2.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:45f9f4853fb4cc46783085261c9ec4706628f3b57de3e68bae03e8f8b3c0de51"}, + {file = "greenlet-3.2.2-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:9ea5231428af34226c05f927e16fc7f6fa5e39e3ad3cd24ffa48ba53a47f4240"}, + {file = "greenlet-3.2.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:1e4747712c4365ef6765708f948acc9c10350719ca0545e362c24ab973017370"}, + {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782743700ab75716650b5238a4759f840bb2dcf7bff56917e9ffdf9f1f23ec59"}, + {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:354f67445f5bed6604e493a06a9a49ad65675d3d03477d38a4db4a427e9aad0e"}, + {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3aeca9848d08ce5eb653cf16e15bb25beeab36e53eb71cc32569f5f3afb2a3aa"}, + {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cb8553ee954536500d88a1a2f58fcb867e45125e600e80f586ade399b3f8819"}, + {file = "greenlet-3.2.2-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1592a615b598643dbfd566bac8467f06c8c8ab6e56f069e573832ed1d5d528cc"}, + {file = "greenlet-3.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1f72667cc341c95184f1c68f957cb2d4fc31eef81646e8e59358a10ce6689457"}, + {file = "greenlet-3.2.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a8fa80665b1a29faf76800173ff5325095f3e66a78e62999929809907aca5659"}, + {file = "greenlet-3.2.2-cp39-cp39-win32.whl", hash = "sha256:6629311595e3fe7304039c67f00d145cd1d38cf723bb5b99cc987b23c1433d61"}, + {file = "greenlet-3.2.2-cp39-cp39-win_amd64.whl", hash = "sha256:eeb27bece45c0c2a5842ac4c5a1b5c2ceaefe5711078eed4e8043159fa05c834"}, + {file = "greenlet-3.2.2.tar.gz", hash = "sha256:ad053d34421a2debba45aa3cc39acf454acbcd025b3fc1a9f8a0dee237abd485"}, +] [package.extras] -docs = ["sphinx", "docutils (<0.18)"] -test = ["objgraph", "psutil", "faulthandler"] +docs = ["Sphinx", "furo"] +test = ["objgraph", "psutil"] + +[[package]] +name = "gspread" +version = "6.2.1" +description = "Google Spreadsheets Python API" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "gspread-6.2.1-py3-none-any.whl", hash = "sha256:6d4ec9f1c23ae3c704a9219026dac01f2b328ac70b96f1495055d453c4c184db"}, + {file = "gspread-6.2.1.tar.gz", hash = "sha256:2c7c99f7c32ebea6ec0d36f2d5cbe8a2be5e8f2a48bde87ad1ea203eff32bd03"}, +] + +[package.dependencies] +google-auth = ">=1.12.0" +google-auth-oauthlib = ">=0.4.1" + +[[package]] +name = "gspread-formatting" +version = "1.2.1" +description = "Complete Google Sheets formatting support for gspread worksheets" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "gspread_formatting-1.2.1-py2.py3-none-any.whl", hash = "sha256:76bef0e751dc276bab666351035f15a818866dea5ca20603a34ae6c847333662"}, +] + +[package.dependencies] +gspread = ">=3.0.0" + +[[package]] +name = "h11" +version = "0.16.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, +] +markers = {main = "extra == \"llm\""} [[package]] 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" +groups = ["main"] +files = [ + {file = "hbreader-0.9.1-py3-none-any.whl", hash = "sha256:9a6e76c9d1afc1b977374a5dc430a1ebb0ea0488205546d4678d6e31cc5f6801"}, + {file = "hbreader-0.9.1.tar.gz", hash = "sha256:d2c132f8ba6276d794c66224c3297cec25c8079d0a4cf019c061611e0a3b94fa"}, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, +] +markers = {main = "extra == \"llm\""} + +[package.dependencies] +certifi = "*" +h11 = ">=0.16" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<1.0)"] + +[[package]] +name = "httplib2" +version = "0.22.0" +description = "A comprehensive HTTP client library." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +files = [ + {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, + {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, +] + +[package.dependencies] +pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} + +[[package]] +name = "httpx" +version = "0.28.1" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, +] +markers = {main = "extra == \"llm\""} + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" + +[package.extras] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "idna" -version = "3.4" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, +] + +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + +[[package]] +name = "ijson" +version = "3.4.0" +description = "Iterative JSON parser with standard Python iterator interfaces" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "ijson-3.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e27e50f6dcdee648f704abc5d31b976cd2f90b4642ed447cf03296d138433d09"}, + {file = "ijson-3.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2a753be681ac930740a4af9c93cfb4edc49a167faed48061ea650dc5b0f406f1"}, + {file = "ijson-3.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a07c47aed534e0ec198e6a2d4360b259d32ac654af59c015afc517ad7973b7fb"}, + {file = "ijson-3.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c55f48181e11c597cd7146fb31edc8058391201ead69f8f40d2ecbb0b3e4fc6"}, + {file = "ijson-3.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd5669f96f79d8a2dd5ae81cbd06770a4d42c435fd4a75c74ef28d9913b697d"}, + {file = "ijson-3.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e3ddd46d16b8542c63b1b8af7006c758d4e21cc1b86122c15f8530fae773461"}, + {file = "ijson-3.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1504cec7fe04be2bb0cc33b50c9dd3f83f98c0540ad4991d4017373b7853cfe6"}, + {file = "ijson-3.4.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2f2ff456adeb216603e25d7915f10584c1b958b6eafa60038d76d08fc8a5fb06"}, + {file = "ijson-3.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0ab00d75d61613a125fbbb524551658b1ad6919a52271ca16563ca5bc2737bb1"}, + {file = "ijson-3.4.0-cp310-cp310-win32.whl", hash = "sha256:ada421fd59fe2bfa4cfa64ba39aeba3f0753696cdcd4d50396a85f38b1d12b01"}, + {file = "ijson-3.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:8c75e82cec05d00ed3a4af5f4edf08f59d536ed1a86ac7e84044870872d82a33"}, + {file = "ijson-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e369bf5a173ca51846c243002ad8025d32032532523b06510881ecc8723ee54"}, + {file = "ijson-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:26e7da0a3cd2a56a1fde1b34231867693f21c528b683856f6691e95f9f39caec"}, + {file = "ijson-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1c28c7f604729be22aa453e604e9617b665fa0c24cd25f9f47a970e8130c571a"}, + {file = "ijson-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0bed8bcb84d3468940f97869da323ba09ae3e6b950df11dea9b62e2b231ca1e3"}, + {file = "ijson-3.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:296bc824f4088f2af814aaf973b0435bc887ce3d9f517b1577cc4e7d1afb1cb7"}, + {file = "ijson-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8145f8f40617b6a8aa24e28559d0adc8b889e56a203725226a8a60fa3501073f"}, + {file = "ijson-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:b674a97bd503ea21bc85103e06b6493b1b2a12da3372950f53e1c664566a33a4"}, + {file = "ijson-3.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8bc731cf1c3282b021d3407a601a5a327613da9ad3c4cecb1123232623ae1826"}, + {file = "ijson-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42ace5e940e0cf58c9de72f688d6829ddd815096d07927ee7e77df2648006365"}, + {file = "ijson-3.4.0-cp311-cp311-win32.whl", hash = "sha256:5be39a0df4cd3f02b304382ea8885391900ac62e95888af47525a287c50005e9"}, + {file = "ijson-3.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:0b1be1781792291e70d2e177acf564ec672a7907ba74f313583bdf39fe81f9b7"}, + {file = "ijson-3.4.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:956b148f88259a80a9027ffbe2d91705fae0c004fbfba3e5a24028fbe72311a9"}, + {file = "ijson-3.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:06b89960f5c721106394c7fba5760b3f67c515b8eb7d80f612388f5eca2f4621"}, + {file = "ijson-3.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9a0bb591cf250dd7e9dfab69d634745a7f3272d31cfe879f9156e0a081fd97ee"}, + {file = "ijson-3.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72e92de999977f4c6b660ffcf2b8d59604ccd531edcbfde05b642baf283e0de8"}, + {file = "ijson-3.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e9602157a5b869d44b6896e64f502c712a312fcde044c2e586fccb85d3e316e"}, + {file = "ijson-3.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e83660edb931a425b7ff662eb49db1f10d30ca6d4d350e5630edbed098bc01"}, + {file = "ijson-3.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:49bf8eac1c7b7913073865a859c215488461f7591b4fa6a33c14b51cb73659d0"}, + {file = "ijson-3.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:160b09273cb42019f1811469508b0a057d19f26434d44752bde6f281da6d3f32"}, + {file = "ijson-3.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2019ff4e6f354aa00c76c8591bd450899111c61f2354ad55cc127e2ce2492c44"}, + {file = "ijson-3.4.0-cp312-cp312-win32.whl", hash = "sha256:931c007bf6bb8330705429989b2deed6838c22b63358a330bf362b6e458ba0bf"}, + {file = "ijson-3.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:71523f2b64cb856a820223e94d23e88369f193017ecc789bb4de198cc9d349eb"}, + {file = "ijson-3.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e8d96f88d75196a61c9d9443de2b72c2d4a7ba9456ff117b57ae3bba23a54256"}, + {file = "ijson-3.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c45906ce2c1d3b62f15645476fc3a6ca279549127f01662a39ca5ed334a00cf9"}, + {file = "ijson-3.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ab4bc2119b35c4363ea49f29563612237cae9413d2fbe54b223be098b97bc9e"}, + {file = "ijson-3.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97b0a9b5a15e61dfb1f14921ea4e0dba39f3a650df6d8f444ddbc2b19b479ff1"}, + {file = "ijson-3.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e3047bb994dabedf11de11076ed1147a307924b6e5e2df6784fb2599c4ad8c60"}, + {file = "ijson-3.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68c83161b052e9f5dc8191acbc862bb1e63f8a35344cb5cd0db1afd3afd487a6"}, + {file = "ijson-3.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1eebd9b6c20eb1dffde0ae1f0fbb4aeacec2eb7b89adb5c7c0449fc9fd742760"}, + {file = "ijson-3.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:13fb6d5c35192c541421f3ee81239d91fc15a8d8f26c869250f941f4b346a86c"}, + {file = "ijson-3.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:28b7196ff7b37c4897c547a28fa4876919696739fc91c1f347651c9736877c69"}, + {file = "ijson-3.4.0-cp313-cp313-win32.whl", hash = "sha256:3c2691d2da42629522140f77b99587d6f5010440d58d36616f33bc7bdc830cc3"}, + {file = "ijson-3.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:c4554718c275a044c47eb3874f78f2c939f300215d9031e785a6711cc51b83fc"}, + {file = "ijson-3.4.0-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:915a65e3f3c0eee2ea937bc62aaedb6c14cc1e8f0bb9f3f4fb5a9e2bbfa4b480"}, + {file = "ijson-3.4.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:afbe9748707684b6c5adc295c4fdcf27765b300aec4d484e14a13dca4e5c0afa"}, + {file = "ijson-3.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:d823f8f321b4d8d5fa020d0a84f089fec5d52b7c0762430476d9f8bf95bbc1a9"}, + {file = "ijson-3.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8a0a2c54f3becf76881188beefd98b484b1d3bd005769a740d5b433b089fa23"}, + {file = "ijson-3.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ced19a83ab09afa16257a0b15bc1aa888dbc555cb754be09d375c7f8d41051f2"}, + {file = "ijson-3.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8100f9885eff1f38d35cef80ef759a1bbf5fc946349afa681bd7d0e681b7f1a0"}, + {file = "ijson-3.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d7bcc3f7f21b0f703031ecd15209b1284ea51b2a329d66074b5261de3916c1eb"}, + {file = "ijson-3.4.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:2dcb190227b09dd171bdcbfe4720fddd574933c66314818dfb3960c8a6246a77"}, + {file = "ijson-3.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:eda4cfb1d49c6073a901735aaa62e39cb7ab47f3ad7bb184862562f776f1fa8a"}, + {file = "ijson-3.4.0-cp313-cp313t-win32.whl", hash = "sha256:0772638efa1f3b72b51736833404f1cbd2f5beeb9c1a3d392e7d385b9160cba7"}, + {file = "ijson-3.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:3d8a0d67f36e4fb97c61a724456ef0791504b16ce6f74917a31c2e92309bbeb9"}, + {file = "ijson-3.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8a990401dc7350c1739f42187823e68d2ef6964b55040c6e9f3a29461f9929e2"}, + {file = "ijson-3.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80f50e0f5da4cd6b65e2d8ff38cb61b26559608a05dd3a3f9cfa6f19848e6f22"}, + {file = "ijson-3.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2d9ca52f5650d820a2e7aa672dea1c560f609e165337e5b3ed7cf56d696bf309"}, + {file = "ijson-3.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:940c8c5fd20fb89b56dde9194a4f1c7b779149f1ab26af6d8dc1da51a95d26dd"}, + {file = "ijson-3.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:41dbb525666017ad856ac9b4f0f4b87d3e56b7dfde680d5f6d123556b22e2172"}, + {file = "ijson-3.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9f84f5e2eea5c2d271c97221c382db005534294d1175ddd046a12369617c41c"}, + {file = "ijson-3.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:c0cd126c11835839bba8ac0baaba568f67d701fc4f717791cf37b10b74a2ebd7"}, + {file = "ijson-3.4.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f9a9d3bbc6d91c24a2524a189d2aca703cb5f7e8eb34ad0aff3c91702404a983"}, + {file = "ijson-3.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:56679ee133470d0f1f598a8ad109d760fcfebeef4819531e29335aefb7e4cb1a"}, + {file = "ijson-3.4.0-cp39-cp39-win32.whl", hash = "sha256:583c15ded42ba80104fa1d0fa0dfdd89bb47922f3bb893a931bb843aeb55a3f3"}, + {file = "ijson-3.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:4563e603e56f4451572d96b47311dffef5b933d825f3417881d4d3630c6edac2"}, + {file = "ijson-3.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:54e989c35dba9cf163d532c14bcf0c260897d5f465643f0cd1fba9c908bed7ef"}, + {file = "ijson-3.4.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:494eeb8e87afef22fbb969a4cb81ac2c535f30406f334fb6136e9117b0bb5380"}, + {file = "ijson-3.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81603de95de1688958af65cd2294881a4790edae7de540b70c65c8253c5dc44a"}, + {file = "ijson-3.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8524be12c1773e1be466034cc49c1ecbe3d5b47bb86217bd2a57f73f970a6c19"}, + {file = "ijson-3.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17994696ec895d05e0cfa21b11c68c920c82634b4a3d8b8a1455d6fe9fdee8f7"}, + {file = "ijson-3.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:0b67727aaee55d43b2e82b6a866c3cbcb2b66a5e9894212190cbd8773d0d9857"}, + {file = "ijson-3.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:cdc8c5ca0eec789ed99db29c68012dda05027af0860bb360afd28d825238d69d"}, + {file = "ijson-3.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8e6b44b6ec45d5b1a0ee9d97e0e65ab7f62258727004cbbe202bf5f198bc21f7"}, + {file = "ijson-3.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b51e239e4cb537929796e840d349fc731fdc0d58b1a0683ce5465ad725321e0f"}, + {file = "ijson-3.4.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed05d43ec02be8ddb1ab59579761f6656b25d241a77fd74f4f0f7ec09074318a"}, + {file = "ijson-3.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cfeca1aaa59d93fd0a3718cbe5f7ef0effff85cf837e0bceb71831a47f39cc14"}, + {file = "ijson-3.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7ca72ca12e9a1dd4252c97d952be34282907f263f7e28fcdff3a01b83981e837"}, + {file = "ijson-3.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:0f79b2cd52bd220fff83b3ee4ef89b54fd897f57cc8564a6d8ab7ac669de3930"}, + {file = "ijson-3.4.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d16eed737610ad5ad8989b5864fbe09c64133129734e840c29085bb0d497fb03"}, + {file = "ijson-3.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b3aac1d7a27e1e3bdec5bd0689afe55c34aa499baa06a80852eda31f1ffa6dc"}, + {file = "ijson-3.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:784ae654aa9851851e87f323e9429b20b58a5399f83e6a7e348e080f2892081f"}, + {file = "ijson-3.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d05bd8fa6a8adefb32bbf7b993d2a2f4507db08453dd1a444c281413a6d9685"}, + {file = "ijson-3.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b5a05fd935cc28786b88c16976313086cd96414c6a3eb0a3822c47ab48b1793e"}, + {file = "ijson-3.4.0.tar.gz", hash = "sha256:5f74dcbad9d592c428d3ca3957f7115a42689ee7ee941458860900236ae9bb13"}, +] [[package]] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main", "dev"] +files = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] [[package]] name = "importlib-metadata" -version = "4.13.0" +version = "8.7.0" description = "Read metadata from Python packages" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version == \"3.9\"" +files = [ + {file = "importlib_metadata-8.7.0-py3-none-any.whl", hash = "sha256:e5dd1551894c77868a30651cef00984d50e1002d06942a7101d34870c5f02afd"}, + {file = "importlib_metadata-8.7.0.tar.gz", hash = "sha256:d13b81ad223b890aa16c5471f2ac3056cf76c5f10f82d6f9292f0b415f389000"}, +] [package.dependencies] -zipp = ">=0.5" +zipp = ">=3.20" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] +test = ["flufl.flake8", "importlib_resources (>=1.3) ; python_version < \"3.9\"", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6,!=8.1.*)", "pytest-perf (>=0.9.2)"] +type = ["pytest-mypy"] [[package]] -name = "inflect" -version = "6.0.2" -description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles; convert numbers to words" -category = "main" +name = "importlib-resources" +version = "6.5.2" +description = "Read resources from Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "importlib_resources-6.5.2-py3-none-any.whl", hash = "sha256:789cfdc3ed28c78b67a06acb8126751ced69a3d5f79c095a98298cd8a760ccec"}, + {file = "importlib_resources-6.5.2.tar.gz", hash = "sha256:185f87adef5bcc288449d98fb4fba07cea78bc036455dd44c5fc4a2fe78fed2c"}, +] + +[package.dependencies] +zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["jaraco.test (>=5.4)", "pytest (>=6,!=8.1.*)", "zipp (>=3.17)"] +type = ["pytest-mypy"] + +[[package]] +name = "inflect" +version = "7.5.0" +description = "Correctly generate plurals, singular nouns, ordinals, indefinite articles" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "inflect-7.5.0-py3-none-any.whl", hash = "sha256:2aea70e5e70c35d8350b8097396ec155ffd68def678c7ff97f51aa69c1d92344"}, + {file = "inflect-7.5.0.tar.gz", hash = "sha256:faf19801c3742ed5a05a8ce388e0d8fe1a07f8d095c82201eb904f5d27ad571f"}, +] [package.dependencies] -pydantic = ">=1.9.1" +more_itertools = ">=8.5.0" +typeguard = ">=4.0.1" [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "pygments", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["pygments", "pytest (>=6,!=8.1.*)"] +type = ["pytest-mypy"] [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "main" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] [[package]] name = "ipykernel" -version = "6.17.1" +version = "6.29.5" description = "IPython Kernel for Jupyter" -category = "dev" optional = false python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "ipykernel-6.29.5-py3-none-any.whl", hash = "sha256:afdb66ba5aa354b09b91379bac28ae4afebbb30e8b39510c9690afb7a10421b5"}, + {file = "ipykernel-6.29.5.tar.gz", hash = "sha256:f093a22c4a40f8828f8e330a9c297cb93dcab13bd9678ded6de8e5cf81c56215"}, +] [package.dependencies] appnope = {version = "*", markers = "platform_system == \"Darwin\""} -debugpy = ">=1.0" +comm = ">=0.1.1" +debugpy = ">=1.6.5" ipython = ">=7.23.1" jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" matplotlib-inline = ">=0.1" nest-asyncio = "*" packaging = "*" psutil = "*" -pyzmq = ">=17" +pyzmq = ">=24" tornado = ">=6.1" -traitlets = ">=5.1.0" +traitlets = ">=5.4.0" [package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt"] -test = ["flaky", "ipyparallel", "pre-commit", "pytest-cov", "pytest-timeout", "pytest (>=7.0)"] +cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"] +pyqt5 = ["pyqt5"] +pyside6 = ["pyside6"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.23.5)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" -version = "8.6.0" +version = "8.18.1" description = "IPython: Productive Interactive Computing" -category = "dev" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, +] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" colorama = {version = "*", markers = "sys_platform == \"win32\""} decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">3.0.1,<3.1.0" +prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["black", "ipykernel", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "docrepr", "matplotlib", "stack-data", "pytest (<7)", "typing-extensions", "pytest (<7.1)", "pytest-asyncio", "testpath", "nbconvert", "nbformat", "ipywidgets", "notebook", "ipyparallel", "qtconsole", "curio", "matplotlib (!=3.2.0)", "numpy (>=1.20)", "pandas", "trio"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["ipykernel", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "docrepr", "matplotlib", "stack-data", "pytest (<7)", "typing-extensions", "pytest (<7.1)", "pytest-asyncio", "testpath"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] -test_extra = ["pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.20)", "pandas", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] -name = "ipython-genutils" -version = "0.2.0" -description = "Vestigial utilities from IPython" -category = "dev" +name = "ipython" +version = "9.2.0" +description = "IPython: Productive Interactive Computing" optional = false -python-versions = "*" +python-versions = ">=3.11" +groups = ["dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "ipython-9.2.0-py3-none-any.whl", hash = "sha256:fef5e33c4a1ae0759e0bba5917c9db4eb8c53fee917b6a526bd973e1ca5159f6"}, + {file = "ipython-9.2.0.tar.gz", hash = "sha256:62a9373dbc12f28f9feaf4700d052195bf89806279fc8ca11f3f54017d04751b"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +ipython-pygments-lexers = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} + +[package.extras] +all = ["ipython[doc,matplotlib,test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinx_toml (==0.0.4)", "typing_extensions"] +matplotlib = ["matplotlib"] +test = ["packaging", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipykernel", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbclient", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +description = "Defines a variety of Pygments lexers for highlighting IPython code." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"}, + {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"}, +] + +[package.dependencies] +pygments = "*" [[package]] name = "ipywidgets" -version = "8.0.2" +version = "8.1.7" description = "Jupyter interactive widgets" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "ipywidgets-8.1.7-py3-none-any.whl", hash = "sha256:764f2602d25471c213919b8a1997df04bef869251db4ca8efba1b76b1bd9f7bb"}, + {file = "ipywidgets-8.1.7.tar.gz", hash = "sha256:15f1ac050b9ccbefd45dccfbb2ef6bed0029d8278682d569d71b8dd96bee0376"}, +] [package.dependencies] -ipykernel = ">=4.5.1" +comm = ">=0.1.3" ipython = ">=6.1.0" -jupyterlab-widgets = ">=3.0,<4.0" +jupyterlab_widgets = ">=3.0.15,<3.1.0" traitlets = ">=4.3.1" -widgetsnbextension = ">=4.0,<5.0" +widgetsnbextension = ">=4.0.14,<4.1.0" [package.extras] -test = ["jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] +test = ["ipykernel", "jsonschema", "pytest (>=3.6.0)", "pytest-cov", "pytz"] [[package]] name = "isodate" -version = "0.6.1" +version = "0.7.2" description = "An ISO 8601 date/time/duration parser and formatter" -category = "main" optional = false -python-versions = "*" - -[package.dependencies] -six = "*" +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, + {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, +] [[package]] name = "isoduration" version = "20.11.0" description = "Operations with ISO 8601 durations" -category = "main" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, + {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, +] [package.dependencies] arrow = ">=0.15.0" [[package]] name = "jedi" -version = "0.18.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." -category = "dev" optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, +] [package.dependencies] -parso = ">=0.8.0,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jinja2" -version = "3.1.2" +version = "3.1.6" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67"}, + {file = "jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d"}, +] [package.dependencies] MarkupSafe = ">=2.0" @@ -803,258 +1960,586 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] +[[package]] +name = "jiter" +version = "0.10.0" +description = "Fast iterable JSON parser." +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "jiter-0.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:cd2fb72b02478f06a900a5782de2ef47e0396b3e1f7d5aba30daeb1fce66f303"}, + {file = "jiter-0.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:32bb468e3af278f095d3fa5b90314728a6916d89ba3d0ffb726dd9bf7367285e"}, + {file = "jiter-0.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa8b3e0068c26ddedc7abc6fac37da2d0af16b921e288a5a613f4b86f050354f"}, + {file = "jiter-0.10.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:286299b74cc49e25cd42eea19b72aa82c515d2f2ee12d11392c56d8701f52224"}, + {file = "jiter-0.10.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ed5649ceeaeffc28d87fb012d25a4cd356dcd53eff5acff1f0466b831dda2a7"}, + {file = "jiter-0.10.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2ab0051160cb758a70716448908ef14ad476c3774bd03ddce075f3c1f90a3d6"}, + {file = "jiter-0.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03997d2f37f6b67d2f5c475da4412be584e1cec273c1cfc03d642c46db43f8cf"}, + {file = "jiter-0.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c404a99352d839fed80d6afd6c1d66071f3bacaaa5c4268983fc10f769112e90"}, + {file = "jiter-0.10.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66e989410b6666d3ddb27a74c7e50d0829704ede652fd4c858e91f8d64b403d0"}, + {file = "jiter-0.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b532d3af9ef4f6374609a3bcb5e05a1951d3bf6190dc6b176fdb277c9bbf15ee"}, + {file = "jiter-0.10.0-cp310-cp310-win32.whl", hash = "sha256:da9be20b333970e28b72edc4dff63d4fec3398e05770fb3205f7fb460eb48dd4"}, + {file = "jiter-0.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:f59e533afed0c5b0ac3eba20d2548c4a550336d8282ee69eb07b37ea526ee4e5"}, + {file = "jiter-0.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3bebe0c558e19902c96e99217e0b8e8b17d570906e72ed8a87170bc290b1e978"}, + {file = "jiter-0.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:558cc7e44fd8e507a236bee6a02fa17199ba752874400a0ca6cd6e2196cdb7dc"}, + {file = "jiter-0.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d613e4b379a07d7c8453c5712ce7014e86c6ac93d990a0b8e7377e18505e98d"}, + {file = "jiter-0.10.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f62cf8ba0618eda841b9bf61797f21c5ebd15a7a1e19daab76e4e4b498d515b2"}, + {file = "jiter-0.10.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:919d139cdfa8ae8945112398511cb7fca58a77382617d279556b344867a37e61"}, + {file = "jiter-0.10.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:13ddbc6ae311175a3b03bd8994881bc4635c923754932918e18da841632349db"}, + {file = "jiter-0.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c440ea003ad10927a30521a9062ce10b5479592e8a70da27f21eeb457b4a9c5"}, + {file = "jiter-0.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dc347c87944983481e138dea467c0551080c86b9d21de6ea9306efb12ca8f606"}, + {file = "jiter-0.10.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:13252b58c1f4d8c5b63ab103c03d909e8e1e7842d302473f482915d95fefd605"}, + {file = "jiter-0.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:7d1bbf3c465de4a24ab12fb7766a0003f6f9bce48b8b6a886158c4d569452dc5"}, + {file = "jiter-0.10.0-cp311-cp311-win32.whl", hash = "sha256:db16e4848b7e826edca4ccdd5b145939758dadf0dc06e7007ad0e9cfb5928ae7"}, + {file = "jiter-0.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c9c1d5f10e18909e993f9641f12fe1c77b3e9b533ee94ffa970acc14ded3812"}, + {file = "jiter-0.10.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1e274728e4a5345a6dde2d343c8da018b9d4bd4350f5a472fa91f66fda44911b"}, + {file = "jiter-0.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7202ae396446c988cb2a5feb33a543ab2165b786ac97f53b59aafb803fef0744"}, + {file = "jiter-0.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23ba7722d6748b6920ed02a8f1726fb4b33e0fd2f3f621816a8b486c66410ab2"}, + {file = "jiter-0.10.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:371eab43c0a288537d30e1f0b193bc4eca90439fc08a022dd83e5e07500ed026"}, + {file = "jiter-0.10.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c675736059020365cebc845a820214765162728b51ab1e03a1b7b3abb70f74c"}, + {file = "jiter-0.10.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0c5867d40ab716e4684858e4887489685968a47e3ba222e44cde6e4a2154f959"}, + {file = "jiter-0.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:395bb9a26111b60141757d874d27fdea01b17e8fac958b91c20128ba8f4acc8a"}, + {file = "jiter-0.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6842184aed5cdb07e0c7e20e5bdcfafe33515ee1741a6835353bb45fe5d1bd95"}, + {file = "jiter-0.10.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:62755d1bcea9876770d4df713d82606c8c1a3dca88ff39046b85a048566d56ea"}, + {file = "jiter-0.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533efbce2cacec78d5ba73a41756beff8431dfa1694b6346ce7af3a12c42202b"}, + {file = "jiter-0.10.0-cp312-cp312-win32.whl", hash = "sha256:8be921f0cadd245e981b964dfbcd6fd4bc4e254cdc069490416dd7a2632ecc01"}, + {file = "jiter-0.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:a7c7d785ae9dda68c2678532a5a1581347e9c15362ae9f6e68f3fdbfb64f2e49"}, + {file = "jiter-0.10.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0588107ec8e11b6f5ef0e0d656fb2803ac6cf94a96b2b9fc675c0e3ab5e8644"}, + {file = "jiter-0.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cafc4628b616dc32530c20ee53d71589816cf385dd9449633e910d596b1f5c8a"}, + {file = "jiter-0.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:520ef6d981172693786a49ff5b09eda72a42e539f14788124a07530f785c3ad6"}, + {file = "jiter-0.10.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:554dedfd05937f8fc45d17ebdf298fe7e0c77458232bcb73d9fbbf4c6455f5b3"}, + {file = "jiter-0.10.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5bc299da7789deacf95f64052d97f75c16d4fc8c4c214a22bf8d859a4288a1c2"}, + {file = "jiter-0.10.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5161e201172de298a8a1baad95eb85db4fb90e902353b1f6a41d64ea64644e25"}, + {file = "jiter-0.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e2227db6ba93cb3e2bf67c87e594adde0609f146344e8207e8730364db27041"}, + {file = "jiter-0.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15acb267ea5e2c64515574b06a8bf393fbfee6a50eb1673614aa45f4613c0cca"}, + {file = "jiter-0.10.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:901b92f2e2947dc6dfcb52fd624453862e16665ea909a08398dde19c0731b7f4"}, + {file = "jiter-0.10.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d0cb9a125d5a3ec971a094a845eadde2db0de85b33c9f13eb94a0c63d463879e"}, + {file = "jiter-0.10.0-cp313-cp313-win32.whl", hash = "sha256:48a403277ad1ee208fb930bdf91745e4d2d6e47253eedc96e2559d1e6527006d"}, + {file = "jiter-0.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:75f9eb72ecb640619c29bf714e78c9c46c9c4eaafd644bf78577ede459f330d4"}, + {file = "jiter-0.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:28ed2a4c05a1f32ef0e1d24c2611330219fed727dae01789f4a335617634b1ca"}, + {file = "jiter-0.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14a4c418b1ec86a195f1ca69da8b23e8926c752b685af665ce30777233dfe070"}, + {file = "jiter-0.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d7bfed2fe1fe0e4dda6ef682cee888ba444b21e7a6553e03252e4feb6cf0adca"}, + {file = "jiter-0.10.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:5e9251a5e83fab8d87799d3e1a46cb4b7f2919b895c6f4483629ed2446f66522"}, + {file = "jiter-0.10.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:023aa0204126fe5b87ccbcd75c8a0d0261b9abdbbf46d55e7ae9f8e22424eeb8"}, + {file = "jiter-0.10.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c189c4f1779c05f75fc17c0c1267594ed918996a231593a21a5ca5438445216"}, + {file = "jiter-0.10.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:15720084d90d1098ca0229352607cd68256c76991f6b374af96f36920eae13c4"}, + {file = "jiter-0.10.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4f2fb68e5f1cfee30e2b2a09549a00683e0fde4c6a2ab88c94072fc33cb7426"}, + {file = "jiter-0.10.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ce541693355fc6da424c08b7edf39a2895f58d6ea17d92cc2b168d20907dee12"}, + {file = "jiter-0.10.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31c50c40272e189d50006ad5c73883caabb73d4e9748a688b216e85a9a9ca3b9"}, + {file = "jiter-0.10.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa3402a2ff9815960e0372a47b75c76979d74402448509ccd49a275fa983ef8a"}, + {file = "jiter-0.10.0-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:1956f934dca32d7bb647ea21d06d93ca40868b505c228556d3373cbd255ce853"}, + {file = "jiter-0.10.0-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:fcedb049bdfc555e261d6f65a6abe1d5ad68825b7202ccb9692636c70fcced86"}, + {file = "jiter-0.10.0-cp314-cp314-win32.whl", hash = "sha256:ac509f7eccca54b2a29daeb516fb95b6f0bd0d0d8084efaf8ed5dfc7b9f0b357"}, + {file = "jiter-0.10.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5ed975b83a2b8639356151cef5c0d597c68376fc4922b45d0eb384ac058cfa00"}, + {file = "jiter-0.10.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa96f2abba33dc77f79b4cf791840230375f9534e5fac927ccceb58c5e604a5"}, + {file = "jiter-0.10.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bd6292a43c0fc09ce7c154ec0fa646a536b877d1e8f2f96c19707f65355b5a4d"}, + {file = "jiter-0.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:39de429dcaeb6808d75ffe9effefe96a4903c6a4b376b2f6d08d77c1aaee2f18"}, + {file = "jiter-0.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52ce124f13a7a616fad3bb723f2bfb537d78239d1f7f219566dc52b6f2a9e48d"}, + {file = "jiter-0.10.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:166f3606f11920f9a1746b2eea84fa2c0a5d50fd313c38bdea4edc072000b0af"}, + {file = "jiter-0.10.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:28dcecbb4ba402916034fc14eba7709f250c4d24b0c43fc94d187ee0580af181"}, + {file = "jiter-0.10.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:86c5aa6910f9bebcc7bc4f8bc461aff68504388b43bfe5e5c0bd21efa33b52f4"}, + {file = "jiter-0.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ceeb52d242b315d7f1f74b441b6a167f78cea801ad7c11c36da77ff2d42e8a28"}, + {file = "jiter-0.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ff76d8887c8c8ee1e772274fcf8cc1071c2c58590d13e33bd12d02dc9a560397"}, + {file = "jiter-0.10.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a9be4d0fa2b79f7222a88aa488bd89e2ae0a0a5b189462a12def6ece2faa45f1"}, + {file = "jiter-0.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ab7fd8738094139b6c1ab1822d6f2000ebe41515c537235fd45dabe13ec9324"}, + {file = "jiter-0.10.0-cp39-cp39-win32.whl", hash = "sha256:5f51e048540dd27f204ff4a87f5d79294ea0aa3aa552aca34934588cf27023cf"}, + {file = "jiter-0.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b28302349dc65703a9e4ead16f163b1c339efffbe1049c30a44b001a2a4fff9"}, + {file = "jiter-0.10.0.tar.gz", hash = "sha256:07a7142c38aacc85194391108dc91b5b57093c978a9932bd86a36862759d9500"}, +] + [[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" +groups = ["main"] +files = [ + {file = "json_flattener-0.1.9-py3-none-any.whl", hash = "sha256:6b027746f08bf37a75270f30c6690c7149d5f704d8af1740c346a3a1236bc941"}, + {file = "json_flattener-0.1.9.tar.gz", hash = "sha256:84cf8523045ffb124301a602602201665fcb003a171ece87e6f46ed02f7f0c15"}, +] [package.dependencies] click = "*" pyyaml = "*" +[[package]] +name = "json5" +version = "0.12.0" +description = "A Python implementation of the JSON5 data format." +optional = false +python-versions = ">=3.8.0" +groups = ["dev"] +files = [ + {file = "json5-0.12.0-py3-none-any.whl", hash = "sha256:6d37aa6c08b0609f16e1ec5ff94697e2cbbfbad5ac112afa05794da9ab7810db"}, + {file = "json5-0.12.0.tar.gz", hash = "sha256:0b4b6ff56801a1c7dc817b0241bca4ce474a0e6a163bfef3fc594d3fd263ff3a"}, +] + +[package.extras] +dev = ["build (==1.2.2.post1)", "coverage (==7.5.4) ; python_version < \"3.9\"", "coverage (==7.8.0) ; python_version >= \"3.9\"", "mypy (==1.14.1) ; python_version < \"3.9\"", "mypy (==1.15.0) ; python_version >= \"3.9\"", "pip (==25.0.1)", "pylint (==3.2.7) ; python_version < \"3.9\"", "pylint (==3.3.6) ; python_version >= \"3.9\"", "ruff (==0.11.2)", "twine (==6.1.0)", "uv (==0.6.11)"] + [[package]] name = "jsonasobj" -version = "2.0.1" +version = "1.3.1" description = "JSON as python objects" -category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -hbreader = "*" +python-versions = "*" +groups = ["main"] +files = [ + {file = "jsonasobj-1.3.1-py3-none-any.whl", hash = "sha256:b9e329dc1ceaae7cf5d5b214684a0b100e0dad0be6d5bbabac281ec35ddeca65"}, + {file = "jsonasobj-1.3.1.tar.gz", hash = "sha256:d52e0544a54a08f6ea3f77fa3387271e3648655e0eace2f21e825c26370e44a2"}, +] [[package]] name = "jsonasobj2" version = "1.0.4" description = "JSON as python objects - version 2" -category = "main" optional = false python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "jsonasobj2-1.0.4-py3-none-any.whl", hash = "sha256:12e86f86324d54fcf60632db94ea74488d5314e3da554c994fe1e2c6f29acb79"}, + {file = "jsonasobj2-1.0.4.tar.gz", hash = "sha256:f50b1668ef478004aa487b2d2d094c304e5cb6b79337809f4a1f2975cc7fbb4e"}, +] [package.dependencies] hbreader = "*" [[package]] -name = "jsonpatch" -version = "1.32" -description = "Apply JSON-Patches (RFC 6902)" -category = "main" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.dependencies] -jsonpointer = ">=1.9" - -[[package]] -name = "jsonpath-ng" -version = "1.5.3" -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 = "main" +name = "jsonlines" +version = "4.0.0" +description = "Library with helpers for the jsonlines file format" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "jsonlines-4.0.0-py3-none-any.whl", hash = "sha256:185b334ff2ca5a91362993f42e83588a360cf95ce4b71a73548502bda52a7c55"}, + {file = "jsonlines-4.0.0.tar.gz", hash = "sha256:0c6d2c09117550c089995247f605ae4cf77dd1533041d366351f6f298822ea74"}, +] [package.dependencies] -decorator = "*" -ply = "*" -six = "*" +attrs = ">=19.2.0" [[package]] name = "jsonpointer" -version = "2.3" +version = "3.0.0" description = "Identify specific nodes in a JSON document (RFC 6901)" -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, + {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, +] [[package]] name = "jsonschema" -version = "4.17.0" +version = "4.23.0" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "jsonschema-4.23.0-py3-none-any.whl", hash = "sha256:fbadb6f8b144a8f8cf9f0b89ba94501d143e50411a1278633f56a7acf7fd5566"}, + {file = "jsonschema-4.23.0.tar.gz", hash = "sha256:d71497fef26351a33265337fa77ffeb82423f3ea21283cd9467bb03999266bc4"}, +] [package.dependencies] -attrs = ">=17.4.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format\""} -idna = {version = "*", optional = true, markers = "extra == \"format\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} -pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} +attrs = ">=22.2.0" +fqdn = [ + {version = "*", optional = true, markers = "extra == \"format\""}, + {version = "*", optional = true, markers = "extra == \"format-nongpl\""}, +] +idna = [ + {version = "*", optional = true, markers = "extra == \"format\""}, + {version = "*", optional = true, markers = "extra == \"format-nongpl\""}, +] +isoduration = [ + {version = "*", optional = true, markers = "extra == \"format\""}, + {version = "*", optional = true, markers = "extra == \"format-nongpl\""}, +] +jsonpointer = [ + {version = ">1.13", optional = true, markers = "extra == \"format\""}, + {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""}, +] +jsonschema-specifications = ">=2023.03.6" +referencing = ">=0.28.4" +rfc3339-validator = [ + {version = "*", optional = true, markers = "extra == \"format\""}, + {version = "*", optional = true, markers = "extra == \"format-nongpl\""}, +] +rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} -uri-template = {version = "*", optional = true, markers = "extra == \"format\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format\""} +rpds-py = ">=0.7.1" +uri-template = [ + {version = "*", optional = true, markers = "extra == \"format\""}, + {version = "*", optional = true, markers = "extra == \"format-nongpl\""}, +] +webcolors = [ + {version = ">=1.11", optional = true, markers = "extra == \"format\""}, + {version = ">=24.6.0", optional = true, markers = "extra == \"format-nongpl\""}, +] [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] +format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=24.6.0)"] + +[[package]] +name = "jsonschema-specifications" +version = "2025.4.1" +description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "jsonschema_specifications-2025.4.1-py3-none-any.whl", hash = "sha256:4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af"}, + {file = "jsonschema_specifications-2025.4.1.tar.gz", hash = "sha256:630159c9f4dbea161a6a2205c3011cc4f18ff381b189fff48bb39b9bf26ae608"}, +] + +[package.dependencies] +referencing = ">=0.31.0" [[package]] name = "jupyter" -version = "1.0.0" +version = "1.1.1" description = "Jupyter metapackage. Install all the Jupyter components in one go." -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "jupyter-1.1.1-py2.py3-none-any.whl", hash = "sha256:7a59533c22af65439b24bbe60373a4e95af8f16ac65a6c00820ad378e3f7cc83"}, + {file = "jupyter-1.1.1.tar.gz", hash = "sha256:d55467bceabdea49d7e3624af7e33d59c37fff53ed3a350e1ac957bed731de7a"}, +] [package.dependencies] ipykernel = "*" ipywidgets = "*" jupyter-console = "*" +jupyterlab = "*" nbconvert = "*" notebook = "*" -qtconsole = "*" [[package]] name = "jupyter-client" -version = "7.4.5" +version = "8.6.3" description = "Jupyter protocol implementation and client libraries" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyter_client-8.6.3-py3-none-any.whl", hash = "sha256:e8a19cc986cc45905ac3362915f410f3af85424b4c0905e94fa5f2cb08e8f23f"}, + {file = "jupyter_client-8.6.3.tar.gz", hash = "sha256:35b3a0947c4a6e9d589eb97d7d4cd5e90f910ee73101611f01283732bd6d9419"}, +] [package.dependencies] -entrypoints = "*" -jupyter-core = ">=4.9.2" -nest-asyncio = ">=1.5.4" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" tornado = ">=6.2" -traitlets = "*" +traitlets = ">=5.3" [package.extras] -doc = ["ipykernel", "myst-parser", "sphinx-rtd-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt"] -test = ["codecov", "coverage", "ipykernel (>=6.12)", "ipython", "mypy", "pre-commit", "pytest", "pytest-asyncio (>=0.18)", "pytest-cov", "pytest-timeout"] +docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko ; sys_platform == \"win32\"", "pre-commit", "pytest (<8.2.0)", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] [[package]] name = "jupyter-console" -version = "6.4.4" +version = "6.6.3" description = "Jupyter terminal console" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jupyter_console-6.6.3-py3-none-any.whl", hash = "sha256:309d33409fcc92ffdad25f0bcdf9a4a9daa61b6f341177570fdac03de5352485"}, + {file = "jupyter_console-6.6.3.tar.gz", hash = "sha256:566a4bf31c87adbfadf22cdf846e3069b59a71ed5da71d6ba4d8aaad14a53539"}, +] [package.dependencies] -ipykernel = "*" +ipykernel = ">=6.14" ipython = "*" jupyter-client = ">=7.0.0" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +prompt-toolkit = ">=3.0.30" pygments = "*" +pyzmq = ">=17" +traitlets = ">=5.4" [package.extras] -test = ["pexpect"] +test = ["flaky", "pexpect", "pytest"] [[package]] name = "jupyter-core" -version = "5.0.0" +version = "5.7.2" description = "Jupyter core package. A base package on which Jupyter projects rely." -category = "dev" optional = false python-versions = ">=3.8" +groups = ["dev"] +files = [ + {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] -platformdirs = "*" -pywin32 = {version = ">=1.0", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = "*" +platformdirs = ">=2.5" +pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} +traitlets = ">=5.3" [package.extras] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] +test = ["ipykernel", "pre-commit", "pytest (<8)", "pytest-cov", "pytest-timeout"] + +[[package]] +name = "jupyter-events" +version = "0.12.0" +description = "Jupyter Event System library" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jupyter_events-0.12.0-py3-none-any.whl", hash = "sha256:6464b2fa5ad10451c3d35fabc75eab39556ae1e2853ad0c0cc31b656731a97fb"}, + {file = "jupyter_events-0.12.0.tar.gz", hash = "sha256:fc3fce98865f6784c9cd0a56a20644fc6098f21c8c33834a8d9fe383c17e554b"}, +] + +[package.dependencies] +jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} +packaging = "*" +python-json-logger = ">=2.0.4" +pyyaml = ">=5.3" +referencing = "*" +rfc3339-validator = "*" +rfc3986-validator = ">=0.1.1" +traitlets = ">=5.3" + +[package.extras] +cli = ["click", "rich"] +docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme (>=0.16)", "sphinx (>=8)", "sphinxcontrib-spelling"] +test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] + +[[package]] +name = "jupyter-lsp" +version = "2.2.5" +description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {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] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jupyter-server = ">=1.1.2" [[package]] name = "jupyter-server" -version = "1.23.1" -description = "=?utf-8?q?The_backend=E2=80=94i=2Ee=2E_core_services=2C_APIs=2C_and_REST_endpoints=E2=80=94to_Jupyter_web_applications=2E?=" -category = "dev" +version = "2.16.0" +description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jupyter_server-2.16.0-py3-none-any.whl", hash = "sha256:3d8db5be3bc64403b1c65b400a1d7f4647a5ce743f3b20dbdefe8ddb7b55af9e"}, + {file = "jupyter_server-2.16.0.tar.gz", hash = "sha256:65d4b44fdf2dcbbdfe0aa1ace4a842d4aaf746a2b7b168134d5aaed35621b7f6"}, +] + +[package.dependencies] +anyio = ">=3.1.0" +argon2-cffi = ">=21.1" +jinja2 = ">=3.0.3" +jupyter-client = ">=7.4.4" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +jupyter-events = ">=0.11.0" +jupyter-server-terminals = ">=0.4.4" +nbconvert = ">=6.4.4" +nbformat = ">=5.3.0" +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 = ">=1.7" + +[package.extras] +docs = ["ipykernel", "jinja2", "jupyter-client", "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,<9)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.7)", "pytest-timeout", "requests"] + +[[package]] +name = "jupyter-server-terminals" +version = "0.5.3" +description = "A Jupyter Server Extension Providing Terminals." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {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] +pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} +terminado = ">=0.8.3" + +[package.extras] +docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] +test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] + +[[package]] +name = "jupyterlab" +version = "4.4.2" +description = "JupyterLab computational environment" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "jupyterlab-4.4.2-py3-none-any.whl", hash = "sha256:857111a50bed68542bf55dca784522fe728f9f88b4fe69e8c585db5c50900419"}, + {file = "jupyterlab-4.4.2.tar.gz", hash = "sha256:afa9caf28c0cb966488be18e5e8daba9f018a1c4273a406b7d5006344cbc6d16"}, +] [package.dependencies] -anyio = ">=3.1.0,<4" -argon2-cffi = "*" -jinja2 = "*" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.7.0" -nbconvert = ">=6.4.4" -nbformat = ">=5.2.0" +async-lru = ">=1.0.0" +httpx = ">=0.25.0" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +ipykernel = ">=6.5.0" +jinja2 = ">=3.0.3" +jupyter-core = "*" +jupyter-lsp = ">=2.0.0" +jupyter-server = ">=2.4.0,<3" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2" packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=17" -Send2Trash = "*" -terminado = ">=0.8.3" -tornado = ">=6.1.0" -traitlets = ">=5.1" -websocket-client = "*" +setuptools = ">=41.1.0" +tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} +tornado = ">=6.2.0" +traitlets = "*" [package.extras] -test = ["coverage", "ipykernel", "pre-commit", "pytest-console-scripts", "pytest-cov", "pytest-mock", "pytest-timeout", "pytest-tornasync", "pytest (>=7.0)", "requests"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.11.4)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<8.2.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.5.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.5)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.3.post1)", "matplotlib (==3.10.0)", "nbconvert (>=7.0.0)", "pandas (==2.2.3)", "scipy (==1.15.1)", "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 (>=9,<10)", "jinja2-time (<0.3)", "pydantic (<3.0)", "pyyaml-include (<3.0)", "tomli-w (<2.0)"] [[package]] name = "jupyterlab-pygments" -version = "0.2.2" +version = "0.3.0" description = "Pygments theme using JupyterLab CSS variables" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, + {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, +] + +[[package]] +name = "jupyterlab-server" +version = "2.27.3" +description = "A set of server components for JupyterLab and JupyterLab like applications." +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "jupyterlab_server-2.27.3-py3-none-any.whl", hash = "sha256:e697488f66c3db49df675158a77b3b017520d772c6e1548c7d9bcc5df7944ee4"}, + {file = "jupyterlab_server-2.27.3.tar.gz", hash = "sha256:eb36caca59e74471988f0ae25c77945610b887f777255aa21f8065def9e51ed4"}, +] + +[package.dependencies] +babel = ">=2.10" +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} +jinja2 = ">=3.0.3" +json5 = ">=0.9.0" +jsonschema = ">=4.18.0" +jupyter-server = ">=1.21,<3" +packaging = ">=21.3" +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,<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.3" +version = "3.0.15" description = "Jupyter interactive widgets for JupyterLab" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "jupyterlab_widgets-3.0.15-py3-none-any.whl", hash = "sha256:d59023d7d7ef71400d51e6fee9a88867f6e65e10a4201605d2d7f3e8f012a31c"}, + {file = "jupyterlab_widgets-3.0.15.tar.gz", hash = "sha256:2920888a0c2922351a9202817957a68c07d99673504d6cd37345299e971bb08b"}, +] [[package]] name = "kgcl-rdflib" -version = "0.3.0" -description = "Schema fro the KGCL project." -category = "main" +version = "0.5.0" +description = "Schema for the KGCL project." optional = false python-versions = ">=3.8,<4.0" +groups = ["main"] +files = [ + {file = "kgcl_rdflib-0.5.0-py3-none-any.whl", hash = "sha256:214c011eac692384dd18397e455af2a7375f6a2f71fa318df245e8826678f454"}, + {file = "kgcl_rdflib-0.5.0.tar.gz", hash = "sha256:19e34690316714b9c500e1749a35d1a0d17282f2a38cd2b1fd3d7d8cf5e6013d"}, +] [package.dependencies] -kgcl-schema = ">=0.3.0,<0.4.0" -lark = ">=1.1.2,<2.0.0" -linkml-runtime = ">=1.1.24,<2.0.0" +kgcl-schema = ">=0.5.0" +linkml-runtime = ">=1.1.24" [[package]] name = "kgcl-schema" -version = "0.3.1" +version = "0.6.9" description = "Schema for the KGCL project." -category = "main" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "kgcl_schema-0.6.9-py3-none-any.whl", hash = "sha256:6acd367a4cd998ec8dfe70987bf797aecce558df86a1395bc8c3e0489f66b9a9"}, + {file = "kgcl_schema-0.6.9.tar.gz", hash = "sha256:1bb0f9f13356df7b5c6ba9c73a7124dc897e525af49f40454dafd45bfca021bd"}, +] [package.dependencies] -bioregistry = ">=0.5.49,<0.6.0" -lark = ">=1.1.2,<2.0.0" -linkml-runtime = ">=1.1.24,<2.0.0" +curies = ">=0.6.0" +lark = ">=1.1.2" +linkml-runtime = ">=1.1.24" +prefixmaps = ">=0.2.0,<0.3.0" [[package]] name = "lark" -version = "1.1.4" +version = "1.2.2" description = "a modern parsing library" -category = "main" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "lark-1.2.2-py3-none-any.whl", hash = "sha256:c2276486b02f0f1b90be155f2c8ba4a8e194d42775786db622faccd652d8e80c"}, + {file = "lark-1.2.2.tar.gz", hash = "sha256:ca807d0162cd16cef15a8feecb862d7319e7a09bdb13aef927968e45040fed80"}, +] [package.extras] -atomic_cache = ["atomicwrites"] +atomic-cache = ["atomicwrites"] +interegular = ["interegular (>=0.3.1,<0.4.0)"] nearley = ["js2py"] regex = ["regex"] [[package]] name = "linkml" -version = "1.3.13" +version = "1.9.2" description = "Linked Open Data Modeling Language" -category = "main" optional = false -python-versions = ">=3.7.6,<4.0.0" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "linkml-1.9.2-py3-none-any.whl", hash = "sha256:4c9cf217948367df8a20cdf68e8f6da24ba23ab97a551f8ae32e9d4264e702cc"}, + {file = "linkml-1.9.2.tar.gz", hash = "sha256:2f9141d2bc8a93bfe1d4b86a015ad0acbb94c2af099177f5687a50d3331d2b34"}, +] [package.dependencies] antlr4-python3-runtime = ">=4.9.0,<4.10" @@ -1065,14 +2550,12 @@ isodate = ">=0.6.0" jinja2 = ">=3.1.0" jsonasobj2 = ">=1.0.3,<2.0.0" jsonschema = {version = ">=4.0.0", extras = ["format"]} -linkml-dataops = "*" -linkml-runtime = ">=1.3,<1.4" -myst-parser = "*" +linkml-runtime = ">=1.9.2,<2.0.0" openpyxl = "*" parse = "*" prefixcommons = ">=0.1.7" -prefixmaps = ">=0.1.3,<0.2.0" -pydantic = "*" +prefixmaps = ">=0.2.2" +pydantic = ">=1.0.0,<3.0.0" pyjsg = ">=0.11.6" pyshex = ">=0.7.20" pyshexc = ">=0.8.3" @@ -1080,482 +2563,864 @@ python-dateutil = "*" pyyaml = "*" rdflib = ">=6.0.0" requests = ">=2.22" -sphinx-click = "*" -sphinx-rtd-theme = "*" +sphinx-click = ">=6.0.0" sqlalchemy = ">=1.4.31" -tox = ">=3.25.1,<4.0.0" +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.12\""} watchdog = ">=0.9.0" [package.extras] -docs = ["furo[docs] (>=2022.9.29,<2023.0.0)", "sphinx", "sphinxcontrib-mermaid[docs] (>=0.7.1,<0.8.0)"] +black = ["black (>=24.0.0)"] +numpydantic = ["numpydantic (>=1.6.1)"] +pandera = ["pandera (>=0.19.0)"] +polars-lts-cpu = ["polars-lts-cpu (>=1.0.0)"] +shacl = ["pyshacl (>=0.25.0)"] +tests = ["black (>=24.0.0)", "numpydantic (>=1.6.1)", "pyshacl (>=0.25.0)"] [[package]] -name = "linkml-dataops" -version = "0.1.0" -description = "LinkML Data Operations API" -category = "main" +name = "linkml-renderer" +version = "0.3.1" +description = "linkml-renderer" optional = false -python-versions = ">=3.7" +python-versions = "<4.0,>=3.8" +groups = ["main"] +files = [ + {file = "linkml_renderer-0.3.1-py3-none-any.whl", hash = "sha256:3737247ecc349c270b849c55593719fb457b385223ef8f75e7e7b0da11eb12e3"}, + {file = "linkml_renderer-0.3.1.tar.gz", hash = "sha256:f600ca96d603e53b7187abe1dc9c417334bd96756d3e4f704a96892f6b28ba5a"}, +] [package.dependencies] -jinja2 = "*" -jsonpatch = "*" -jsonpath-ng = "*" -linkml-runtime = ">=1.1.6" -"ruamel.yaml" = "*" +airium = ">=0.2.5,<0.3.0" +click = ">=8.1.3,<9.0.0" +linkml-runtime = ">=1.4.1" +pydantic = "*" [[package]] name = "linkml-runtime" -version = "1.3.6" +version = "1.9.2" description = "Runtime environment for LinkML, the Linked open data modeling language" -category = "main" optional = false -python-versions = ">=3.7.1,<4.0.0" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "linkml_runtime-1.9.2-py3-none-any.whl", hash = "sha256:ff9fd51d38e5c6b991b88e90fb603120629b9da28861f334ea48139c7266f941"}, + {file = "linkml_runtime-1.9.2.tar.gz", hash = "sha256:d37b3ca479464ec1fec04551f98e8e0e74620ee62a45bbd80da1ff2022132d92"}, +] [package.dependencies] click = "*" +curies = ">=0.5.4" deprecated = "*" hbreader = "*" +isodate = {version = ">=0.7.2,<1.0.0", markers = "python_version < \"3.11\""} json-flattener = ">=0.1.9" -jsonasobj2 = ">=1.0.4,<2.0.0" +jsonasobj2 = ">=1.0.4,<2.dev0" jsonschema = ">=3.2.0" prefixcommons = ">=0.1.12" +prefixmaps = ">=0.1.4" +pydantic = ">=1.10.2,<3.0.0" pyyaml = "*" rdflib = ">=6.0.0" requests = "*" +[[package]] +name = "llm" +version = "0.21" +description = "A CLI utility and Python library for interacting with Large Language Models, including OpenAI, PaLM and local models installed on your own machine." +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "llm-0.21-py3-none-any.whl", hash = "sha256:d045276c92d0eb4e5f2978123ad1a0f607085cdd454ef055731a55487ae5c0a6"}, + {file = "llm-0.21.tar.gz", hash = "sha256:ac1717e7cb68275271ad90d8f045407e59215a69b4ccc222ef4e60c43edeb95e"}, +] + +[package.dependencies] +click = "*" +click-default-group = ">=1.2.3" +openai = ">=1.55.3" +pip = "*" +pluggy = "*" +puremagic = "*" +pydantic = ">=1.10.2" +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\""} +python-ulid = "*" +PyYAML = "*" +setuptools = "*" +sqlite-migrate = ">=0.1a2" +sqlite-utils = ">=3.37" + +[package.extras] +test = ["black (==24.10.0)", "cogapp", "mypy (>=1.10.0)", "numpy", "pytest", "pytest-asyncio", "pytest-httpx (>=0.33.0)", "ruff", "types-PyYAML", "types-click", "types-setuptools"] + [[package]] name = "lxml" -version = "4.9.1" +version = "5.4.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" +groups = ["main", "dev"] +files = [ + {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e7bc6df34d42322c5289e37e9971d6ed114e3776b45fa879f734bded9d1fea9c"}, + {file = "lxml-5.4.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6854f8bd8a1536f8a1d9a3655e6354faa6406621cf857dc27b681b69860645c7"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:696ea9e87442467819ac22394ca36cb3d01848dad1be6fac3fb612d3bd5a12cf"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ef80aeac414f33c24b3815ecd560cee272786c3adfa5f31316d8b349bfade28"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b9c2754cef6963f3408ab381ea55f47dabc6f78f4b8ebb0f0b25cf1ac1f7609"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7a62cc23d754bb449d63ff35334acc9f5c02e6dae830d78dab4dd12b78a524f4"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f82125bc7203c5ae8633a7d5d20bcfdff0ba33e436e4ab0abc026a53a8960b7"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:b67319b4aef1a6c56576ff544b67a2a6fbd7eaee485b241cabf53115e8908b8f"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:a8ef956fce64c8551221f395ba21d0724fed6b9b6242ca4f2f7beb4ce2f41997"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:0a01ce7d8479dce84fc03324e3b0c9c90b1ece9a9bb6a1b6c9025e7e4520e78c"}, + {file = "lxml-5.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:91505d3ddebf268bb1588eb0f63821f738d20e1e7f05d3c647a5ca900288760b"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a3bcdde35d82ff385f4ede021df801b5c4a5bcdfb61ea87caabcebfc4945dc1b"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:aea7c06667b987787c7d1f5e1dfcd70419b711cdb47d6b4bb4ad4b76777a0563"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:a7fb111eef4d05909b82152721a59c1b14d0f365e2be4c742a473c5d7372f4f5"}, + {file = "lxml-5.4.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:43d549b876ce64aa18b2328faff70f5877f8c6dede415f80a2f799d31644d776"}, + {file = "lxml-5.4.0-cp310-cp310-win32.whl", hash = "sha256:75133890e40d229d6c5837b0312abbe5bac1c342452cf0e12523477cd3aa21e7"}, + {file = "lxml-5.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:de5b4e1088523e2b6f730d0509a9a813355b7f5659d70eb4f319c76beea2e250"}, + {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:98a3912194c079ef37e716ed228ae0dcb960992100461b704aea4e93af6b0bb9"}, + {file = "lxml-5.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ea0252b51d296a75f6118ed0d8696888e7403408ad42345d7dfd0d1e93309a7"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b92b69441d1bd39f4940f9eadfa417a25862242ca2c396b406f9272ef09cdcaa"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20e16c08254b9b6466526bc1828d9370ee6c0d60a4b64836bc3ac2917d1e16df"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7605c1c32c3d6e8c990dd28a0970a3cbbf1429d5b92279e37fda05fb0c92190e"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ecf4c4b83f1ab3d5a7ace10bafcb6f11df6156857a3c418244cef41ca9fa3e44"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cef4feae82709eed352cd7e97ae062ef6ae9c7b5dbe3663f104cd2c0e8d94ba"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:df53330a3bff250f10472ce96a9af28628ff1f4efc51ccba351a8820bca2a8ba"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:aefe1a7cb852fa61150fcb21a8c8fcea7b58c4cb11fbe59c97a0a4b31cae3c8c"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ef5a7178fcc73b7d8c07229e89f8eb45b2908a9238eb90dcfc46571ccf0383b8"}, + {file = "lxml-5.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d2ed1b3cb9ff1c10e6e8b00941bb2e5bb568b307bfc6b17dffbbe8be5eecba86"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:72ac9762a9f8ce74c9eed4a4e74306f2f18613a6b71fa065495a67ac227b3056"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f5cb182f6396706dc6cc1896dd02b1c889d644c081b0cdec38747573db88a7d7"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:3a3178b4873df8ef9457a4875703488eb1622632a9cee6d76464b60e90adbfcd"}, + {file = "lxml-5.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e094ec83694b59d263802ed03a8384594fcce477ce484b0cbcd0008a211ca751"}, + {file = "lxml-5.4.0-cp311-cp311-win32.whl", hash = "sha256:4329422de653cdb2b72afa39b0aa04252fca9071550044904b2e7036d9d97fe4"}, + {file = "lxml-5.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd3be6481ef54b8cfd0e1e953323b7aa9d9789b94842d0e5b142ef4bb7999539"}, + {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b5aff6f3e818e6bdbbb38e5967520f174b18f539c2b9de867b1e7fde6f8d95a4"}, + {file = "lxml-5.4.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:942a5d73f739ad7c452bf739a62a0f83e2578afd6b8e5406308731f4ce78b16d"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:460508a4b07364d6abf53acaa0a90b6d370fafde5693ef37602566613a9b0779"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:529024ab3a505fed78fe3cc5ddc079464e709f6c892733e3f5842007cec8ac6e"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ca56ebc2c474e8f3d5761debfd9283b8b18c76c4fc0967b74aeafba1f5647f9"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a81e1196f0a5b4167a8dafe3a66aa67c4addac1b22dc47947abd5d5c7a3f24b5"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00b8686694423ddae324cf614e1b9659c2edb754de617703c3d29ff568448df5"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:c5681160758d3f6ac5b4fea370495c48aac0989d6a0f01bb9a72ad8ef5ab75c4"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:2dc191e60425ad70e75a68c9fd90ab284df64d9cd410ba8d2b641c0c45bc006e"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:67f779374c6b9753ae0a0195a892a1c234ce8416e4448fe1e9f34746482070a7"}, + {file = "lxml-5.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:79d5bfa9c1b455336f52343130b2067164040604e41f6dc4d8313867ed540079"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3d3c30ba1c9b48c68489dc1829a6eede9873f52edca1dda900066542528d6b20"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1af80c6316ae68aded77e91cd9d80648f7dd40406cef73df841aa3c36f6907c8"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4d885698f5019abe0de3d352caf9466d5de2baded00a06ef3f1216c1a58ae78f"}, + {file = "lxml-5.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:aea53d51859b6c64e7c51d522c03cc2c48b9b5d6172126854cc7f01aa11f52bc"}, + {file = "lxml-5.4.0-cp312-cp312-win32.whl", hash = "sha256:d90b729fd2732df28130c064aac9bb8aff14ba20baa4aee7bd0795ff1187545f"}, + {file = "lxml-5.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:1dc4ca99e89c335a7ed47d38964abcb36c5910790f9bd106f2a8fa2ee0b909d2"}, + {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:773e27b62920199c6197130632c18fb7ead3257fce1ffb7d286912e56ddb79e0"}, + {file = "lxml-5.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ce9c671845de9699904b1e9df95acfe8dfc183f2310f163cdaa91a3535af95de"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9454b8d8200ec99a224df8854786262b1bd6461f4280064c807303c642c05e76"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cccd007d5c95279e529c146d095f1d39ac05139de26c098166c4beb9374b0f4d"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0fce1294a0497edb034cb416ad3e77ecc89b313cff7adbee5334e4dc0d11f422"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24974f774f3a78ac12b95e3a20ef0931795ff04dbb16db81a90c37f589819551"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:497cab4d8254c2a90bf988f162ace2ddbfdd806fce3bda3f581b9d24c852e03c"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:e794f698ae4c5084414efea0f5cc9f4ac562ec02d66e1484ff822ef97c2cadff"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:2c62891b1ea3094bb12097822b3d44b93fc6c325f2043c4d2736a8ff09e65f60"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:142accb3e4d1edae4b392bd165a9abdee8a3c432a2cca193df995bc3886249c8"}, + {file = "lxml-5.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1a42b3a19346e5601d1b8296ff6ef3d76038058f311902edd574461e9c036982"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4291d3c409a17febf817259cb37bc62cb7eb398bcc95c1356947e2871911ae61"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4f5322cf38fe0e21c2d73901abf68e6329dc02a4994e483adbcf92b568a09a54"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0be91891bdb06ebe65122aa6bf3fc94489960cf7e03033c6f83a90863b23c58b"}, + {file = "lxml-5.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:15a665ad90054a3d4f397bc40f73948d48e36e4c09f9bcffc7d90c87410e478a"}, + {file = "lxml-5.4.0-cp313-cp313-win32.whl", hash = "sha256:d5663bc1b471c79f5c833cffbc9b87d7bf13f87e055a5c86c363ccd2348d7e82"}, + {file = "lxml-5.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:bcb7a1096b4b6b24ce1ac24d4942ad98f983cd3810f9711bcd0293f43a9d8b9f"}, + {file = "lxml-5.4.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7be701c24e7f843e6788353c055d806e8bd8466b52907bafe5d13ec6a6dbaecd"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb54f7c6bafaa808f27166569b1511fc42701a7713858dddc08afdde9746849e"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:97dac543661e84a284502e0cf8a67b5c711b0ad5fb661d1bd505c02f8cf716d7"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:c70e93fba207106cb16bf852e421c37bbded92acd5964390aad07cb50d60f5cf"}, + {file = "lxml-5.4.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9c886b481aefdf818ad44846145f6eaf373a20d200b5ce1a5c8e1bc2d8745410"}, + {file = "lxml-5.4.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:fa0e294046de09acd6146be0ed6727d1f42ded4ce3ea1e9a19c11b6774eea27c"}, + {file = "lxml-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:61c7bbf432f09ee44b1ccaa24896d21075e533cd01477966a5ff5a71d88b2f56"}, + {file = "lxml-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:7ce1a171ec325192c6a636b64c94418e71a1964f56d002cc28122fceff0b6121"}, + {file = "lxml-5.4.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:795f61bcaf8770e1b37eec24edf9771b307df3af74d1d6f27d812e15a9ff3872"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29f451a4b614a7b5b6c2e043d7b64a15bd8304d7e767055e8ab68387a8cacf4e"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:891f7f991a68d20c75cb13c5c9142b2a3f9eb161f1f12a9489c82172d1f133c0"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4aa412a82e460571fad592d0f93ce9935a20090029ba08eca05c614f99b0cc92"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:ac7ba71f9561cd7d7b55e1ea5511543c0282e2b6450f122672a2694621d63b7e"}, + {file = "lxml-5.4.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:c5d32f5284012deaccd37da1e2cd42f081feaa76981f0eaa474351b68df813c5"}, + {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:ce31158630a6ac85bddd6b830cffd46085ff90498b397bd0a259f59d27a12188"}, + {file = "lxml-5.4.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:31e63621e073e04697c1b2d23fcb89991790eef370ec37ce4d5d469f40924ed6"}, + {file = "lxml-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:be2ba4c3c5b7900246a8f866580700ef0d538f2ca32535e991027bdaba944063"}, + {file = "lxml-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:09846782b1ef650b321484ad429217f5154da4d6e786636c38e434fa32e94e49"}, + {file = "lxml-5.4.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eaf24066ad0b30917186420d51e2e3edf4b0e2ea68d8cd885b14dc8afdcf6556"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b31a3a77501d86d8ade128abb01082724c0dfd9524f542f2f07d693c9f1175f"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e108352e203c7afd0eb91d782582f00a0b16a948d204d4dec8565024fafeea5"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a11a96c3b3f7551c8a8109aa65e8594e551d5a84c76bf950da33d0fb6dfafab7"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:ca755eebf0d9e62d6cb013f1261e510317a41bf4650f22963474a663fdfe02aa"}, + {file = "lxml-5.4.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4cd915c0fb1bed47b5e6d6edd424ac25856252f09120e3e8ba5154b6b921860e"}, + {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:226046e386556a45ebc787871d6d2467b32c37ce76c2680f5c608e25823ffc84"}, + {file = "lxml-5.4.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b108134b9667bcd71236c5a02aad5ddd073e372fb5d48ea74853e009fe38acb6"}, + {file = "lxml-5.4.0-cp38-cp38-win32.whl", hash = "sha256:1320091caa89805df7dcb9e908add28166113dcd062590668514dbd510798c88"}, + {file = "lxml-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:073eb6dcdf1f587d9b88c8c93528b57eccda40209cf9be549d469b942b41d70b"}, + {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bda3ea44c39eb74e2488297bb39d47186ed01342f0022c8ff407c250ac3f498e"}, + {file = "lxml-5.4.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9ceaf423b50ecfc23ca00b7f50b64baba85fb3fb91c53e2c9d00bc86150c7e40"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:664cdc733bc87449fe781dbb1f309090966c11cc0c0cd7b84af956a02a8a4729"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67ed8a40665b84d161bae3181aa2763beea3747f748bca5874b4af4d75998f87"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4a3bd174cc9cdaa1afbc4620c049038b441d6ba07629d89a83b408e54c35cd"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:b0989737a3ba6cf2a16efb857fb0dfa20bc5c542737fddb6d893fde48be45433"}, + {file = "lxml-5.4.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:dc0af80267edc68adf85f2a5d9be1cdf062f973db6790c1d065e45025fa26140"}, + {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:639978bccb04c42677db43c79bdaa23785dc7f9b83bfd87570da8207872f1ce5"}, + {file = "lxml-5.4.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5a99d86351f9c15e4a901fc56404b485b1462039db59288b203f8c629260a142"}, + {file = "lxml-5.4.0-cp39-cp39-win32.whl", hash = "sha256:3e6d5557989cdc3ebb5302bbdc42b439733a841891762ded9514e74f60319ad6"}, + {file = "lxml-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:a8c9b7f16b63e65bbba889acb436a1034a82d34fa09752d754f88d708eca80e1"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:1b717b00a71b901b4667226bba282dd462c42ccf618ade12f9ba3674e1fabc55"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27a9ded0f0b52098ff89dd4c418325b987feed2ea5cc86e8860b0f844285d740"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b7ce10634113651d6f383aa712a194179dcd496bd8c41e191cec2099fa09de5"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53370c26500d22b45182f98847243efb518d268374a9570409d2e2276232fd37"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c6364038c519dffdbe07e3cf42e6a7f8b90c275d4d1617a69bb59734c1a2d571"}, + {file = "lxml-5.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b12cb6527599808ada9eb2cd6e0e7d3d8f13fe7bbb01c6311255a15ded4c7ab4"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5f11a1526ebd0dee85e7b1e39e39a0cc0d9d03fb527f56d8457f6df48a10dc0c"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48b4afaf38bf79109bb060d9016fad014a9a48fb244e11b94f74ae366a64d252"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de6f6bb8a7840c7bf216fb83eec4e2f79f7325eca8858167b68708b929ab2172"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5cca36a194a4eb4e2ed6be36923d3cffd03dcdf477515dea687185506583d4c9"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:b7c86884ad23d61b025989d99bfdd92a7351de956e01c61307cb87035960bcb1"}, + {file = "lxml-5.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:53d9469ab5460402c19553b56c3648746774ecd0681b1b27ea74d5d8a3ef5590"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:56dbdbab0551532bb26c19c914848d7251d73edb507c3079d6805fa8bba5b706"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14479c2ad1cb08b62bb941ba8e0e05938524ee3c3114644df905d2331c76cd57"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32697d2ea994e0db19c1df9e40275ffe84973e4232b5c274f47e7c1ec9763cdd"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:24f6df5f24fc3385f622c0c9d63fe34604893bc1a5bdbb2dbf5870f85f9a404a"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:151d6c40bc9db11e960619d2bf2ec5829f0aaffb10b41dcf6ad2ce0f3c0b2325"}, + {file = "lxml-5.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:4025bf2884ac4370a3243c5aa8d66d3cb9e15d3ddd0af2d796eccc5f0244390e"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:9459e6892f59ecea2e2584ee1058f5d8f629446eab52ba2305ae13a32a059530"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47fb24cc0f052f0576ea382872b3fc7e1f7e3028e53299ea751839418ade92a6"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50441c9de951a153c698b9b99992e806b71c1f36d14b154592580ff4a9d0d877"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ab339536aa798b1e17750733663d272038bf28069761d5be57cb4a9b0137b4f8"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:9776af1aad5a4b4a1317242ee2bea51da54b2a7b7b48674be736d463c999f37d"}, + {file = "lxml-5.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:63e7968ff83da2eb6fdda967483a7a023aa497d85ad8f05c3ad9b1f2e8c84987"}, + {file = "lxml-5.4.0.tar.gz", hash = "sha256:d12832e1dbea4be280b22fd0ea7c9b87f0d8fc51ba06e92dc62d52f804f78ebd"}, +] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml_html_clean"] html5 = ["html5lib"] -htmlsoup = ["beautifulsoup4"] -source = ["Cython (>=0.29.7)"] +htmlsoup = ["BeautifulSoup4"] +source = ["Cython (>=3.0.11,<3.1.0)"] [[package]] -name = "markdown" -version = "3.3.7" -description = "Python implementation of Markdown." -category = "main" -optional = false -python-versions = ">=3.6" +name = "mariadb" +version = "1.1.12" +description = "Python MariaDB extension" +optional = true +python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"mariadb\"" +files = [ + {file = "mariadb-1.1.12-cp310-cp310-win32.whl", hash = "sha256:8cc4068bdd14f4907746ec3bb37005682e47f84438cf56bdc6d901c2587f792a"}, + {file = "mariadb-1.1.12-cp310-cp310-win_amd64.whl", hash = "sha256:69b284ed12e6ef8dda6314cb1ca9d20d53b8a32a07bed2924beb25488e7d9502"}, + {file = "mariadb-1.1.12-cp311-cp311-win32.whl", hash = "sha256:e3ce7c47be58897822d07f119461b2aa6aa41a53f3505bec517b14fc6c3611a6"}, + {file = "mariadb-1.1.12-cp311-cp311-win_amd64.whl", hash = "sha256:5ae99af48ba92e3e2edad1dcda293f352c1b65e335007943b9def4cdde622fab"}, + {file = "mariadb-1.1.12-cp312-cp312-win32.whl", hash = "sha256:194045d2f59b2c9100dad210dbd8ba3008120f8a434e792dae15b711e5449022"}, + {file = "mariadb-1.1.12-cp312-cp312-win_amd64.whl", hash = "sha256:dd9d0ca112eb670dfa99a2fb7c4398bcc2a8c452dbf5507a8e4b5c4ae991bb2a"}, + {file = "mariadb-1.1.12-cp313-cp313-win32.whl", hash = "sha256:ba43c42130d41352f32a5786c339cc931d05472ef7640fa3764d428dc294b88e"}, + {file = "mariadb-1.1.12-cp313-cp313-win_amd64.whl", hash = "sha256:b69bc18418e72fcf359d17736cdc3f601a271203aff13ef7c57a415c8fd52ab0"}, + {file = "mariadb-1.1.12-cp39-cp39-win32.whl", hash = "sha256:8b49fc1e8c38bf5a779d46f8cea61c99660adb08d5d15cb7dbc7911a6439ffc2"}, + {file = "mariadb-1.1.12-cp39-cp39-win_amd64.whl", hash = "sha256:992064971e0ff4b4154b80b16589ec86237ce4bd33debe1be5212141c056858a"}, + {file = "mariadb-1.1.12.tar.gz", hash = "sha256:50b02ff2c78b1b4f4628a054e3c8c7dd92972137727a5cc309a64c9ed20c878c"}, +] [package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - -[package.extras] -testing = ["coverage", "pyyaml"] +packaging = "*" [[package]] name = "markdown-it-py" -version = "2.1.0" +version = "3.0.0" description = "Python port of markdown-it. Markdown parsing, done right!" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, + {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, +] [package.dependencies] mdurl = ">=0.1,<1.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme", "sphinx-design", "sphinx-copybutton", "sphinx", "pyyaml", "myst-parser", "attrs"] -profiling = ["gprof2dot"] +benchmarking = ["psutil", "pytest", "pytest-benchmark"] +code-style = ["pre-commit (>=3.0,<4.0)"] +compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] +linkify = ["linkify-it-py (>=1,<3)"] plugins = ["mdit-py-plugins"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -compare = ["panflute (>=2.1.3,<2.2.0)", "mistune (>=2.0.2,<2.1.0)", "mistletoe (>=0.8.1,<0.9.0)", "markdown (>=3.3.6,<3.4.0)", "commonmark (>=0.9.1,<0.10.0)"] -code_style = ["pre-commit (==2.6)"] -benchmarking = ["pytest-benchmark (>=3.2,<4.0)", "pytest", "psutil"] +profiling = ["gprof2dot"] +rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "markupsafe" -version = "2.1.1" +version = "3.0.2" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50"}, + {file = "MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d"}, + {file = "MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30"}, + {file = "MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1"}, + {file = "MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6"}, + {file = "MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:eaa0a10b7f72326f1372a713e73c3f739b524b3af41feb43e4921cb529f5929a"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:48032821bbdf20f5799ff537c7ac3d1fba0ba032cfc06194faffa8cda8b560ff"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a9d3f5f0901fdec14d8d2f66ef7d035f2157240a433441719ac9a3fba440b13"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:88b49a3b9ff31e19998750c38e030fc7bb937398b1f78cfa599aaef92d693144"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cfad01eed2c2e0c01fd0ecd2ef42c492f7f93902e39a42fc9ee1692961443a29"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1225beacc926f536dc82e45f8a4d68502949dc67eea90eab715dea3a21c1b5f0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:3169b1eefae027567d1ce6ee7cae382c57fe26e82775f460f0b2778beaad66c0"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:eb7972a85c54febfb25b5c4b4f3af4dcc731994c7da0d8a0b4a6eb0640e1d178"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win32.whl", hash = "sha256:8c4e8c3ce11e1f92f6536ff07154f9d49677ebaaafc32db9db4620bc11ed480f"}, + {file = "MarkupSafe-3.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e296a513ca3d94054c2c881cc913116e90fd030ad1c656b3869762b754f5f8a"}, + {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, +] [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" -category = "dev" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, +] [package.dependencies] traitlets = "*" [[package]] name = "mdit-py-plugins" -version = "0.3.1" +version = "0.4.2" description = "Collection of plugins for markdown-it-py" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636"}, + {file = "mdit_py_plugins-0.4.2.tar.gz", hash = "sha256:5f2cd1fdb606ddf152d37ec30e46101a60512bc0e5fa1a7002c36647b09e26b5"}, +] [package.dependencies] -markdown-it-py = ">=1.0.0,<3.0.0" +markdown-it-py = ">=1.0.0,<4.0.0" [package.extras] -testing = ["pytest-regressions", "pytest-cov", "pytest", "coverage"] -rtd = ["sphinx-book-theme (>=0.1.0,<0.2.0)", "myst-parser (>=0.16.1,<0.17.0)", "attrs"] -code_style = ["pre-commit"] +code-style = ["pre-commit"] +rtd = ["myst-parser", "sphinx-book-theme"] +testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] [[package]] name = "mdurl" version = "0.1.2" description = "Markdown URL utilities" -category = "main" optional = false python-versions = ">=3.7" - -[[package]] -name = "mergedeep" -version = "1.3.4" -description = "A deep merge function for 🐍." -category = "main" -optional = false -python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, + {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, +] [[package]] name = "mistune" -version = "2.0.4" -description = "A sane Markdown parser with useful plugins and renderers" -category = "dev" -optional = false -python-versions = "*" - -[[package]] -name = "mkdocs" -version = "1.4.2" -description = "Project documentation with Markdown." -category = "main" +version = "3.1.3" +description = "A sane and fast Markdown parser with useful plugins and renderers" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "mistune-3.1.3-py3-none-any.whl", hash = "sha256:1a32314113cff28aa6432e99e522677c8587fd83e3d51c29b82a52409c842bd9"}, + {file = "mistune-3.1.3.tar.gz", hash = "sha256:a7035c21782b2becb6be62f8f25d3df81ccb4d6fa477a6525b15af06539f02a0"}, +] [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,<3.4" -mergedeep = ">=1.3.4" -packaging = ">=20.5" -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)", "pyyaml-env-tag (==0.1)", "pyyaml (==5.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +typing-extensions = {version = "*", markers = "python_version < \"3.11\""} [[package]] name = "more-click" -version = "0.1.1" +version = "0.1.2" description = "More click." -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "more_click-0.1.2-py3-none-any.whl", hash = "sha256:f6387af37ef7e7423bd94b72a81a53c79c5086a3bfe5cc035da534ff0c2a0a9e"}, + {file = "more_click-0.1.2.tar.gz", hash = "sha256:085da66d5a9b823c5d912a888dca1fa0c8b3a14ed1b21ea9c8a1b814857a3981"}, +] [package.dependencies] click = "*" +[package.extras] +tests = ["coverage", "pytest"] + [[package]] -name = "multidict" -version = "6.0.2" -description = "multidict implementation" -category = "main" +name = "more-itertools" +version = "10.7.0" +description = "More routines for operating on iterables, beyond itertools" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "more_itertools-10.7.0-py3-none-any.whl", hash = "sha256:d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e"}, + {file = "more_itertools-10.7.0.tar.gz", hash = "sha256:9fddd5403be01a94b204faadcff459ec3568cf110265d3c54323e1e866ad29d3"}, +] [[package]] name = "mypy-extensions" -version = "0.4.3" -description = "Experimental type system extensions for programs checked with the mypy typechecker." -category = "main" +version = "1.1.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, + {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, +] [[package]] name = "myst-parser" -version = "0.18.1" -description = "An extended commonmark compliant parser, with bridges to docutils & sphinx." -category = "main" +version = "3.0.1" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "myst_parser-3.0.1-py3-none-any.whl", hash = "sha256:6457aaa33a5d474aca678b8ead9b3dc298e89c68e67012e73146ea6fd54babf1"}, + {file = "myst_parser-3.0.1.tar.gz", hash = "sha256:88f0cb406cb363b077d176b51c476f62d60604d68a8dcdf4832e080441301a87"}, +] [package.dependencies] -docutils = ">=0.15,<0.20" +docutils = ">=0.18,<0.22" jinja2 = "*" -markdown-it-py = ">=1.0.0,<3.0.0" -mdit-py-plugins = ">=0.3.1,<0.4.0" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4,<1.0" pyyaml = "*" -sphinx = ">=4,<6" -typing-extensions = "*" +sphinx = ">=6,<8" [package.extras] -code_style = ["pre-commit (>=2.12,<3.0)"] -linkify = ["linkify-it-py (>=1.0,<2.0)"] -rtd = ["ipython", "sphinx-book-theme", "sphinx-design", "sphinxext-rediraffe (>=0.2.7,<0.3.0)", "sphinxcontrib.mermaid (>=0.7.1,<0.8.0)", "sphinxext-opengraph (>=0.6.3,<0.7.0)"] -testing = ["beautifulsoup4", "coverage", "pytest (>=6,<7)", "pytest-cov", "pytest-regressions", "pytest-param-files (>=0.3.4,<0.4.0)", "sphinx-pytest", "sphinx (<5.2)"] +code-style = ["pre-commit (>=3.0,<4.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "sphinx (>=7)", "sphinx-autodoc2 (>=0.5.0,<0.6.0)", "sphinx-book-theme (>=1.1,<2.0)", "sphinx-copybutton", "sphinx-design", "sphinx-pyscript", "sphinx-tippy (>=0.4.3)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.9.0,<0.10.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "defusedxml", "pytest (>=8,<9)", "pytest-cov", "pytest-param-files (>=0.6.0,<0.7.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=8,<9)", "pytest-param-files (>=0.6.0,<0.7.0)"] [[package]] -name = "nbclassic" -version = "0.4.8" -description = "A web-based notebook environment for interactive computing" -category = "dev" -optional = false -python-versions = ">=3.7" +name = "myst-parser" +version = "4.0.1" +description = "An extended [CommonMark](https://spec.commonmark.org/) compliant parser," +optional = false +python-versions = ">=3.10" +groups = ["dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "myst_parser-4.0.1-py3-none-any.whl", hash = "sha256:9134e88959ec3b5780aedf8a99680ea242869d012e8821db3126d427edc9c95d"}, + {file = "myst_parser-4.0.1.tar.gz", hash = "sha256:5cfea715e4f3574138aecbf7d54132296bfd72bb614d31168f48c477a830a7c4"}, +] [package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" +docutils = ">=0.19,<0.22" jinja2 = "*" -jupyter-client = ">=6.1.1" -jupyter-core = ">=4.6.1" -jupyter-server = ">=1.8" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -notebook-shim = ">=0.1.0" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" +markdown-it-py = ">=3.0,<4.0" +mdit-py-plugins = ">=0.4.1,<1.0" +pyyaml = "*" +sphinx = ">=7,<9" [package.extras] -docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] -json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "pytest-playwright", "pytest-cov", "pytest-tornasync", "requests-unixsocket"] +code-style = ["pre-commit (>=4.0,<5.0)"] +linkify = ["linkify-it-py (>=2.0,<3.0)"] +rtd = ["ipython", "sphinx (>=7)", "sphinx-autodoc2 (>=0.5.0,<0.6.0)", "sphinx-book-theme (>=1.1,<2.0)", "sphinx-copybutton", "sphinx-design", "sphinx-pyscript", "sphinx-tippy (>=0.4.3)", "sphinx-togglebutton", "sphinxext-opengraph (>=0.9.0,<0.10.0)", "sphinxext-rediraffe (>=0.2.7,<0.3.0)"] +testing = ["beautifulsoup4", "coverage[toml]", "defusedxml", "pygments (<2.19)", "pytest (>=8,<9)", "pytest-cov", "pytest-param-files (>=0.6.0,<0.7.0)", "pytest-regressions", "sphinx-pytest"] +testing-docutils = ["pygments", "pytest (>=8,<9)", "pytest-param-files (>=0.6.0,<0.7.0)"] [[package]] name = "nbclient" -version = "0.7.0" +version = "0.10.2" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -category = "dev" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.9.0" +groups = ["dev"] +files = [ + {file = "nbclient-0.10.2-py3-none-any.whl", hash = "sha256:4ffee11e788b4a27fabeb7955547e4318a5298f34342a4bfd01f2e1faaeadc3d"}, + {file = "nbclient-0.10.2.tar.gz", hash = "sha256:90b7fc6b810630db87a6d0c2250b1f0ab4cf4d3c27a299b0cde78a4ed3fd9193"}, +] [package.dependencies] -jupyter-client = ">=6.1.5" -nbformat = ">=5.0" -nest-asyncio = "*" -traitlets = ">=5.2.2" +jupyter-client = ">=6.1.12" +jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" +nbformat = ">=5.1" +traitlets = ">=5.4" [package.extras] -test = ["xmltodict", "twine (>=1.11.0)", "testpath", "setuptools (>=60.0)", "pytest-cov (>=2.6.1)", "pytest-asyncio", "pytest (>=4.1)", "pre-commit", "pip (>=18.1)", "nbconvert", "mypy", "ipywidgets", "ipython", "ipykernel", "flake8", "check-manifest", "black"] -sphinx = ["sphinx-book-theme", "Sphinx (>=1.7)", "myst-parser", "moto", "mock", "autodoc-traits"] +dev = ["pre-commit"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] +test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.1.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] name = "nbconvert" -version = "7.2.4" -description = "Converting Jupyter Notebooks" -category = "dev" +version = "7.16.6" +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 ...`)." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "nbconvert-7.16.6-py3-none-any.whl", hash = "sha256:1375a7b67e0c2883678c48e506dc320febb57685e5ee67faa51b18a90f3a712b"}, + {file = "nbconvert-7.16.6.tar.gz", hash = "sha256:576a7e37c6480da7b8465eefa66c17844243816ce1ccc372633c6b71c3c0f582"}, +] [package.dependencies] beautifulsoup4 = "*" -bleach = "*" +bleach = {version = "!=5.0.0", extras = ["css"]} defusedxml = "*" importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" markupsafe = ">=2.0" -mistune = ">=2.0.3,<3" +mistune = ">=2.0.3,<4" nbclient = ">=0.5.0" -nbformat = ">=5.1" +nbformat = ">=5.7" packaging = "*" pandocfilters = ">=1.4.1" pygments = ">=2.4.1" -tinycss2 = "*" -traitlets = ">=5.0" +traitlets = ">=5.1" [package.extras] -all = ["ipykernel", "ipython", "ipywidgets (>=7)", "myst-parser", "nbsphinx (>=0.2.12)", "pre-commit", "pyppeteer (>=1,<1.1)", "pyqtwebengine (>=5.15)", "pytest", "pytest-cov", "pytest-dependency", "sphinx-rtd-theme", "sphinx (==5.0.2)", "tornado (>=6.1)"] -docs = ["ipython", "myst-parser", "nbsphinx (>=0.2.12)", "sphinx-rtd-theme", "sphinx (==5.0.2)"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] +docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] -test = ["ipykernel", "ipywidgets (>=7)", "pre-commit", "pyppeteer (>=1,<1.1)", "pytest", "pytest-cov", "pytest-dependency"] -webpdf = ["pyppeteer (>=1,<1.1)"] +test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] +webpdf = ["playwright"] [[package]] name = "nbformat" -version = "5.7.0" +version = "5.10.4" description = "The Jupyter Notebook format" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {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] -test = ["check-manifest", "pep440", "pre-commit", "pytest", "testpath"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["pep440", "pre-commit", "pytest", "testpath"] + +[[package]] +name = "ndex2" +version = "3.10.0" +description = "Nice CX Python includes a client and a data model." +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "ndex2-3.10.0-py2.py3-none-any.whl", hash = "sha256:fdb8307ccdbdf49044c9119373852242ca24a4926df1c5566e94965e59b70b67"}, + {file = "ndex2-3.10.0.tar.gz", hash = "sha256:7e8cfc3fc940cddfd612810fc8c913ab61e01a43e4f482608e86c6548b81b7e1"}, +] + +[package.dependencies] +ijson = "*" +networkx = "*" +numpy = "*" +pandas = "*" +requests = "*" +requests-toolbelt = "*" +six = "*" +urllib3 = ">=1.16" [[package]] name = "nest-asyncio" -version = "1.5.6" +version = "1.6.0" description = "Patch asyncio to allow nested event loops" -category = "dev" optional = false python-versions = ">=3.5" +groups = ["dev"] +files = [ + {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, + {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, +] [[package]] name = "networkx" -version = "2.8.8" +version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, +] + +[package.extras] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] + +[[package]] +name = "networkx" +version = "3.4.2" +description = "Python package for creating and manipulating graphs and networks" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, + {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, +] [package.extras] -default = ["numpy (>=1.19)", "scipy (>=1.8)", "matplotlib (>=3.4)", "pandas (>=1.3)"] -developer = ["pre-commit (>=2.20)", "mypy (>=0.982)"] -doc = ["sphinx (>=5.2)", "pydata-sphinx-theme (>=0.11)", "sphinx-gallery (>=0.11)", "numpydoc (>=1.5)", "pillow (>=9.2)", "nb2plots (>=0.6)", "texext (>=0.6.6)"] -extra = ["lxml (>=4.6)", "pygraphviz (>=1.9)", "pydot (>=1.4.2)", "sympy (>=1.10)"] -test = ["pytest (>=7.2)", "pytest-cov (>=4.0)", "codecov (>=2.1)"] +default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] +example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] +extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "notebook" -version = "6.5.2" -description = "A web-based notebook environment for interactive computing" -category = "dev" +version = "7.4.2" +description = "Jupyter Notebook - A web-based notebook environment for interactive computing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "notebook-7.4.2-py3-none-any.whl", hash = "sha256:9ccef602721aaa5530852e3064710b8ae5415c4e2ce26f8896d0433222755259"}, + {file = "notebook-7.4.2.tar.gz", hash = "sha256:e739defd28c3f615a6bfb0a2564bd75018a9cc6613aa00bbd9c15e68eed2de1b"}, +] [package.dependencies] -argon2-cffi = "*" -ipykernel = "*" -ipython-genutils = "*" -jinja2 = "*" -jupyter-client = ">=5.3.4" -jupyter-core = ">=4.6.1" -nbclassic = ">=0.4.7" -nbconvert = ">=5" -nbformat = "*" -nest-asyncio = ">=1.5" -prometheus-client = "*" -pyzmq = ">=17" -Send2Trash = ">=1.8.0" -terminado = ">=0.8.3" -tornado = ">=6.1" -traitlets = ">=4.2.1" +jupyter-server = ">=2.4.0,<3" +jupyterlab = ">=4.4.0,<4.5" +jupyterlab-server = ">=2.27.1,<3" +notebook-shim = ">=0.2,<0.3" +tornado = ">=6.2.0" [package.extras] -docs = ["sphinx", "nbsphinx", "sphinxcontrib-github-alt", "sphinx-rtd-theme", "myst-parser"] -json-logging = ["json-logging"] -test = ["pytest", "coverage", "requests", "testpath", "nbval", "selenium (==4.1.5)", "pytest-cov", "requests-unixsocket"] +dev = ["hatch", "pre-commit"] +docs = ["myst-parser", "nbsphinx", "pydata-sphinx-theme", "sphinx (>=1.3.6)", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] +test = ["importlib-resources (>=5.0) ; python_version < \"3.10\"", "ipykernel", "jupyter-server[test] (>=2.4.0,<3)", "jupyterlab-server[test] (>=2.27.1,<3)", "nbval", "pytest (>=7.0)", "pytest-console-scripts", "pytest-timeout", "pytest-tornasync", "requests"] [[package]] name = "notebook-shim" -version = "0.2.2" +version = "0.2.4" description = "A shim layer for notebook traits and config" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "notebook_shim-0.2.4-py3-none-any.whl", hash = "sha256:411a5be4e9dc882a074ccbcae671eda64cceb068767e9a3419096986560e1cef"}, + {file = "notebook_shim-0.2.4.tar.gz", hash = "sha256:b4b2cfa1b65d98307ca24361f5b30fe785b53c3fd07b7a47e89acb5e6ac638cb"}, +] [package.dependencies] jupyter-server = ">=1.8,<3" [package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-tornasync"] +test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] [[package]] name = "num2words" -version = "0.5.12" +version = "0.5.14" description = "Modules to convert numbers to words. Easily extensible." -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "num2words-0.5.14-py3-none-any.whl", hash = "sha256:1c8e5b00142fc2966fd8d685001e36c4a9911e070d1b120e1beb721fa1edb33d"}, + {file = "num2words-0.5.14.tar.gz", hash = "sha256:b066ec18e56b6616a3b38086b5747daafbaa8868b226a36127e0451c0cf379c6"}, +] [package.dependencies] docopt = ">=0.6.2" [[package]] name = "numpy" -version = "1.23.4" -description = "NumPy is the fundamental package for array computing with Python." -category = "main" -optional = false -python-versions = ">=3.8" +version = "1.26.4" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, +] [[package]] -name = "nxontology" -version = "0.4.1" -description = "NetworkX for ontologies" -category = "main" +name = "oaklib" +version = "0.6.22" +description = "Ontology Access Kit: Python library for common ontology operations over a variety of backends" optional = false -python-versions = ">=3.8" +python-versions = "<4.0.0,>=3.9" +groups = ["main"] +files = [ + {file = "oaklib-0.6.22-py3-none-any.whl", hash = "sha256:c945538c071da6682ca5ebc04eb02d4e85b770aea94f4540fd6dcc6e3ce9becc"}, + {file = "oaklib-0.6.22.tar.gz", hash = "sha256:bd557aeab6d8aca7ef8840f8e68da66110e33447f946107dc9f463a500a27674"}, +] [package.dependencies] -fsspec = {version = "*", extras = ["http"]} -networkx = ">=2" -pronto = ">=2.4.0" +airium = ">=0.2.5" +appdirs = ">=1.4.4" +class-resolver = ">=0.4.2" +click = "*" +curies = ">=0.6.6" +defusedxml = ">=0.7.1" +eutils = ">=0.6.0" +funowl = ">=0.2.0" +jsonlines = "*" +kgcl-rdflib = "0.5.0" +kgcl-schema = ">=0.6.9,<0.7.0" +linkml-renderer = ">=0.3.0" +linkml-runtime = ">=1.5.3" +ndex2 = ">=3.5.0" +networkx = ">=2.7.1" +ols-client = ">=0.1.1" +ontoportal-client = ">=0.0.3" +prefixmaps = ">=0.1.2" +pronto = ">=2.5.0" +pydantic = "*" +pysolr = ">=3.9.0,<4.0.0" +pystow = ">=0.5.0" +ratelimit = ">=2.2.1" +requests-cache = ">=1.0.1,<2.0.0" +semsql = ">=0.3.1" +SPARQLWrapper = "*" +SQLAlchemy = ">=1.4.32" +sssom = ">=0.4.4,<0.5.0" +tenacity = ">=8.2.3" [package.extras] -viz = ["pygraphviz"] -dev = ["pytest", "pre-commit", "pandas", "fire"] +bioservices = ["bioservices"] +gilda = ["gilda (>=1.0.0)", "urllib3 (<2)"] +llm = ["aiohttp", "html2text", "llm (>=0.14,<0.15)"] +semsimian = ["semsimian (>=0.2.18)"] [[package]] -name = "oaklib" -version = "0.1.52" -description = "Ontology Access Kit: Python library for common ontology operations over a variety of backends" -category = "main" +name = "oauthlib" +version = "3.2.2" +description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = false -python-versions = ">=3.9,<4.0.0" - -[package.dependencies] -appdirs = ">=1.4.4,<2.0.0" -bioregistry = ">=0.5.64,<0.6.0" -class-resolver = ">=0.3.10,<0.4.0" -curies = ">=0.4.0,<0.5.0" -funowl = ">=0.1.12,<0.2.0" -kgcl-rdflib = ">=0.3.0,<0.4.0" -kgcl-schema = ">=0.3.1,<0.4.0" -lark = ">=1.1.2,<2.0.0" -linkml-runtime = ">=1.2.15,<2.0.0" -networkx = ">=2.7.1,<3.0.0" -nxontology = ">=0.4.0,<0.5.0" -ols-client = ">=0.1.1,<0.2.0" -ontoportal-client = "0.0.3" -pandas = ">=1.5.1,<2.0.0" -prefixmaps = ">=0.1.2,<0.2.0" -pronto = ">=2.5.0,<3.0.0" -pystow = ">=0.4.4,<0.5.0" -ratelimit = ">=2.2.1,<3.0.0" -semsql = ">=0.1.6,<0.2.0" -SPARQLWrapper = "*" -SQLAlchemy = ">=1.4.32,<2.0.0" -sssom = ">=0.3.16,<0.4.0" -sssom-schema = ">=0.9.3,<0.10.0" +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, + {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, +] [package.extras] -gilda = ["gilda (>=0.10.1,<0.11.0)"] +rsa = ["cryptography (>=3.0.0)"] +signals = ["blinker (>=1.4.0)"] +signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] [[package]] name = "ols-client" -version = "0.1.2" +version = "0.1.4" description = "A client to the EBI Ontology Lookup Service" -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "ols_client-0.1.4-py3-none-any.whl", hash = "sha256:7bdca0590042e07cc7ee3ef3fba99c3b6862cde6c8835afb129de31284b3e010"}, + {file = "ols_client-0.1.4.tar.gz", hash = "sha256:cd2a0f39107f39eaf0f40b9098f12d442cf3d43e28228e63feb407d0aeb44470"}, +] [package.dependencies] class-resolver = "*" @@ -1565,196 +3430,370 @@ pystow = "*" requests = "*" [package.extras] +docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-automodapi", "sphinx-click", "sphinx-rtd-theme"] tests = ["coverage", "pytest"] -docs = ["sphinx-automodapi", "sphinx-autodoc-typehints", "sphinx-click", "sphinx-rtd-theme", "sphinx"] + +[[package]] +name = "ontodev-cogs" +version = "0.3.3" +description = "COGS Operates Google Sheets" +optional = false +python-versions = ">=3.6, <4" +groups = ["main"] +files = [ + {file = "ontodev-cogs-0.3.3.tar.gz", hash = "sha256:04cf448eda59e0645c6626453f7617a6b2be3129c8586c4d4a515ad031f61a18"}, + {file = "ontodev_cogs-0.3.3-py3-none-any.whl", hash = "sha256:b3299b7884891d00e016f9cb0329a1a0dc8af4bfba45dce3815f654360b1f333"}, +] + +[package.dependencies] +daff = "*" +google = "*" +google-api-python-client = "*" +gspread = "*" +gspread-formatting = "*" +requests = "*" +tabulate = "*" +termcolor = "*" [[package]] name = "ontoportal-client" -version = "0.0.3" +version = "0.0.4" description = "A client to BioPortal and other OntoPortal instances." -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "ontoportal_client-0.0.4-py3-none-any.whl", hash = "sha256:0dedd4ce003e0b6c1128fa05101e57bcc128ad79a6c9fcae66037d2447706c4c"}, + {file = "ontoportal_client-0.0.4.tar.gz", hash = "sha256:1bf7edcb94db3ed68ea9a64c620056f0517f7e209826b05dbfda8fe27384fa48"}, +] [package.dependencies] pystow = "*" typing-extensions = "*" [package.extras] -tests = ["unittest-templates", "coverage", "pytest"] -docs = ["sphinx-automodapi", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinx"] +docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-automodapi", "sphinx-rtd-theme"] +tests = ["coverage", "pytest", "unittest-templates"] + +[[package]] +name = "openai" +version = "1.79.0" +description = "The official Python library for the openai API" +optional = true +python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "openai-1.79.0-py3-none-any.whl", hash = "sha256:d5050b92d5ef83f869cb8dcd0aca0b2291c3413412500eec40c66981b3966992"}, + {file = "openai-1.79.0.tar.gz", hash = "sha256:e3b627aa82858d3e42d16616edc22aa9f7477ee5eb3e6819e9f44a961d899a4c"}, +] + +[package.dependencies] +anyio = ">=3.5.0,<5" +distro = ">=1.7.0,<2" +httpx = ">=0.23.0,<1" +jiter = ">=0.4.0,<1" +pydantic = ">=1.9.0,<3" +sniffio = "*" +tqdm = ">4" +typing-extensions = ">=4.11,<5" + +[package.extras] +datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] +realtime = ["websockets (>=13,<16)"] +voice-helpers = ["numpy (>=2.0.2)", "sounddevice (>=0.5.1)"] [[package]] name = "openpyxl" -version = "3.0.10" +version = "3.1.5" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] [package.dependencies] et-xmlfile = "*" [[package]] -name = "packaging" -version = "21.3" -description = "Core utilities for Python packages" -category = "main" +name = "overrides" +version = "7.7.0" +description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, +] -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +[[package]] +name = "packaging" +version = "25.0" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, +] [[package]] name = "pandas" -version = "1.5.1" +version = "2.2.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, +] [package.dependencies] numpy = [ - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] -python-dateutil = ">=2.8.1" +python-dateutil = ">=2.8.2" pytz = ">=2020.1" +tzdata = ">=2022.7" [package.extras] -test = ["pytest-xdist (>=1.31)", "pytest (>=6.0)", "hypothesis (>=5.5.3)"] - -[[package]] -name = "pandasql" -version = "0.7.3" -description = "sqldf for pandas" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -numpy = "*" -pandas = "*" -sqlalchemy = "*" +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] [[package]] name = "pandera" -version = "0.12.0" +version = "0.24.0" description = "A light-weight and flexible data validation and testing tool for statistical data objects." -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pandera-0.24.0-py3-none-any.whl", hash = "sha256:3b7de575b43a4aa03a1561802be4ee0c7471e49153684fe327f7bbea0724b02b"}, + {file = "pandera-0.24.0.tar.gz", hash = "sha256:154231780643bc73b121bd976b0ada9dcebb3e065c622954fd099dc299cf44bd"}, +] [package.dependencies] -numpy = ">=1.19.0" packaging = ">=20.0" -pandas = ">=1.2.0" -pyarrow = "*" pydantic = "*" -typing-inspect = ">=0.6.0" -wrapt = "*" +typeguard = "*" +typing_extensions = "*" +typing_inspect = ">=0.6.0" [package.extras] -all = ["frictionless", "dask", "black", "pandas-stubs (<=1.4.3.220807)", "fastapi", "hypothesis (>=5.41.1)", "scipy", "modin", "pyspark (>=3.2.0)", "ray (<=1.7.0)", "shapely", "geopandas", "pyyaml (>=5.1)"] -dask = ["dask"] +all = ["black", "dask[dataframe]", "distributed", "fastapi", "frictionless (<=4.40.8)", "geopandas", "hypothesis (>=6.92.7)", "modin", "pandas-stubs", "polars (>=0.20.0)", "pyspark[connect] (>=3.2.0)", "pyyaml (>=5.1)", "ray", "scipy", "shapely"] +dask = ["dask[dataframe]", "distributed"] fastapi = ["fastapi"] geopandas = ["geopandas", "shapely"] hypotheses = ["scipy"] -io = ["pyyaml (>=5.1)", "black", "frictionless"] -modin = ["modin", "ray (<=1.7.0)", "dask"] -modin-dask = ["modin", "dask"] -modin-ray = ["modin", "ray (<=1.7.0)"] -mypy = ["pandas-stubs (<=1.4.3.220807)"] -pyspark = ["pyspark (>=3.2.0)"] -strategies = ["hypothesis (>=5.41.1)"] +io = ["black", "frictionless (<=4.40.8)", "pyyaml (>=5.1)"] +modin = ["dask[dataframe]", "distributed", "modin", "ray"] +modin-dask = ["dask[dataframe]", "distributed", "modin"] +modin-ray = ["modin", "ray"] +mypy = ["pandas-stubs"] +pandas = ["numpy (>=1.24.4)", "pandas (>=2.1.1)"] +polars = ["polars (>=0.20.0)"] +pyspark = ["pyspark[connect] (>=3.2.0)"] +strategies = ["hypothesis (>=6.92.7)"] [[package]] name = "pandocfilters" -version = "1.5.0" +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.*" +groups = ["dev"] +files = [ + {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, + {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, +] + +[[package]] +name = "pansql" +version = "0.0.1" +description = "sqldf for pandas" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pansql-0.0.1-py3-none-any.whl", hash = "sha256:0c49d8c23e418ac065af767ed350c544c0d6d96dc04e2faa1f8b37851d404988"}, + {file = "pansql-0.0.1.tar.gz", hash = "sha256:61091112442c5d663ea5c042b6327a9b6b94c6687831677dddda46f292532e29"}, +] + +[package.dependencies] +numpy = "*" +pandas = "*" +sqlalchemy = "*" [[package]] name = "parse" -version = "1.19.0" +version = "1.20.2" description = "parse() is the opposite of format()" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "parse-1.20.2-py2.py3-none-any.whl", hash = "sha256:967095588cb802add9177d0c0b6133b5ba33b1ea9007ca800e526f42a85af558"}, + {file = "parse-1.20.2.tar.gz", hash = "sha256:b41d604d16503c79d81af5165155c0b20f6c8d6c559efa66b4b695c3e5a0a0ce"}, +] [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" -category = "dev" optional = false python-versions = ">=3.6" +groups = ["dev"] +files = [ + {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)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pexpect" -version = "4.8.0" +version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\" or python_version < \"3.11\" and sys_platform != \"win32\"" +files = [ + {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, + {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, +] [package.dependencies] ptyprocess = ">=0.5" [[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -category = "dev" -optional = false -python-versions = "*" +name = "pip" +version = "25.1.1" +description = "The PyPA recommended tool for installing Python packages." +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "pip-25.1.1-py3-none-any.whl", hash = "sha256:2913a38a2abf4ea6b64ab507bd9e967f3b53dc1ede74b01b0931e1ce548751af"}, + {file = "pip-25.1.1.tar.gz", hash = "sha256:3de45d411d308d5054c2168185d8da7f9a2cd753dbac8acbfa88a8909ecd9077"}, +] [[package]] name = "platformdirs" -version = "2.5.3" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" -optional = false -python-versions = ">=3.7" +version = "4.3.8" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "platformdirs-4.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, + {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, +] [package.extras] -docs = ["furo (>=2022.9.29)", "proselint (>=0.13)", "sphinx-autodoc-typehints (>=1.19.4)", "sphinx (>=5.3)"] -test = ["appdirs (==1.4.4)", "pytest-cov (>=4)", "pytest-mock (>=3.10)", "pytest (>=7.2)"] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.6.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, +] [package.extras] -testing = ["pytest-benchmark", "pytest"] -dev = ["tox", "pre-commit"] - -[[package]] -name = "ply" -version = "3.11" -description = "Python Lex & Yacc" -category = "main" -optional = false -python-versions = "*" +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] [[package]] 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" +groups = ["main"] +files = [ + {file = "prefixcommons-0.1.12-py3-none-any.whl", hash = "sha256:16dbc0a1f775e003c724f19a694fcfa3174608f5c8b0e893d494cf8098ac7f8b"}, + {file = "prefixcommons-0.1.12.tar.gz", hash = "sha256:22c4e2d37b63487b3ab48f0495b70f14564cb346a15220f23919eb0c1851f69f"}, +] [package.dependencies] click = ">=8.1.3,<9.0.0" @@ -1764,150 +3803,464 @@ requests = ">=2.28.1,<3.0.0" [[package]] name = "prefixmaps" -version = "0.1.4" +version = "0.2.6" description = "A python library for retrieving semantic prefix maps" -category = "main" optional = false -python-versions = ">=3.7.6,<4.0.0" +python-versions = "<4.0,>=3.8" +groups = ["main"] +files = [ + {file = "prefixmaps-0.2.6-py3-none-any.whl", hash = "sha256:f6cef28a7320fc6337cf411be212948ce570333a0ce958940ef684c7fb192a62"}, + {file = "prefixmaps-0.2.6.tar.gz", hash = "sha256:7421e1244eea610217fa1ba96c9aebd64e8162a930dc0626207cd8bf62ecf4b9"}, +] [package.dependencies] -importlib-metadata = ">=4.12.0,<5.0.0" +curies = ">=0.5.3" pyyaml = ">=5.3.1" [[package]] name = "prometheus-client" -version = "0.15.0" +version = "0.22.0" description = "Python client for the Prometheus monitoring system." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "prometheus_client-0.22.0-py3-none-any.whl", hash = "sha256:c8951bbe64e62b96cd8e8f5d917279d1b9b91ab766793f33d4dce6c228558713"}, + {file = "prometheus_client-0.22.0.tar.gz", hash = "sha256:18da1d2241ac2d10c8d2110f13eedcd5c7c0c8af18c926e8731f04fc10cd575c"}, +] [package.extras] twisted = ["twisted"] [[package]] name = "prompt-toolkit" -version = "3.0.32" +version = "3.0.51" description = "Library for building powerful interactive command lines in Python" -category = "dev" optional = false -python-versions = ">=3.6.2" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, +] [package.dependencies] wcwidth = "*" [[package]] name = "pronto" -version = "2.5.1" +version = "2.7.0" description = "Python frontend to ontologies." -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "pronto-2.7.0-py3-none-any.whl", hash = "sha256:da4fb4a6fd67ed7958cc3fc02ad0360ef81e48d2282b8e3fb9715209fcc64952"}, + {file = "pronto-2.7.0.tar.gz", hash = "sha256:8454b89094f20eb74b3dadfd23d09ac3722a47d40c6ef3f6a1b462bc3faa030b"}, +] [package.dependencies] -chardet = ">=3.0,<5.0" -fastobo = ">=0.12.1,<0.13.0" -networkx = ">=2.3,<3.0" +chardet = ">=5.0,<6.0" +fastobo = ">=0.13.0,<0.14.0" +networkx = ">=2.3,<4.0" python-dateutil = ">=2.8,<3.0" +[[package]] +name = "proto-plus" +version = "1.26.1" +description = "Beautiful, Pythonic protocol buffers" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "proto_plus-1.26.1-py3-none-any.whl", hash = "sha256:13285478c2dcf2abb829db158e1047e2f1e8d63a077d94263c2b88b043c75a66"}, + {file = "proto_plus-1.26.1.tar.gz", hash = "sha256:21a515a4c4c0088a773899e23c7bbade3d18f9c66c73edd4c7ee3816bc96a012"}, +] + +[package.dependencies] +protobuf = ">=3.19.0,<7.0.0" + +[package.extras] +testing = ["google-api-core (>=1.31.5)"] + +[[package]] +name = "protobuf" +version = "6.31.0" +description = "" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "protobuf-6.31.0-cp310-abi3-win32.whl", hash = "sha256:10bd62802dfa0588649740a59354090eaf54b8322f772fbdcca19bc78d27f0d6"}, + {file = "protobuf-6.31.0-cp310-abi3-win_amd64.whl", hash = "sha256:3e987c99fd634be8347246a02123250f394ba20573c953de133dc8b2c107dd71"}, + {file = "protobuf-6.31.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:2c812f0f96ceb6b514448cefeb1df54ec06dde456783f5099c0e2f8a0f2caa89"}, + {file = "protobuf-6.31.0-cp39-abi3-manylinux2014_aarch64.whl", hash = "sha256:67ce50195e4e584275623b8e6bc6d3d3dfd93924bf6116b86b3b8975ab9e4571"}, + {file = "protobuf-6.31.0-cp39-abi3-manylinux2014_x86_64.whl", hash = "sha256:5353e38844168a327acd2b2aa440044411cd8d1b6774d5701008bd1dba067c79"}, + {file = "protobuf-6.31.0-cp39-cp39-win32.whl", hash = "sha256:96d8da25c83b11db5fe9e0376351ce25e7205e13224d939e097b6f82a72af824"}, + {file = "protobuf-6.31.0-cp39-cp39-win_amd64.whl", hash = "sha256:00a873c06efdfb854145d9ded730b09cf57d206075c38132674093370e2edabb"}, + {file = "protobuf-6.31.0-py3-none-any.whl", hash = "sha256:6ac2e82556e822c17a8d23aa1190bbc1d06efb9c261981da95c71c9da09e9e23"}, + {file = "protobuf-6.31.0.tar.gz", hash = "sha256:314fab1a6a316469dc2dd46f993cbbe95c861ea6807da910becfe7475bc26ffe"}, +] + [[package]] name = "psutil" -version = "5.9.4" -description = "Cross-platform lib for process and system monitoring in Python." -category = "dev" +version = "7.0.0" +description = "Cross-platform lib for process and system monitoring in Python. NOTE: the syntax of this script MUST be kept compatible with Python 2.7." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" +groups = ["dev"] +files = [ + {file = "psutil-7.0.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:101d71dc322e3cffd7cea0650b09b3d08b8e7c4109dd6809fe452dfd00e58b25"}, + {file = "psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1fcee592b4c6f146991ca55919ea3d1f8926497a713ed7faaf8225e174581e91"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4b1388a4f6875d7e2aff5c4ca1cc16c545ed41dd8bb596cefea80111db353a34"}, + {file = "psutil-7.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5f098451abc2828f7dc6b58d44b532b22f2088f4999a937557b603ce72b1993"}, + {file = "psutil-7.0.0-cp36-cp36m-win32.whl", hash = "sha256:84df4eb63e16849689f76b1ffcb36db7b8de703d1bc1fe41773db487621b6c17"}, + {file = "psutil-7.0.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1e744154a6580bc968a0195fd25e80432d3afec619daf145b9e5ba16cc1d688e"}, + {file = "psutil-7.0.0-cp37-abi3-win32.whl", hash = "sha256:ba3fcef7523064a6c9da440fc4d6bd07da93ac726b5733c29027d7dc95b39d99"}, + {file = "psutil-7.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:4cf3d4eb1aa9b348dec30105c55cd9b7d4629285735a102beb4441e38db90553"}, + {file = "psutil-7.0.0.tar.gz", hash = "sha256:7be9c3eba38beccb6495ea33afd982a44074b78f28c434a1f51cc07fd315c456"}, +] [package.extras] -test = ["ipaddress", "mock", "enum34", "pywin32", "wmi"] +dev = ["abi3audit", "black (==24.10.0)", "check-manifest", "coverage", "packaging", "pylint", "pyperf", "pypinfo", "pytest", "pytest-cov", "pytest-xdist", "requests", "rstcheck", "ruff", "setuptools", "sphinx", "sphinx_rtd_theme", "toml-sort", "twine", "virtualenv", "vulture", "wheel"] +test = ["pytest", "pytest-xdist", "setuptools"] [[package]] name = "psycopg2-binary" -version = "2.9.5" +version = "2.9.10" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" -optional = false -python-versions = ">=3.6" +optional = true +python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"postgres\"" +files = [ + {file = "psycopg2-binary-2.9.10.tar.gz", hash = "sha256:4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:0ea8e3d0ae83564f2fc554955d327fa081d065c8ca5cc6d2abb643e2c9c1200f"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:3e9c76f0ac6f92ecfc79516a8034a544926430f7b080ec5a0537bca389ee0906"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ad26b467a405c798aaa1458ba09d7e2b6e5f96b1ce0ac15d82fd9f95dc38a92"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:270934a475a0e4b6925b5f804e3809dd5f90f8613621d062848dd82f9cd62007"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:48b338f08d93e7be4ab2b5f1dbe69dc5e9ef07170fe1f86514422076d9c010d0"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f4152f8f76d2023aac16285576a9ecd2b11a9895373a1f10fd9db54b3ff06b4"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:32581b3020c72d7a421009ee1c6bf4a131ef5f0a968fab2e2de0c9d2bb4577f1"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2ce3e21dc3437b1d960521eca599d57408a695a0d3c26797ea0f72e834c7ffe5"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e984839e75e0b60cfe75e351db53d6db750b00de45644c5d1f7ee5d1f34a1ce5"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3c4745a90b78e51d9ba06e2088a2fe0c693ae19cc8cb051ccda44e8df8a6eb53"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-win32.whl", hash = "sha256:e5720a5d25e3b99cd0dc5c8a440570469ff82659bb09431c1439b92caf184d3b"}, + {file = "psycopg2_binary-2.9.10-cp310-cp310-win_amd64.whl", hash = "sha256:3c18f74eb4386bf35e92ab2354a12c17e5eb4d9798e4c0ad3a00783eae7cd9f1"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:04392983d0bb89a8717772a193cfaac58871321e3ec69514e1c4e0d4957b5aff"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:1a6784f0ce3fec4edc64e985865c17778514325074adf5ad8f80636cd029ef7c"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5f86c56eeb91dc3135b3fd8a95dc7ae14c538a2f3ad77a19645cf55bab1799c"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b3d2491d4d78b6b14f76881905c7a8a8abcf974aad4a8a0b065273a0ed7a2cb"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2286791ececda3a723d1910441c793be44625d86d1a4e79942751197f4d30341"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:512d29bb12608891e349af6a0cccedce51677725a921c07dba6342beaf576f9a"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:5a507320c58903967ef7384355a4da7ff3f28132d679aeb23572753cbf2ec10b"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6d4fa1079cab9018f4d0bd2db307beaa612b0d13ba73b5c6304b9fe2fb441ff7"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:851485a42dbb0bdc1edcdabdb8557c09c9655dfa2ca0460ff210522e073e319e"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:35958ec9e46432d9076286dda67942ed6d968b9c3a6a2fd62b48939d1d78bf68"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-win32.whl", hash = "sha256:ecced182e935529727401b24d76634a357c71c9275b356efafd8a2a91ec07392"}, + {file = "psycopg2_binary-2.9.10-cp311-cp311-win_amd64.whl", hash = "sha256:ee0e8c683a7ff25d23b55b11161c2663d4b099770f6085ff0a20d4505778d6b4"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:880845dfe1f85d9d5f7c412efea7a08946a46894537e4e5d091732eb1d34d9a0"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9440fa522a79356aaa482aa4ba500b65f28e5d0e63b801abf6aa152a29bd842a"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3923c1d9870c49a2d44f795df0c889a22380d36ef92440ff618ec315757e539"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b2c956c028ea5de47ff3a8d6b3cc3330ab45cf0b7c3da35a2d6ff8420896526"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f758ed67cab30b9a8d2833609513ce4d3bd027641673d4ebc9c067e4d208eec1"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8cd9b4f2cfab88ed4a9106192de509464b75a906462fb846b936eabe45c2063e"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dc08420625b5a20b53551c50deae6e231e6371194fa0651dbe0fb206452ae1f"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d7cd730dfa7c36dbe8724426bf5612798734bff2d3c3857f36f2733f5bfc7c00"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:155e69561d54d02b3c3209545fb08938e27889ff5a10c19de8d23eb5a41be8a5"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3cc28a6fd5a4a26224007712e79b81dbaee2ffb90ff406256158ec4d7b52b47"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-win32.whl", hash = "sha256:ec8a77f521a17506a24a5f626cb2aee7850f9b69a0afe704586f63a464f3cd64"}, + {file = "psycopg2_binary-2.9.10-cp312-cp312-win_amd64.whl", hash = "sha256:18c5ee682b9c6dd3696dad6e54cc7ff3a1a9020df6a5c0f861ef8bfd338c3ca0"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:26540d4a9a4e2b096f1ff9cce51253d0504dca5a85872c7f7be23be5a53eb18d"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e217ce4d37667df0bc1c397fdcd8de5e81018ef305aed9415c3b093faaeb10fb"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:245159e7ab20a71d989da00f280ca57da7641fa2cdcf71749c193cea540a74f7"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c4ded1a24b20021ebe677b7b08ad10bf09aac197d6943bfe6fec70ac4e4690d"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3abb691ff9e57d4a93355f60d4f4c1dd2d68326c968e7db17ea96df3c023ef73"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8608c078134f0b3cbd9f89b34bd60a943b23fd33cc5f065e8d5f840061bd0673"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:230eeae2d71594103cd5b93fd29d1ace6420d0b86f4778739cb1a5a32f607d1f"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:bb89f0a835bcfc1d42ccd5f41f04870c1b936d8507c6df12b7737febc40f0909"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f0c2d907a1e102526dd2986df638343388b94c33860ff3bbe1384130828714b1"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8157bed2f51db683f31306aa497311b560f2265998122abe1dce6428bd86567"}, + {file = "psycopg2_binary-2.9.10-cp313-cp313-win_amd64.whl", hash = "sha256:27422aa5f11fbcd9b18da48373eb67081243662f9b46e6fd07c3eb46e4535142"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:eb09aa7f9cecb45027683bb55aebaaf45a0df8bf6de68801a6afdc7947bb09d4"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b73d6d7f0ccdad7bc43e6d34273f70d587ef62f824d7261c4ae9b8b1b6af90e8"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ce5ab4bf46a211a8e924d307c1b1fcda82368586a19d0a24f8ae166f5c784864"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:056470c3dc57904bbf63d6f534988bafc4e970ffd50f6271fc4ee7daad9498a5"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73aa0e31fa4bb82578f3a6c74a73c273367727de397a7a0f07bd83cbea696baa"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8de718c0e1c4b982a54b41779667242bc630b2197948405b7bd8ce16bcecac92"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5c370b1e4975df846b0277b4deba86419ca77dbc25047f535b0bb03d1a544d44"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ffe8ed017e4ed70f68b7b371d84b7d4a790368db9203dfc2d222febd3a9c8863"}, + {file = "psycopg2_binary-2.9.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:8aecc5e80c63f7459a1a2ab2c64df952051df196294d9f739933a9f6687e86b3"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:7a813c8bdbaaaab1f078014b9b0b13f5de757e2b5d9be6403639b298a04d218b"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d00924255d7fc916ef66e4bf22f354a940c67179ad3fd7067d7a0a9c84d2fbfc"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7559bce4b505762d737172556a4e6ea8a9998ecac1e39b5233465093e8cee697"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8b58f0a96e7a1e341fc894f62c1177a7c83febebb5ff9123b579418fdc8a481"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b269105e59ac96aba877c1707c600ae55711d9dcd3fc4b5012e4af68e30c648"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:79625966e176dc97ddabc142351e0409e28acf4660b88d1cf6adb876d20c490d"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8aabf1c1a04584c168984ac678a668094d831f152859d06e055288fa515e4d30"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:19721ac03892001ee8fdd11507e6a2e01f4e37014def96379411ca99d78aeb2c"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7f5d859928e635fa3ce3477704acee0f667b3a3d3e4bb109f2b18d4005f38287"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-win32.whl", hash = "sha256:3216ccf953b3f267691c90c6fe742e45d890d8272326b4a8b20850a03d05b7b8"}, + {file = "psycopg2_binary-2.9.10-cp39-cp39-win_amd64.whl", hash = "sha256:30e34c4e97964805f715206c7b789d54a78b70f3ff19fbe590104b71c45600e5"}, +] [[package]] name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +markers = "os_name != \"nt\" or sys_platform != \"win32\" and sys_platform != \"emscripten\" or sys_platform != \"win32\" and python_version < \"3.11\"" +files = [ + {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, + {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, +] [[package]] name = "pure-eval" -version = "0.2.2" +version = "0.2.3" description = "Safely evaluate AST nodes without side effects" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, +] [package.extras] tests = ["pytest"] [[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "main" +name = "puremagic" +version = "1.29" +description = "Pure python implementation of magic file detection" +optional = true +python-versions = "*" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "puremagic-1.29-py3-none-any.whl", hash = "sha256:2c3cfcde77f0b1560f1898f627bd388421d2bd64ec94d8d25f400f7742a4f109"}, + {file = "puremagic-1.29.tar.gz", hash = "sha256:67c115db3f63d43b13433860917b11e2b767e5eaec696a491be2fb544f224f7a"}, +] + +[[package]] +name = "pyasn1" +version = "0.6.1" +description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, + {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, +] [[package]] -name = "pyarrow" -version = "10.0.0" -description = "Python library for Apache Arrow" -category = "main" +name = "pyasn1-modules" +version = "0.4.2" +description = "A collection of ASN.1-based protocols modules" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pyasn1_modules-0.4.2-py3-none-any.whl", hash = "sha256:29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a"}, + {file = "pyasn1_modules-0.4.2.tar.gz", hash = "sha256:677091de870a80aae844b1ca6134f54652fa2c8c5a52aa396440ac3106e941e6"}, +] [package.dependencies] -numpy = ">=1.16.6" +pyasn1 = ">=0.6.1,<0.7.0" [[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" +groups = ["dev"] +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] [[package]] name = "pydantic" -version = "1.10.2" -description = "Data validation and settings management using python type hints" -category = "main" -optional = false -python-versions = ">=3.7" +version = "2.11.4" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic-2.11.4-py3-none-any.whl", hash = "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb"}, + {file = "pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d"}, +] [package.dependencies] -typing-extensions = ">=4.1.0" +annotated-types = ">=0.6.0" +email-validator = {version = ">=2.0.0", optional = true, markers = "extra == \"email\""} +pydantic-core = "2.33.2" +typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" [package.extras] -dotenv = ["python-dotenv (>=0.10.4)"] -email = ["email-validator (>=1.0.3)"] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic-core" +version = "2.33.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, + {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + +[[package]] +name = "pydbml" +version = "1.2.0" +description = "Python parser and builder for DBML" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "pydbml-1.2.0-py3-none-any.whl", hash = "sha256:dc663786647c97bbb6ef61f7a5becd5e7bb304770bb3e2e01d3f43748d33064f"}, + {file = "pydbml-1.2.0.tar.gz", hash = "sha256:c4fdb602f62b42e2b28674ea45e72f3d0e88bc6d186ea3a683685c41662ece14"}, +] + +[package.dependencies] +pyparsing = ">=3.0.0" [[package]] name = "pygments" -version = "2.13.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, +] [package.extras] -plugins = ["importlib-metadata"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyjsg" version = "0.11.10" description = "Python JSON Schema Grammar interpreter" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "PyJSG-0.11.10-py3-none-any.whl", hash = "sha256:10af60ff42219be7e85bf7f11c19b648715b0b29eb2ddbd269e87069a7c3f26d"}, + {file = "PyJSG-0.11.10.tar.gz", hash = "sha256:4bd6e3ff2833fa2b395bbe803a2d72a5f0bab5b7285bccd0da1a1bc0aee88bfa"}, +] [package.dependencies] antlr4-python3-runtime = ">=4.9.3,<4.10.0" @@ -1915,30 +4268,46 @@ jsonasobj = ">=1.2.1" [[package]] name = "pyparsing" -version = "3.0.9" +version = "3.2.3" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false -python-versions = ">=3.6.8" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pyparsing-3.2.3-py3-none-any.whl", hash = "sha256:a749938e02d6fd0b59b356ca504a24982314bb090c383e3cf201c95ef7e2bfcf"}, + {file = "pyparsing-3.2.3.tar.gz", hash = "sha256:b9c13f1ab8b3b542f72e28f634bad4de758ab3ce4546e4301970ad6fa77c38be"}, +] [package.extras] -diagrams = ["railroad-diagrams", "jinja2"] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] -name = "pyrsistent" -version = "0.19.2" -description = "Persistent/Functional/Immutable data structures" -category = "main" -optional = false -python-versions = ">=3.7" +name = "pyreadline3" +version = "3.5.4" +description = "A python implementation of GNU readline." +optional = true +python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"llm\" and sys_platform == \"win32\"" +files = [ + {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, + {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, +] + +[package.extras] +dev = ["build", "flake8", "mypy", "pytest", "twine"] [[package]] name = "pyshex" version = "0.8.1" description = "Python ShEx Implementation" -category = "main" optional = false python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "PyShEx-0.8.1-py3-none-any.whl", hash = "sha256:6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a"}, + {file = "PyShEx-0.8.1.tar.gz", hash = "sha256:3c5c4d45fe27faaadae803cb008c41acf8ee784da7868b04fd84967e75be70d0"}, +] [package.dependencies] cfgraph = ">=0.2.1" @@ -1955,9 +4324,13 @@ urllib3 = "*" name = "pyshexc" version = "0.9.1" description = "PyShExC - Python ShEx compiler" -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "PyShExC-0.9.1-py2.py3-none-any.whl", hash = "sha256:efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028"}, + {file = "PyShExC-0.9.1.tar.gz", hash = "sha256:35a9975d4b9afeb20ef710fb6680871756381d0c39fbb5470b3b506581a304d3"}, +] [package.dependencies] antlr4-python3-runtime = ">=4.9.3,<4.10.0" @@ -1967,218 +4340,441 @@ pyjsg = ">=0.11.10" rdflib-shim = "*" shexjsg = ">=0.8.1" +[[package]] +name = "pysolr" +version = "3.10.0" +description = "Lightweight Python client for Apache Solr" +optional = false +python-versions = "*" +groups = ["main"] +files = [ + {file = "pysolr-3.10.0.tar.gz", hash = "sha256:127b4a2dd169234acb1586643a6cd1e3e94b917921e69bf569d7b2a2aa0ef409"}, +] + +[package.dependencies] +requests = ">=2.9.1" +setuptools = "*" + +[package.extras] +solrcloud = ["kazoo (>=2.5.0)"] + [[package]] name = "pystow" -version = "0.4.7" -description = "Easily pick a place to store data for your python package." -category = "main" +version = "0.7.0" +description = "Easily pick a place to store data for your Python code" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "pystow-0.7.0-py3-none-any.whl", hash = "sha256:5b6ed4b322a625f0163471f76989bae3b870fd20d64fed55a9150c68d34eb39d"}, + {file = "pystow-0.7.0.tar.gz", hash = "sha256:5f8935a76d5f03b0645bedbe5dfcb3b777a0e755fda3e3fd3e4be7a1d2d058d0"}, +] [package.dependencies] click = "*" requests = "*" tqdm = "*" +typing-extensions = "*" [package.extras] aws = ["boto3"] -docs = ["sphinx", "sphinx-rtd-theme", "sphinx-click", "sphinx-autodoc-typehints", "sphinx-automodapi"] +docs = ["sphinx (>=8)", "sphinx-automodapi", "sphinx-click", "sphinx-rtd-theme (>=3.0)"] pandas = ["pandas"] rdf = ["rdflib"] -tests = ["coverage", "pytest", "requests-file"] +tests = ["coverage[toml]", "pytest", "requests-file"] xml = ["lxml"] [[package]] name = "pytest" -version = "7.2.0" +version = "8.3.5" description = "pytest: simple powerful testing with Python" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "pytest-8.3.5-py3-none-any.whl", hash = "sha256:c69214aa47deac29fad6c2a4f590b9c4a9fdb16a403176fe154b79c0b4d4d820"}, + {file = "pytest-8.3.5.tar.gz", hash = "sha256:f4efe70cc14e511565ac476b57c279e12a855b11f48f212af1080ef2263d3845"}, +] [package.dependencies] -attrs = ">=19.2.0" colorama = {version = "*", markers = "sys_platform == \"win32\""} exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +pluggy = ">=1.5,<2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] 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 = "*" +groups = ["main"] +files = [ + {file = "pytest-logging-2015.11.4.tar.gz", hash = "sha256:cec5c85ecf18aab7b2ead5498a31b9f758680ef5a902b9054ab3f2bdbb77c896"}, +] [package.dependencies] pytest = ">=2.8.1" [[package]] name = "python-dateutil" -version = "2.8.2" +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" +groups = ["main", "dev"] +files = [ + {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, + {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, +] [package.dependencies] six = ">=1.5" +[[package]] +name = "python-json-logger" +version = "3.3.0" +description = "JSON Log Formatter for the Python Logging Package" +optional = false +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "python_json_logger-3.3.0-py3-none-any.whl", hash = "sha256:dd980fae8cffb24c13caf6e158d3d61c0d6d22342f932cb6e9deedab3d35eec7"}, + {file = "python_json_logger-3.3.0.tar.gz", hash = "sha256:12b7e74b17775e7d565129296105bbe3910842d9d0eb083fc83a6a617aa8df84"}, +] + +[package.dependencies] +typing_extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +dev = ["backports.zoneinfo ; python_version < \"3.9\"", "black", "build", "freezegun", "mdx_truly_sane_lists", "mike", "mkdocs", "mkdocs-awesome-pages-plugin", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-material (>=8.5)", "mkdocstrings[python]", "msgspec ; implementation_name != \"pypy\"", "mypy", "orjson ; implementation_name != \"pypy\"", "pylint", "pytest", "tzdata", "validate-pyproject[all]"] + +[[package]] +name = "python-ulid" +version = "3.0.0" +description = "Universally unique lexicographically sortable identifier" +optional = true +python-versions = ">=3.9" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "python_ulid-3.0.0-py3-none-any.whl", hash = "sha256:e4c4942ff50dbd79167ad01ac725ec58f924b4018025ce22c858bfcff99a5e31"}, + {file = "python_ulid-3.0.0.tar.gz", hash = "sha256:e50296a47dc8209d28629a22fc81ca26c00982c78934bd7766377ba37ea49a9f"}, +] + +[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 = "*" +groups = ["main"] +files = [ + {file = "PyTrie-0.4.0-py3-none-any.whl", hash = "sha256:f687c224ee8c66cda8e8628a903011b692635ffbb08d4b39c5f92b18eb78c950"}, + {file = "PyTrie-0.4.0.tar.gz", hash = "sha256:8f4488f402d3465993fb6b6efa09866849ed8cda7903b50647b7d0342b805379"}, +] [package.dependencies] sortedcontainers = "*" [[package]] name = "pytz" -version = "2022.6" +version = "2025.2" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, +] [[package]] name = "pywin32" -version = "305" +version = "310" description = "Python for Window Extensions" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\"" +files = [ + {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, + {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, + {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, + {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, + {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, + {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, + {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, + {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, + {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, + {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, + {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, + {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, + {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, + {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, + {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, + {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, +] [[package]] name = "pywinpty" -version = "2.0.9" +version = "2.0.15" description = "Pseudo terminal support for Windows from Python." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["dev"] +markers = "os_name == \"nt\"" +files = [ + {file = "pywinpty-2.0.15-cp310-cp310-win_amd64.whl", hash = "sha256:8e7f5de756a615a38b96cd86fa3cd65f901ce54ce147a3179c45907fa11b4c4e"}, + {file = "pywinpty-2.0.15-cp311-cp311-win_amd64.whl", hash = "sha256:9a6bcec2df2707aaa9d08b86071970ee32c5026e10bcc3cc5f6f391d85baf7ca"}, + {file = "pywinpty-2.0.15-cp312-cp312-win_amd64.whl", hash = "sha256:83a8f20b430bbc5d8957249f875341a60219a4e971580f2ba694fbfb54a45ebc"}, + {file = "pywinpty-2.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:ab5920877dd632c124b4ed17bc6dd6ef3b9f86cd492b963ffdb1a67b85b0f408"}, + {file = "pywinpty-2.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:a4560ad8c01e537708d2790dbe7da7d986791de805d89dd0d3697ca59e9e4901"}, + {file = "pywinpty-2.0.15-cp39-cp39-win_amd64.whl", hash = "sha256:d261cd88fcd358cfb48a7ca0700db3e1c088c9c10403c9ebc0d8a8b57aa6a117"}, + {file = "pywinpty-2.0.15.tar.gz", hash = "sha256:312cf39153a8736c617d45ce8b6ad6cd2107de121df91c455b10ce6bba7a39b2"}, +] [[package]] name = "pyyaml" -version = "6.0" +version = "6.0.2" description = "YAML parser and emitter for Python" -category = "main" -optional = false -python-versions = ">=3.6" - -[[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" - -[package.dependencies] -pyyaml = "*" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, +] [[package]] name = "pyzmq" -version = "24.0.1" +version = "26.4.0" description = "Python bindings for 0MQ" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "pyzmq-26.4.0-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:0329bdf83e170ac133f44a233fc651f6ed66ef8e66693b5af7d54f45d1ef5918"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:398a825d2dea96227cf6460ce0a174cf7657d6f6827807d4d1ae9d0f9ae64315"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6d52d62edc96787f5c1dfa6c6ccff9b581cfae5a70d94ec4c8da157656c73b5b"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1410c3a3705db68d11eb2424d75894d41cff2f64d948ffe245dd97a9debfebf4"}, + {file = "pyzmq-26.4.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:7dacb06a9c83b007cc01e8e5277f94c95c453c5851aac5e83efe93e72226353f"}, + {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6bab961c8c9b3a4dc94d26e9b2cdf84de9918931d01d6ff38c721a83ab3c0ef5"}, + {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7a5c09413b924d96af2aa8b57e76b9b0058284d60e2fc3730ce0f979031d162a"}, + {file = "pyzmq-26.4.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7d489ac234d38e57f458fdbd12a996bfe990ac028feaf6f3c1e81ff766513d3b"}, + {file = "pyzmq-26.4.0-cp310-cp310-win32.whl", hash = "sha256:dea1c8db78fb1b4b7dc9f8e213d0af3fc8ecd2c51a1d5a3ca1cde1bda034a980"}, + {file = "pyzmq-26.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:fa59e1f5a224b5e04dc6c101d7186058efa68288c2d714aa12d27603ae93318b"}, + {file = "pyzmq-26.4.0-cp310-cp310-win_arm64.whl", hash = "sha256:a651fe2f447672f4a815e22e74630b6b1ec3a1ab670c95e5e5e28dcd4e69bbb5"}, + {file = "pyzmq-26.4.0-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:bfcf82644c9b45ddd7cd2a041f3ff8dce4a0904429b74d73a439e8cab1bd9e54"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9bcae3979b2654d5289d3490742378b2f3ce804b0b5fd42036074e2bf35b030"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccdff8ac4246b6fb60dcf3982dfaeeff5dd04f36051fe0632748fc0aa0679c01"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4550af385b442dc2d55ab7717837812799d3674cb12f9a3aa897611839c18e9e"}, + {file = "pyzmq-26.4.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:2f9f7ffe9db1187a253fca95191854b3fda24696f086e8789d1d449308a34b88"}, + {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3709c9ff7ba61589b7372923fd82b99a81932b592a5c7f1a24147c91da9a68d6"}, + {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f8f3c30fb2d26ae5ce36b59768ba60fb72507ea9efc72f8f69fa088450cff1df"}, + {file = "pyzmq-26.4.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:382a4a48c8080e273427fc692037e3f7d2851959ffe40864f2db32646eeb3cef"}, + {file = "pyzmq-26.4.0-cp311-cp311-win32.whl", hash = "sha256:d56aad0517d4c09e3b4f15adebba8f6372c5102c27742a5bdbfc74a7dceb8fca"}, + {file = "pyzmq-26.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:963977ac8baed7058c1e126014f3fe58b3773f45c78cce7af5c26c09b6823896"}, + {file = "pyzmq-26.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:c0c8e8cadc81e44cc5088fcd53b9b3b4ce9344815f6c4a03aec653509296fae3"}, + {file = "pyzmq-26.4.0-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:5227cb8da4b6f68acfd48d20c588197fd67745c278827d5238c707daf579227b"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1c07a7fa7f7ba86554a2b1bef198c9fed570c08ee062fd2fd6a4dcacd45f905"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae775fa83f52f52de73183f7ef5395186f7105d5ed65b1ae65ba27cb1260de2b"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66c760d0226ebd52f1e6b644a9e839b5db1e107a23f2fcd46ec0569a4fdd4e63"}, + {file = "pyzmq-26.4.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ef8c6ecc1d520debc147173eaa3765d53f06cd8dbe7bd377064cdbc53ab456f5"}, + {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3150ef4084e163dec29ae667b10d96aad309b668fac6810c9e8c27cf543d6e0b"}, + {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:4448c9e55bf8329fa1dcedd32f661bf611214fa70c8e02fee4347bc589d39a84"}, + {file = "pyzmq-26.4.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e07dde3647afb084d985310d067a3efa6efad0621ee10826f2cb2f9a31b89d2f"}, + {file = "pyzmq-26.4.0-cp312-cp312-win32.whl", hash = "sha256:ba034a32ecf9af72adfa5ee383ad0fd4f4e38cdb62b13624278ef768fe5b5b44"}, + {file = "pyzmq-26.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:056a97aab4064f526ecb32f4343917a4022a5d9efb6b9df990ff72e1879e40be"}, + {file = "pyzmq-26.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:2f23c750e485ce1eb639dbd576d27d168595908aa2d60b149e2d9e34c9df40e0"}, + {file = "pyzmq-26.4.0-cp313-cp313-macosx_10_15_universal2.whl", hash = "sha256:c43fac689880f5174d6fc864857d1247fe5cfa22b09ed058a344ca92bf5301e3"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902aca7eba477657c5fb81c808318460328758e8367ecdd1964b6330c73cae43"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5e48a830bfd152fe17fbdeaf99ac5271aa4122521bf0d275b6b24e52ef35eb6"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31be2b6de98c824c06f5574331f805707c667dc8f60cb18580b7de078479891e"}, + {file = "pyzmq-26.4.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:6332452034be001bbf3206ac59c0d2a7713de5f25bb38b06519fc6967b7cf771"}, + {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:da8c0f5dd352136853e6a09b1b986ee5278dfddfebd30515e16eae425c872b30"}, + {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:f4ccc1a0a2c9806dda2a2dd118a3b7b681e448f3bb354056cad44a65169f6d86"}, + {file = "pyzmq-26.4.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:1c0b5fceadbab461578daf8d1dcc918ebe7ddd2952f748cf30c7cf2de5d51101"}, + {file = "pyzmq-26.4.0-cp313-cp313-win32.whl", hash = "sha256:28e2b0ff5ba4b3dd11062d905682bad33385cfa3cc03e81abd7f0822263e6637"}, + {file = "pyzmq-26.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:23ecc9d241004c10e8b4f49d12ac064cd7000e1643343944a10df98e57bc544b"}, + {file = "pyzmq-26.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:1edb0385c7f025045d6e0f759d4d3afe43c17a3d898914ec6582e6f464203c08"}, + {file = "pyzmq-26.4.0-cp313-cp313t-macosx_10_15_universal2.whl", hash = "sha256:93a29e882b2ba1db86ba5dd5e88e18e0ac6b627026c5cfbec9983422011b82d4"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb45684f276f57110bb89e4300c00f1233ca631f08f5f42528a5c408a79efc4a"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f72073e75260cb301aad4258ad6150fa7f57c719b3f498cb91e31df16784d89b"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be37e24b13026cfedd233bcbbccd8c0bcd2fdd186216094d095f60076201538d"}, + {file = "pyzmq-26.4.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:237b283044934d26f1eeff4075f751b05d2f3ed42a257fc44386d00df6a270cf"}, + {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:b30f862f6768b17040929a68432c8a8be77780317f45a353cb17e423127d250c"}, + {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:c80fcd3504232f13617c6ab501124d373e4895424e65de8b72042333316f64a8"}, + {file = "pyzmq-26.4.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:26a2a7451606b87f67cdeca2c2789d86f605da08b4bd616b1a9981605ca3a364"}, + {file = "pyzmq-26.4.0-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:831cc53bf6068d46d942af52fa8b0b9d128fb39bcf1f80d468dc9a3ae1da5bfb"}, + {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:51d18be6193c25bd229524cfac21e39887c8d5e0217b1857998dfbef57c070a4"}, + {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:445c97854204119ae2232503585ebb4fa7517142f71092cb129e5ee547957a1f"}, + {file = "pyzmq-26.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:807b8f4ad3e6084412c0f3df0613269f552110fa6fb91743e3e306223dbf11a6"}, + {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:c01d109dd675ac47fa15c0a79d256878d898f90bc10589f808b62d021d2e653c"}, + {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0a294026e28679a8dd64c922e59411cb586dad307661b4d8a5c49e7bbca37621"}, + {file = "pyzmq-26.4.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:22c8dd677274af8dfb1efd05006d6f68fb2f054b17066e308ae20cb3f61028cf"}, + {file = "pyzmq-26.4.0-cp38-cp38-win32.whl", hash = "sha256:14fc678b696bc42c14e2d7f86ac4e97889d5e6b94d366ebcb637a768d2ad01af"}, + {file = "pyzmq-26.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:d1ef0a536662bbbdc8525f7e2ef19e74123ec9c4578e0582ecd41aedc414a169"}, + {file = "pyzmq-26.4.0-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:a88643de8abd000ce99ca72056a1a2ae15881ee365ecb24dd1d9111e43d57842"}, + {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0a744ce209ecb557406fb928f3c8c55ce79b16c3eeb682da38ef5059a9af0848"}, + {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9434540f333332224ecb02ee6278b6c6f11ea1266b48526e73c903119b2f420f"}, + {file = "pyzmq-26.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6c6f0a23e55cd38d27d4c89add963294ea091ebcb104d7fdab0f093bc5abb1c"}, + {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6145df55dc2309f6ef72d70576dcd5aabb0fd373311613fe85a5e547c722b780"}, + {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2ea81823840ef8c56e5d2f9918e4d571236294fea4d1842b302aebffb9e40997"}, + {file = "pyzmq-26.4.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc2abc385dc37835445abe206524fbc0c9e3fce87631dfaa90918a1ba8f425eb"}, + {file = "pyzmq-26.4.0-cp39-cp39-win32.whl", hash = "sha256:41a2508fe7bed4c76b4cf55aacfb8733926f59d440d9ae2b81ee8220633b4d12"}, + {file = "pyzmq-26.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:d4000e8255d6cbce38982e5622ebb90823f3409b7ffe8aeae4337ef7d6d2612a"}, + {file = "pyzmq-26.4.0-cp39-cp39-win_arm64.whl", hash = "sha256:b4f6919d9c120488246bdc2a2f96662fa80d67b35bd6d66218f457e722b3ff64"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:98d948288ce893a2edc5ec3c438fe8de2daa5bbbd6e2e865ec5f966e237084ba"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9f34f5c9e0203ece706a1003f1492a56c06c0632d86cb77bcfe77b56aacf27b"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80c9b48aef586ff8b698359ce22f9508937c799cc1d2c9c2f7c95996f2300c94"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3f2a5b74009fd50b53b26f65daff23e9853e79aa86e0aa08a53a7628d92d44a"}, + {file = "pyzmq-26.4.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:61c5f93d7622d84cb3092d7f6398ffc77654c346545313a3737e266fc11a3beb"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4478b14cb54a805088299c25a79f27eaf530564a7a4f72bf432a040042b554eb"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a28ac29c60e4ba84b5f58605ace8ad495414a724fe7aceb7cf06cd0598d04e1"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43b03c1ceea27c6520124f4fb2ba9c647409b9abdf9a62388117148a90419494"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7731abd23a782851426d4e37deb2057bf9410848a4459b5ede4fe89342e687a9"}, + {file = "pyzmq-26.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a222ad02fbe80166b0526c038776e8042cd4e5f0dec1489a006a1df47e9040e0"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-macosx_10_15_x86_64.whl", hash = "sha256:91c3ffaea475ec8bb1a32d77ebc441dcdd13cd3c4c284a6672b92a0f5ade1917"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d9a78a52668bf5c9e7b0da36aa5760a9fc3680144e1445d68e98df78a25082ed"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b70cab356ff8c860118b89dc86cd910c73ce2127eb986dada4fbac399ef644cf"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acae207d4387780838192326b32d373bb286da0b299e733860e96f80728eb0af"}, + {file = "pyzmq-26.4.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:f928eafd15794aa4be75463d537348b35503c1e014c5b663f206504ec1a90fe4"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:552b0d2e39987733e1e9e948a0ced6ff75e0ea39ab1a1db2fc36eb60fd8760db"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd670a8aa843f2ee637039bbd412e0d7294a5e588e1ecc9ad98b0cdc050259a4"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d367b7b775a0e1e54a59a2ba3ed4d5e0a31566af97cc9154e34262777dab95ed"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112af16c406e4a93df2caef49f884f4c2bb2b558b0b5577ef0b2465d15c1abc"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c76c298683f82669cab0b6da59071f55238c039738297c69f187a542c6d40099"}, + {file = "pyzmq-26.4.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:49b6ca2e625b46f499fb081aaf7819a177f41eeb555acb05758aa97f4f95d147"}, + {file = "pyzmq-26.4.0.tar.gz", hash = "sha256:4bd13f85f80962f91a651a7356fe0472791a5f7a92f227822b5acf44795c626d"}, +] [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} -py = {version = "*", markers = "implementation_name == \"pypy\""} - -[[package]] -name = "qtconsole" -version = "5.4.0" -description = "Jupyter Qt console" -category = "dev" -optional = false -python-versions = ">= 3.7" - -[package.dependencies] -ipykernel = ">=4.1" -ipython-genutils = "*" -jupyter-client = ">=4.1" -jupyter-core = "*" -pygments = "*" -pyzmq = ">=17.1" -qtpy = ">=2.0.1" -traitlets = "<5.2.1 || >5.2.1,<5.2.2 || >5.2.2" - -[package.extras] -doc = ["Sphinx (>=1.3)"] -test = ["flaky", "pytest", "pytest-qt"] - -[[package]] -name = "qtpy" -version = "2.3.0" -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" - -[package.dependencies] -packaging = "*" - -[package.extras] -test = ["pytest (>=6,!=7.0.0,!=7.0.1)", "pytest-cov (>=3.0.0)", "pytest-qt"] [[package]] name = "quantulum3" -version = "0.7.11" +version = "0.9.2" description = "Extract quantities from unstructured text." -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "quantulum3-0.9.2-py3-none-any.whl", hash = "sha256:bc56c2ee9c96a391b1660d0134d401515e6ea676cbd1a05d8e75195917216077"}, + {file = "quantulum3-0.9.2.tar.gz", hash = "sha256:797b5d94c52d23107010838fbf2d3bb4f15630f4e90556401bdb042a1c12fc1e"}, +] [package.dependencies] inflect = "*" num2words = "*" +[package.extras] +classifier = ["joblib", "numpy", "scikit-learn", "scipy", "stemming", "wikipedia"] + [[package]] name = "ratelimit" version = "2.2.1" description = "API rate limit decorator" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "ratelimit-2.2.1.tar.gz", hash = "sha256:af8a9b64b821529aca09ebaf6d8d279100d766f19e90b5059ac6a718ca6dee42"}, +] [[package]] name = "rdflib" -version = "6.2.0" +version = "7.1.4" 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.7" +python-versions = "<4.0.0,>=3.8.1" +groups = ["main"] +files = [ + {file = "rdflib-7.1.4-py3-none-any.whl", hash = "sha256:72f4adb1990fa5241abd22ddaf36d7cafa5d91d9ff2ba13f3086d339b213d997"}, + {file = "rdflib-7.1.4.tar.gz", hash = "sha256:fed46e24f26a788e2ab8e445f7077f00edcf95abb73bcef4b86cefa8b62dd174"}, +] [package.dependencies] -isodate = "*" -pyparsing = "*" +isodate = {version = ">=0.7.2,<1.0.0", markers = "python_version < \"3.11\""} +pyparsing = ">=2.1.0,<4" [package.extras] -berkeleydb = ["berkeleydb"] -dev = ["black (==22.6.0)", "flake8", "isort", "mypy", "pep8-naming", "types-setuptools", "flakeheaven"] -docs = ["myst-parser", "sphinx (<6)", "sphinxcontrib-apidoc", "sphinxcontrib-kroki", "sphinx-autodoc-typehints"] -html = ["html5lib"] -networkx = ["networkx"] -tests = ["html5lib", "pytest", "pytest-cov"] +berkeleydb = ["berkeleydb (>=18.1.0,<19.0.0)"] +html = ["html5rdf (>=1.2,<2)"] +lxml = ["lxml (>=4.3,<6.0)"] +networkx = ["networkx (>=2,<4)"] +orjson = ["orjson (>=3.9.14,<4)"] [[package]] name = "rdflib-jsonld" version = "0.6.1" description = "rdflib extension adding JSON-LD parser and serializer" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "rdflib-jsonld-0.6.1.tar.gz", hash = "sha256:eda5a42a2e09f80d4da78e32b5c684bccdf275368f1541e6b7bcddfb1382a0e0"}, + {file = "rdflib_jsonld-0.6.1-py2.py3-none-any.whl", hash = "sha256:bcf84317e947a661bae0a3f2aee1eced697075fc4ac4db6065a3340ea0f10fc2"}, +] [package.dependencies] rdflib = ">=5.0.0" @@ -2187,97 +4783,472 @@ 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" +groups = ["main"] +files = [ + {file = "rdflib_shim-1.0.3-py3-none-any.whl", hash = "sha256:7a853e7750ef1e9bf4e35dea27d54e02d4ed087de5a9e0c329c4a6d82d647081"}, + {file = "rdflib_shim-1.0.3.tar.gz", hash = "sha256:d955d11e2986aab42b6830ca56ac6bc9c893abd1d049a161c6de2f1b99d4fc0d"}, +] [package.dependencies] rdflib = ">=5.0.0" rdflib-jsonld = "0.6.1" +[[package]] +name = "referencing" +version = "0.36.2" +description = "JSON Referencing + Python" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "referencing-0.36.2-py3-none-any.whl", hash = "sha256:e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0"}, + {file = "referencing-0.36.2.tar.gz", hash = "sha256:df2e89862cd09deabbdba16944cc3f10feb6b3e6f18e902f7cc25609a34775aa"}, +] + +[package.dependencies] +attrs = ">=22.2.0" +rpds-py = ">=0.7.0" +typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} + [[package]] name = "requests" -version = "2.28.1" +version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false -python-versions = ">=3.7, <4" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<3" +charset-normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<1.27" +urllib3 = ">=1.21.1,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-cache" +version = "1.2.1" +description = "A persistent cache for python requests" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "requests_cache-1.2.1-py3-none-any.whl", hash = "sha256:1285151cddf5331067baa82598afe2d47c7495a1334bfe7a7d329b43e9fd3603"}, + {file = "requests_cache-1.2.1.tar.gz", hash = "sha256:68abc986fdc5b8d0911318fbb5f7c80eebcd4d01bfacc6685ecf8876052511d1"}, +] + +[package.dependencies] +attrs = ">=21.2" +cattrs = ">=22.2" +platformdirs = ">=2.5" +requests = ">=2.22" +url-normalize = ">=1.4" +urllib3 = ">=1.25.5" + +[package.extras] +all = ["boto3 (>=1.15)", "botocore (>=1.18)", "itsdangerous (>=2.0)", "pymongo (>=3)", "pyyaml (>=6.0.1)", "redis (>=3)", "ujson (>=5.4)"] +bson = ["bson (>=0.5)"] +docs = ["furo (>=2023.3,<2024.0)", "linkify-it-py (>=2.0,<3.0)", "myst-parser (>=1.0,<2.0)", "sphinx (>=5.0.2,<6.0.0)", "sphinx-autodoc-typehints (>=1.19)", "sphinx-automodapi (>=0.14)", "sphinx-copybutton (>=0.5)", "sphinx-design (>=0.2)", "sphinx-notfound-page (>=0.8)", "sphinxcontrib-apidoc (>=0.3)", "sphinxext-opengraph (>=0.9)"] +dynamodb = ["boto3 (>=1.15)", "botocore (>=1.18)"] +json = ["ujson (>=5.4)"] +mongodb = ["pymongo (>=3)"] +redis = ["redis (>=3)"] +security = ["itsdangerous (>=2.0)"] +yaml = ["pyyaml (>=6.0.1)"] + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +description = "OAuthlib authentication support for Requests." +optional = false +python-versions = ">=3.4" +groups = ["main"] +files = [ + {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, + {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, +] + +[package.dependencies] +oauthlib = ">=3.0.0" +requests = ">=2.0.0" + +[package.extras] +rsa = ["oauthlib[signedtoken] (>=3.0.0)"] + +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + +[[package]] +name = "requirements-parser" +version = "0.11.0" +description = "This is a small Python module for parsing Pip requirement files." +optional = false +python-versions = "<4.0,>=3.8" +groups = ["dev"] +files = [ + {file = "requirements_parser-0.11.0-py3-none-any.whl", hash = "sha256:50379eb50311834386c2568263ae5225d7b9d0867fb55cf4ecc93959de2c2684"}, + {file = "requirements_parser-0.11.0.tar.gz", hash = "sha256:35f36dc969d14830bf459803da84f314dc3d17c802592e9e970f63d0359e5920"}, +] + +[package.dependencies] +packaging = ">=23.2" +types-setuptools = ">=69.1.0" [[package]] name = "rfc3339-validator" version = "0.1.4" description = "A pure python RFC3339 validator" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main", "dev"] +files = [ + {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, + {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, +] [package.dependencies] six = "*" +[[package]] +name = "rfc3986-validator" +version = "0.1.1" +description = "Pure python rfc3986 validator" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["dev"] +files = [ + {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, + {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, +] + [[package]] name = "rfc3987" version = "1.3.8" description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, + {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, +] + +[[package]] +name = "roman-numerals-py" +version = "3.1.0" +description = "Manipulate well-formed Roman numerals" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "roman_numerals_py-3.1.0-py3-none-any.whl", hash = "sha256:9da2ad2fb670bcf24e81070ceb3be72f6c11c440d73bd579fbeca1e9f330954c"}, + {file = "roman_numerals_py-3.1.0.tar.gz", hash = "sha256:be4bf804f083a4ce001b5eb7e3c0862479d10f94c936f6c4e5f250aa5ff5bd2d"}, +] + +[package.extras] +lint = ["mypy (==1.15.0)", "pyright (==1.1.394)", "ruff (==0.9.7)"] +test = ["pytest (>=8)"] + +[[package]] +name = "rpds-py" +version = "0.25.0" +description = "Python bindings to Rust's persistent data structures (rpds)" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "rpds_py-0.25.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:c146a24a8f0dc4a7846fb4640b88b3a68986585b8ce8397af15e66b7c5817439"}, + {file = "rpds_py-0.25.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:77814c7a4e1dc43fba73aeb4c1ef0fe37d901f3aa869a4823de5ea843a283fd0"}, + {file = "rpds_py-0.25.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5afbff2822016db3c696cb0c1432e6b1f0e34aa9280bc5184dc216812a24e70d"}, + {file = "rpds_py-0.25.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ffae52cd76837a5c16409359d236b1fced79e42e0792e8adf375095a5e855368"}, + {file = "rpds_py-0.25.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddf9426b740a7047b2b0dddcba775211542e8053ce1e509a1759b665fe573508"}, + {file = "rpds_py-0.25.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9cad834f1a8f51eb037c3c4dc72c884c9e1e0644d900e2d45aa76450e4aa6282"}, + {file = "rpds_py-0.25.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c46bd76986e05689376d28fdc2b97d899576ce3e3aaa5a5f80f67a8300b26eb3"}, + {file = "rpds_py-0.25.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f3353a2d7eb7d5e0af8a7ca9fc85a34ba12619119bcdee6b8a28a6373cda65ce"}, + {file = "rpds_py-0.25.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fdc648d4e81eef5ac4bb35d731562dffc28358948410f3274d123320e125d613"}, + {file = "rpds_py-0.25.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:098d446d76d26e394b440d73921b49c1c90274d46ccbaadf346b1b78f9fdd4b1"}, + {file = "rpds_py-0.25.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c624c82e645f6b5465d08cdc802fb0cd53aa1478782fb2992b9e09f2c9426865"}, + {file = "rpds_py-0.25.0-cp310-cp310-win32.whl", hash = "sha256:9d0041bd9e2d2ef803b32d84a0c8115d178132da5691346465953a2a966ba8ca"}, + {file = "rpds_py-0.25.0-cp310-cp310-win_amd64.whl", hash = "sha256:d8b41195a6b03280ab00749a438fbce761e7acfd5381051a570239d752376f27"}, + {file = "rpds_py-0.25.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6587ece9f205097c62d0e3d3cb7c06991eb0083ab6a9cf48951ec49c2ab7183c"}, + {file = "rpds_py-0.25.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b0a5651e350997cebcdc23016dca26c4d1993d29015a535284da3159796e30b6"}, + {file = "rpds_py-0.25.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3752a015db89ea3e9c04d5e185549be4aa29c1882150e094c614c0de8e788feb"}, + {file = "rpds_py-0.25.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a05b199c11d2f39c72de8c30668734b5d20974ad44b65324ea3e647a211f135d"}, + {file = "rpds_py-0.25.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2f91902fc0c95dd1fa6b30ebd2af83ace91e592f7fd6340a375588a9d4b9341b"}, + {file = "rpds_py-0.25.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98c729193e7abe498565266933c125780fb646e977e94289cadbb36e4eeeb370"}, + {file = "rpds_py-0.25.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36a7564deaac3f372e8b8b701eb982ea3113516e8e08cd87e3dc6ccf29bad14b"}, + {file = "rpds_py-0.25.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6b0c0f671a53c129ea48f9481e95532579cc489ab5a0ffe750c9020787181c48"}, + {file = "rpds_py-0.25.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d21408eaa157063f56e58ca50da27cad67c4395a85fb44cc7a31253ea4e58918"}, + {file = "rpds_py-0.25.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a413674eb2bd2ecb2b93fcc928871b19f7220ee04bca4af3375c50a2b32b5a50"}, + {file = "rpds_py-0.25.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:94f89161a3e358db33310a8a064852a6eb119ed1aa1a3dba927b4e5140e65d00"}, + {file = "rpds_py-0.25.0-cp311-cp311-win32.whl", hash = "sha256:540cd89d256119845b7f8f56c4bb80cad280cab92d9ca473be49ea13e678fd44"}, + {file = "rpds_py-0.25.0-cp311-cp311-win_amd64.whl", hash = "sha256:2649ff19291928243f90c86e4dc9cd86c8c4c6a73c3693ba2e23bc2fbcd8338c"}, + {file = "rpds_py-0.25.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:89260601d497fa5957c3e46f10b16cfa2a4808ad4dd46cddc0b997461923a7d9"}, + {file = "rpds_py-0.25.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:637ec39f97e342a3f76af739eda96800549d92f3aa27a2170b6dcbdffd49f480"}, + {file = "rpds_py-0.25.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bd08c82336412a39a598e5baccab2ee2d7bd54e9115c8b64f2febb45da5c368"}, + {file = "rpds_py-0.25.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:837fd066f974e5b98c69ac83ec594b79a2724a39a92a157b8651615e5032e530"}, + {file = "rpds_py-0.25.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:653a066d2a4a332d4f8a11813e8124b643fa7b835b78468087a9898140469eee"}, + {file = "rpds_py-0.25.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91a51499be506022b9f09facfc42f0c3a1c45969c0fc8f0bbebc8ff23ab9e531"}, + {file = "rpds_py-0.25.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb91471640390a82744b164f8a0be4d7c89d173b1170713f9639c6bad61e9e64"}, + {file = "rpds_py-0.25.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28bd2969445acc2d6801a22f97a43134ae3cb18e7495d668bfaa8d82b8526cdc"}, + {file = "rpds_py-0.25.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f933b35fa563f047896a70b69414dfb3952831817e4c4b3a6faa96737627f363"}, + {file = "rpds_py-0.25.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:80b37b37525492250adc7cbca20ae7084f86eb3eb62414b624d2a400370853b1"}, + {file = "rpds_py-0.25.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:864573b6440b770db5a8693547a8728d7fd32580d4903010a8eee0bb5b03b130"}, + {file = "rpds_py-0.25.0-cp312-cp312-win32.whl", hash = "sha256:ad4a896896346adab86d52b31163c39d49e4e94c829494b96cc064bff82c5851"}, + {file = "rpds_py-0.25.0-cp312-cp312-win_amd64.whl", hash = "sha256:4fbec54cc42fa90ca69158d75f125febc4116b2d934e71c78f97de1388a8feb2"}, + {file = "rpds_py-0.25.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:4e5fe366fa53bd6777cf5440245366705338587b2cf8d61348ddaad744eb591a"}, + {file = "rpds_py-0.25.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:54f925ff8d4443b7cae23a5215954abbf4736a3404188bde53c4d744ac001d89"}, + {file = "rpds_py-0.25.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d58258a66255b2500ddaa4f33191ada5ec983a429c09eb151daf81efbb9aa115"}, + {file = "rpds_py-0.25.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8f3a57f08c558d0983a708bfe6d1265f47b5debff9b366b2f2091690fada055c"}, + {file = "rpds_py-0.25.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7d60d42f1b9571341ad2322e748f7a60f9847546cd801a3a0eb72a1b54c6519"}, + {file = "rpds_py-0.25.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a54b94b0e4de95aa92618906fb631779d9fde29b4bf659f482c354a3a79fd025"}, + {file = "rpds_py-0.25.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af1c2241919304cc2f90e7dcb3eb1c1df6fb4172dd338e629dd6410e48b3d1a0"}, + {file = "rpds_py-0.25.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7d34547810bfd61acf8a441e8a3651e7a919e8e8aed29850be14a1b05cfc6f41"}, + {file = "rpds_py-0.25.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:66568caacf18542f0cf213db7adf3de2da6ad58c7bf2c4fafec0d81ae557443b"}, + {file = "rpds_py-0.25.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e49e4c3e899c32884d7828c91d6c3aff08d2f18857f50f86cc91187c31a4ca58"}, + {file = "rpds_py-0.25.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:20af08b0b2d5b196a2bcb70becf0b97ec5af579cee0ae6750b08a2eea3b6c77d"}, + {file = "rpds_py-0.25.0-cp313-cp313-win32.whl", hash = "sha256:d3dc8d6ce8f001c80919bdb49d8b0b815185933a0b8e9cdeaea42b0b6f27eeb0"}, + {file = "rpds_py-0.25.0-cp313-cp313-win_amd64.whl", hash = "sha256:113d134dc5a8d2503630ca2707b58a1bf5b1b3c69b35c7dab8690ee650c111b8"}, + {file = "rpds_py-0.25.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:6c72a4a8fab10bc96720ad40941bb471e3b1150fb8d62dab205d495511206cf1"}, + {file = "rpds_py-0.25.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:bb979162323f3534dce84b59f86e689a0761a2a300e0212bfaedfa80d4eb8100"}, + {file = "rpds_py-0.25.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35c8cb5dcf7d36d3adf2ae0730b60fb550a8feb6e432bee7ef84162a0d15714b"}, + {file = "rpds_py-0.25.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:673ba018df5ae5e7b6c9a021d51ffe39c0ae1daa0041611ed27a0bca634b2d2e"}, + {file = "rpds_py-0.25.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16fb28d3a653f67c871a47c5ca0be17bce9fab8adb8bcf7bd09f3771b8c4d860"}, + {file = "rpds_py-0.25.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:12a84c3851f9e68633d883c01347db3cb87e6160120a489f9c47162cd276b0a5"}, + {file = "rpds_py-0.25.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b5f457afffb45d3804728a54083e31fbaf460e902e3f7d063e56d0d0814301e"}, + {file = "rpds_py-0.25.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9442cbff21122e9a529b942811007d65eabe4182e7342d102caf119b229322c6"}, + {file = "rpds_py-0.25.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:383cf0d4288baf5a16812ed70d54ecb7f2064e255eb7fe42c38e926adeae4534"}, + {file = "rpds_py-0.25.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0dcdee07ebf76223092666c72a9552db276fbe46b98830ecd1bb836cc98adc81"}, + {file = "rpds_py-0.25.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5bbfbd9c74c4dd74815bd532bf29bedea6d27d38f35ef46f9754172a14e4c655"}, + {file = "rpds_py-0.25.0-cp313-cp313t-win32.whl", hash = "sha256:90dbd2c42cb6463c07020695800ae8f347e7dbeff09da2975a988e467b624539"}, + {file = "rpds_py-0.25.0-cp313-cp313t-win_amd64.whl", hash = "sha256:8c2ad59c4342a176cb3e0d5753e1c911eabc95c210fc6d0e913c32bf560bf012"}, + {file = "rpds_py-0.25.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:9f9a1b15b875160186177f659cde2b0f899182b0aca49457d6396afc4bbda7b9"}, + {file = "rpds_py-0.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e849315963eb08c26167d0f2c0f9319c9bd379daea75092b3c595d70be6209d"}, + {file = "rpds_py-0.25.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad37c29adc435e6d8b24be86b03596183ee8d4bb8580cc4c676879b0b896a99"}, + {file = "rpds_py-0.25.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:587cad3959d3d85127cf5df1624cdce569bb3796372e00420baad46af7c56b9b"}, + {file = "rpds_py-0.25.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce0518667855a1598d9b1f4fcf0fed1182c67c5ba4fe6a2c6bce93440a65cead"}, + {file = "rpds_py-0.25.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c18cb2f6805861dcdf11fb0b3c111a0335f6475411687db2f6636f32bed66b0"}, + {file = "rpds_py-0.25.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a21f4584f69547ae03aaa21be98753e85599f3437b84039da5dc20b53abe987"}, + {file = "rpds_py-0.25.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3d7d65aa934899849628137ab391562cdb487c6ffb9b9781319a64a9c66afbce"}, + {file = "rpds_py-0.25.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fd9167e9604cb5a218a2e847aa8cdc5f98b379a673371978ee7b0c11b4d2e140"}, + {file = "rpds_py-0.25.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6c27156c8d836e7ff760767e93245b286ae028bfd81d305db676662d1f642637"}, + {file = "rpds_py-0.25.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:66087711faf29cb3ac8ab05341939aec29968626aff8ef18e483e229055dd9a7"}, + {file = "rpds_py-0.25.0-cp39-cp39-win32.whl", hash = "sha256:f2e69415e4e33cdeee50ebc2c4d8fcbef12c3181d9274e512ccd2a905a76aad1"}, + {file = "rpds_py-0.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:58cfaa54752d6d2b4f10e87571688dbb7792327a69eca5417373d77d42787058"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:57e9616a2a9da08fe0994e37a0c6f578fbaf6d35911bcba31e99660542d60c45"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6d95521901896a90a858993bfa3ec0f9160d3d97e8c8fefc279b3306cdadfee0"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d33aef3914a5b49db12ed3f24d214ffa50caefc8f4b0c7c7b9485bd4b231a898"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4acbe2349a3baac9cc212005b6cb4bbb7e5b34538886cde4f55dfc29173da1d6"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b75b5d3416b00d064a5e6f4814fdfb18a964a7cf38dc00b5c2c02fa30a7dd0b"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:542a6f1d0f400b9ce1facb3e30dd3dc84e4affc60353509b00a7bdcd064be91e"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a60ba9d104f4e8496107b1cb86e45a68a16d13511dc3986e0780e9f85c2136f9"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6065a489b7b284efb29d57adffae2b9b5e9403d3c8d95cfa04e04e024e6b4e77"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:6bcca4d0d24d8c37bfe0cafdaaf4346b6c516db21ccaad5c7fba0a0df818dfc9"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:8155e21203161e5c78791fc049b99f0bbbf14d1d1839c8c93c8344957f9e8e1e"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6a1eda14db1ac7a2ab4536dfe69e4d37fdd765e8e784ae4451e61582ebb76012"}, + {file = "rpds_py-0.25.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:de34a7d1893be76cb015929690dce3bde29f4de08143da2e9ad1cedb11dbf80e"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0d63a86b457069d669c423f093db4900aa102f0e5a626973eff4db8355c0fd96"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:89bb2b20829270aca28b1e5481be8ee24cb9aa86e6c0c81cb4ada2112c9588c5"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83e103b48e63fd2b8a8e2b21ab5b5299a7146045626c2ed4011511ea8122d217"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fccd24c080850715c58a80200d367bc62b4bff6c9fb84e9564da1ebcafea6418"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12b42790c91e0041a98f0ec04244fb334696938793e785a5d4c7e56ca534d7da"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bc907ea12216cfc5560148fc42459d86740fc739981c6feb94230dab09362679"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e11065b759c38c4945f8c9765ed2910e31fa5b2f7733401eb7d966f468367a2"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8abc1a3e29b599bf8bb5ad455256a757e8b0ed5621e7e48abe8209932dc6d11e"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:cd36b71f9f3bf195b2dd9be5eafbfc9409e6c8007aebc38a4dc051f522008033"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:805a0dff0674baa3f360c21dcbc622ae544f2bb4753d87a4a56a1881252a477e"}, + {file = "rpds_py-0.25.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:96742796f499ac23b59856db734e65b286d1214a0d9b57bcd7bece92d9201fa4"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7715597186a7277be12729c896019226321bad1f047da381ab707b177aa5017c"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b049dd0792d51f07193cd934acec89abe84d2607109e6ca223b2f0ff24f0c7d"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87c6ff87b38f46d712418d78b34db1198408a3d9a42eddc640644aea561216b1"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:240251fd95b057c26f8538d0e673bf983eba4f38da95fbaf502bfc1a768b3984"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85587479f210350e9d9d25e505f422dd636e561658382ee8947357a4bac491ad"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:551897221bbc9de17bce4574810347db8ec1ba4ec2f50f35421790d34bdb6ef9"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3d50ac3b772c10e0b918a5ce2e871138896bfb5f35050ff1ff87ddca45961fc"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8029c19c8a32ef3093c417dd16a5f806e7f529fcceea7c627b2635e9da5104da"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:fe7439d9c5b402af2c9911c7facda1808d0c8dbfa9cf085e6aeac511a23f7d87"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:77910d6bec321c9fccfe9cf5e407fed9d2c48a5e510473b4f070d5cf2413c003"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0ee0cc81f875e853ccdf3badb44b67f771fb9149baa9e752777ccdcaf052ad26"}, + {file = "rpds_py-0.25.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:469054e6b2f8e41f1fe62b95f617082019d343eddeec3219ff3909067e672fb9"}, + {file = "rpds_py-0.25.0.tar.gz", hash = "sha256:4d97661bf5848dd9e5eb7ded480deccf9d32ce2cd500b88a26acbf7bd2864985"}, +] [[package]] -name = "ruamel.yaml" -version = "0.17.21" -description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" -category = "main" +name = "rsa" +version = "4.9.1" +description = "Pure-Python RSA implementation" optional = false -python-versions = ">=3" +python-versions = "<4,>=3.6" +groups = ["main"] +files = [ + {file = "rsa-4.9.1-py3-none-any.whl", hash = "sha256:68635866661c6836b8d39430f97a996acbd61bfa49406748ea243539fe239762"}, + {file = "rsa-4.9.1.tar.gz", hash = "sha256:e7bdbfdb5497da4c07dfd35530e1a902659db6ff241e39d9953cad06ebd0ae75"}, +] [package.dependencies] -"ruamel.yaml.clib" = {version = ">=0.2.6", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.11\""} +pyasn1 = ">=0.1.3" -[package.extras] -docs = ["ryd"] -jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] +[[package]] +name = "schemasheets" +version = "0.4.0" +description = "Package to author schemas using spreadsheets" +optional = false +python-versions = "<4.0,>=3.9" +groups = ["main"] +files = [ + {file = "schemasheets-0.4.0-py3-none-any.whl", hash = "sha256:e122702605a131a30a5c7837e894bab97375a2e0633199b11f33a721de15ae85"}, + {file = "schemasheets-0.4.0.tar.gz", hash = "sha256:0bf142a9e3691fb7ed2130b21e3010f6f094f52e78823ad3e770aa697115b353"}, +] + +[package.dependencies] +bioregistry = ">0.5.0" +Jinja2 = ">=3.0.3" +linkml = ">=1.5.0" +linkml-runtime = ">=1.5.0" +ontodev-cogs = ">=0.3.3,<0.4.0" [[package]] -name = "ruamel.yaml.clib" -version = "0.2.7" -description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" -category = "main" +name = "scipy" +version = "1.13.1" +description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version < \"3.11\"" +files = [ + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, +] + +[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 = "scipy" -version = "1.9.3" +version = "1.15.3" description = "Fundamental algorithms for scientific computing in Python" -category = "main" optional = false -python-versions = ">=3.8" +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "scipy-1.15.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:a345928c86d535060c9c2b25e71e87c39ab2f22fc96e9636bd74d1dbf9de448c"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:ad3432cb0f9ed87477a8d97f03b763fd1d57709f1bbde3c9369b1dff5503b253"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:aef683a9ae6eb00728a542b796f52a5477b78252edede72b8327a886ab63293f"}, + {file = "scipy-1.15.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:1c832e1bd78dea67d5c16f786681b28dd695a8cb1fb90af2e27580d3d0967e92"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:263961f658ce2165bbd7b99fa5135195c3a12d9bef045345016b8b50c315cb82"}, + {file = "scipy-1.15.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2abc762b0811e09a0d3258abee2d98e0c703eee49464ce0069590846f31d40"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:ed7284b21a7a0c8f1b6e5977ac05396c0d008b89e05498c8b7e8f4a1423bba0e"}, + {file = "scipy-1.15.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5380741e53df2c566f4d234b100a484b420af85deb39ea35a1cc1be84ff53a5c"}, + {file = "scipy-1.15.3-cp310-cp310-win_amd64.whl", hash = "sha256:9d61e97b186a57350f6d6fd72640f9e99d5a4a2b8fbf4b9ee9a841eab327dc13"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:993439ce220d25e3696d1b23b233dd010169b62f6456488567e830654ee37a6b"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:34716e281f181a02341ddeaad584205bd2fd3c242063bd3423d61ac259ca7eba"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3b0334816afb8b91dab859281b1b9786934392aa3d527cd847e41bb6f45bee65"}, + {file = "scipy-1.15.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:6db907c7368e3092e24919b5e31c76998b0ce1684d51a90943cb0ed1b4ffd6c1"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:721d6b4ef5dc82ca8968c25b111e307083d7ca9091bc38163fb89243e85e3889"}, + {file = "scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:795c46999bae845966368a3c013e0e00947932d68e235702b5c3f6ea799aa8c9"}, + {file = "scipy-1.15.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:18aaacb735ab38b38db42cb01f6b92a2d0d4b6aabefeb07f02849e47f8fb3594"}, + {file = "scipy-1.15.3-cp311-cp311-win_amd64.whl", hash = "sha256:ae48a786a28412d744c62fd7816a4118ef97e5be0bee968ce8f0a2fba7acf3bb"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6ac6310fdbfb7aa6612408bd2f07295bcbd3fda00d2d702178434751fe48e019"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:185cd3d6d05ca4b44a8f1595af87f9c372bb6acf9c808e99aa3e9aa03bd98cf6"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:05dc6abcd105e1a29f95eada46d4a3f251743cfd7d3ae8ddb4088047f24ea477"}, + {file = "scipy-1.15.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:06efcba926324df1696931a57a176c80848ccd67ce6ad020c810736bfd58eb1c"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05045d8b9bfd807ee1b9f38761993297b10b245f012b11b13b91ba8945f7e45"}, + {file = "scipy-1.15.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271e3713e645149ea5ea3e97b57fdab61ce61333f97cfae392c28ba786f9bb49"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6cfd56fc1a8e53f6e89ba3a7a7251f7396412d655bca2aa5611c8ec9a6784a1e"}, + {file = "scipy-1.15.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ff17c0bb1cb32952c09217d8d1eed9b53d1463e5f1dd6052c7857f83127d539"}, + {file = "scipy-1.15.3-cp312-cp312-win_amd64.whl", hash = "sha256:52092bc0472cfd17df49ff17e70624345efece4e1a12b23783a1ac59a1b728ed"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2c620736bcc334782e24d173c0fdbb7590a0a436d2fdf39310a8902505008759"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:7e11270a000969409d37ed399585ee530b9ef6aa99d50c019de4cb01e8e54e62"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8c9ed3ba2c8a2ce098163a9bdb26f891746d02136995df25227a20e71c396ebb"}, + {file = "scipy-1.15.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0bdd905264c0c9cfa74a4772cdb2070171790381a5c4d312c973382fc6eaf730"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79167bba085c31f38603e11a267d862957cbb3ce018d8b38f79ac043bc92d825"}, + {file = "scipy-1.15.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9deabd6d547aee2c9a81dee6cc96c6d7e9a9b1953f74850c179f91fdc729cb7"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:dde4fc32993071ac0c7dd2d82569e544f0bdaff66269cb475e0f369adad13f11"}, + {file = "scipy-1.15.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f77f853d584e72e874d87357ad70f44b437331507d1c311457bed8ed2b956126"}, + {file = "scipy-1.15.3-cp313-cp313-win_amd64.whl", hash = "sha256:b90ab29d0c37ec9bf55424c064312930ca5f4bde15ee8619ee44e69319aab163"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3ac07623267feb3ae308487c260ac684b32ea35fd81e12845039952f558047b8"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6487aa99c2a3d509a5227d9a5e889ff05830a06b2ce08ec30df6d79db5fcd5c5"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:50f9e62461c95d933d5c5ef4a1f2ebf9a2b4e83b0db374cb3f1de104d935922e"}, + {file = "scipy-1.15.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:14ed70039d182f411ffc74789a16df3835e05dc469b898233a245cdfd7f162cb"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a769105537aa07a69468a0eefcd121be52006db61cdd8cac8a0e68980bbb723"}, + {file = "scipy-1.15.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9db984639887e3dffb3928d118145ffe40eff2fa40cb241a306ec57c219ebbbb"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:40e54d5c7e7ebf1aa596c374c49fa3135f04648a0caabcb66c52884b943f02b4"}, + {file = "scipy-1.15.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5e721fed53187e71d0ccf382b6bf977644c533e506c4d33c3fb24de89f5c3ed5"}, + {file = "scipy-1.15.3-cp313-cp313t-win_amd64.whl", hash = "sha256:76ad1fb5f8752eabf0fa02e4cc0336b4e8f021e2d5f061ed37d6d264db35e3ca"}, + {file = "scipy-1.15.3.tar.gz", hash = "sha256:eae3cf522bc7df64b42cad3925c876e1b0b6c35c1337c93e12c0f366f55b0eaf"}, +] [package.dependencies] -numpy = ">=1.18.5,<1.26.0" +numpy = ">=1.23.5,<2.5" [package.extras] -test = ["pytest", "pytest-cov", "pytest-xdist", "asv", "mpmath", "gmpy2", "threadpoolctl", "scikit-umfpack"] -doc = ["sphinx (!=4.1.0)", "pydata-sphinx-theme (==0.9.0)", "sphinx-panels (>=0.5.2)", "matplotlib (>2)", "numpydoc", "sphinx-tabs"] -dev = ["mypy", "typing-extensions", "pycodestyle", "flake8"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] +doc = ["intersphinx_registry", "jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.19.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<8.0.0)", "sphinx-copybutton", "sphinx-design (>=0.4.0)"] +test = ["Cython", "array-api-strict (>=2.0,<2.1.1)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja ; sys_platform != \"emscripten\"", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "semsql" -version = "0.1.7" +version = "0.4.0" description = "" -category = "main" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0.0,>=3.8.1" +groups = ["main"] +files = [ + {file = "semsql-0.4.0-py3-none-any.whl", hash = "sha256:a8e5be068a5d6b8b6fd86884019f7054a59a9178592cd149b90bc23ca9f4bf1b"}, + {file = "semsql-0.4.0.tar.gz", hash = "sha256:89a3273e3595036a190c7d1bb779a8e144996582d131d9757c5ffbbb8029a3ce"}, +] [package.dependencies] click = ">=8.1.3,<9.0.0" @@ -2286,75 +5257,129 @@ SQLAlchemy-Utils = ">=0.38.2,<0.39.0" [[package]] name = "send2trash" -version = "1.8.0" -description = "Send file to trash natively under Mac OS X, Windows and Linux." -category = "dev" +version = "1.8.3" +description = "Send file to trash natively under Mac OS X, Windows and Linux" optional = false -python-versions = "*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["dev"] +files = [ + {file = "Send2Trash-1.8.3-py3-none-any.whl", hash = "sha256:0c31227e0bd08961c7665474a3d1ef7193929fedda4233843689baa056be46c9"}, + {file = "Send2Trash-1.8.3.tar.gz", hash = "sha256:b18e7a3966d99871aefeb00cfbcfdced55ce4871194810fc71f4aa484b953abf"}, +] + +[package.extras] +nativelib = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\"", "pywin32 ; sys_platform == \"win32\""] +objc = ["pyobjc-framework-Cocoa ; sys_platform == \"darwin\""] +win32 = ["pywin32 ; sys_platform == \"win32\""] + +[[package]] +name = "setuptools" +version = "80.7.1" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "setuptools-80.7.1-py3-none-any.whl", hash = "sha256:ca5cc1069b85dc23070a6628e6bcecb3292acac802399c7f8edc0100619f9009"}, + {file = "setuptools-80.7.1.tar.gz", hash = "sha256:f6ffc5f0142b1bd8d0ca94ee91b30c0ca862ffd50826da1ea85258a06fd94552"}, +] [package.extras] -nativelib = ["pyobjc-framework-cocoa", "pywin32"] -objc = ["pyobjc-framework-cocoa"] -win32 = ["pywin32"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "shexjsg" version = "0.8.2" description = "ShExJSG - Astract Syntax Tree for the ShEx 2.0 language" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "ShExJSG-0.8.2-py2.py3-none-any.whl", hash = "sha256:3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766"}, + {file = "ShExJSG-0.8.2.tar.gz", hash = "sha256:f17a629fc577fa344382bdee143cd9ff86588537f9f811f66cea6f63cdbcd0b6"}, +] [package.dependencies] pyjsg = ">=0.11.10" [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] +files = [ + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, +] [[package]] name = "sniffio" -version = "1.3.0" +version = "1.3.1" description = "Sniff out which async library your code is running under" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] +markers = {main = "extra == \"llm\""} [[package]] name = "snowballstemmer" -version = "2.2.0" -description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" -optional = false -python-versions = "*" +version = "3.0.1" +description = "This package provides 32 stemmers for 30 languages generated from Snowball algorithms." +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*" +groups = ["main", "dev"] +files = [ + {file = "snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064"}, + {file = "snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895"}, +] [[package]] name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] [[package]] name = "soupsieve" -version = "2.3.2.post1" +version = "2.7" description = "A modern CSS selector implementation for Beautiful Soup." -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "soupsieve-2.7-py3-none-any.whl", hash = "sha256:6e60cc5c1ffaf1cebcc12e8188320b72071e922c2e897f737cadce79ad5d30c4"}, + {file = "soupsieve-2.7.tar.gz", hash = "sha256:ad282f9b6926286d2ead4750552c8a6142bc4c783fd66b0293547c8fe6ae126a"}, +] [[package]] name = "sparqlslurper" version = "0.5.1" description = "SPARQL Slurper for rdflib" -category = "main" optional = false python-versions = ">=3.7.4" +groups = ["main"] +files = [ + {file = "sparqlslurper-0.5.1-py3-none-any.whl", hash = "sha256:ae49b2d8ce3dd38df7a40465b228ad5d33fb7e11b3f248d195f9cadfc9cfff87"}, + {file = "sparqlslurper-0.5.1.tar.gz", hash = "sha256:9282ebb064fc6152a58269d194cb1e7b275b0f095425a578d75b96dcc851f546"}, +] [package.dependencies] rdflib = ">=5.0.0" @@ -2365,205 +5390,352 @@ sparqlwrapper = ">=1.8.2" name = "sparqlwrapper" version = "2.0.0" description = "SPARQL Endpoint interface to Python" -category = "main" optional = false python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "SPARQLWrapper-2.0.0-py3-none-any.whl", hash = "sha256:c99a7204fff676ee28e6acef327dc1ff8451c6f7217dcd8d49e8872f324a8a20"}, + {file = "SPARQLWrapper-2.0.0.tar.gz", hash = "sha256:3fed3ebcc77617a4a74d2644b86fd88e0f32e7f7003ac7b2b334c026201731f1"}, +] [package.dependencies] rdflib = ">=6.1.1" [package.extras] -pandas = ["pandas (>=1.3.5)"] +dev = ["mypy (>=0.931)", "pandas (>=1.3.5)", "pandas-stubs (>=1.2.0.48)", "setuptools (>=3.7.1)"] +docs = ["sphinx (<5)", "sphinx-rtd-theme"] keepalive = ["keepalive (>=0.5)"] -docs = ["sphinx-rtd-theme", "sphinx (<5)"] -dev = ["pandas-stubs (>=1.2.0.48)", "pandas (>=1.3.5)", "mypy (>=0.931)", "setuptools (>=3.7.1)"] +pandas = ["pandas (>=1.3.5)"] [[package]] name = "sphinx" -version = "4.5.0" +version = "7.4.7" description = "Python documentation generator" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "sphinx-7.4.7-py3-none-any.whl", hash = "sha256:c2419e2135d11f1951cd994d6eb18a1835bd8fdd8429f9ca375dc1f3281bd239"}, + {file = "sphinx-7.4.7.tar.gz", hash = "sha256:242f92a7ea7e6c5b406fdc2615413890ba9f699114a9c09192d7dfead2ee9cfe"}, +] [package.dependencies] -alabaster = ">=0.7,<0.8" -babel = ">=1.3" -colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.14,<0.18" -imagesize = "*" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} -Jinja2 = ">=2.3" -packaging = "*" -Pygments = ">=2.0" -requests = ">=2.5.0" -snowballstemmer = ">=1.1" +alabaster = ">=0.7.14,<0.8.0" +babel = ">=2.13" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +docutils = ">=0.20,<0.22" +imagesize = ">=1.3" +importlib-metadata = {version = ">=6.0", markers = "python_version < \"3.10\""} +Jinja2 = ">=3.1" +packaging = ">=23.0" +Pygments = ">=2.17" +requests = ">=2.30.0" +snowballstemmer = ">=2.2" sphinxcontrib-applehelp = "*" sphinxcontrib-devhelp = "*" sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" -sphinxcontrib-serializinghtml = ">=1.1.5" +sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["flake8 (>=6.0)", "importlib-metadata (>=6.0)", "mypy (==1.10.1)", "pytest (>=6.0)", "ruff (==0.5.2)", "sphinx-lint (>=0.9)", "tomli (>=2)", "types-docutils (==0.21.0.20240711)", "types-requests (>=2.30.0)"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] + +[[package]] +name = "sphinx" +version = "8.2.3" +description = "Python documentation generator" +optional = false +python-versions = ">=3.11" +groups = ["main", "dev"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "sphinx-8.2.3-py3-none-any.whl", hash = "sha256:4405915165f13521d875a8c29c8970800a0141c14cc5416a38feca4ea5d9b9c3"}, + {file = "sphinx-8.2.3.tar.gz", hash = "sha256:398ad29dee7f63a75888314e9424d40f52ce5a6a87ae88e7071e80af296ec348"}, +] + +[package.dependencies] +alabaster = ">=0.7.14" +babel = ">=2.13" +colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\""} +docutils = ">=0.20,<0.22" +imagesize = ">=1.3" +Jinja2 = ">=3.1" +packaging = ">=23.0" +Pygments = ">=2.17" +requests = ">=2.30.0" +roman-numerals-py = ">=1.0.0" +snowballstemmer = ">=2.2" +sphinxcontrib-applehelp = ">=1.0.7" +sphinxcontrib-devhelp = ">=1.0.6" +sphinxcontrib-htmlhelp = ">=2.0.6" +sphinxcontrib-jsmath = ">=1.0.1" +sphinxcontrib-qthelp = ">=1.0.6" +sphinxcontrib-serializinghtml = ">=1.1.9" [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "docutils-stubs", "types-typed-ast", "types-requests"] -test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] +lint = ["betterproto (==2.0.0b6)", "mypy (==1.15.0)", "pypi-attestations (==0.0.21)", "pyright (==1.1.395)", "pytest (>=8.0)", "ruff (==0.9.9)", "sphinx-lint (>=0.9)", "types-Pillow (==10.2.0.20240822)", "types-Pygments (==2.19.0.20250219)", "types-colorama (==0.4.15.20240311)", "types-defusedxml (==0.7.0.20240218)", "types-docutils (==0.21.0.20241128)", "types-requests (==2.32.0.20241016)", "types-urllib3 (==1.26.25.14)"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=8.0)", "pytest-xdist[psutil] (>=3.4)", "setuptools (>=70.0)", "typing_extensions (>=4.9)"] [[package]] name = "sphinx-click" -version = "3.1.0" +version = "6.0.0" description = "Sphinx extension that automatically documents click applications" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "sphinx_click-6.0.0-py3-none-any.whl", hash = "sha256:1e0a3c83bcb7c55497751b19d07ebe56b5d7b85eb76dd399cf9061b497adc317"}, + {file = "sphinx_click-6.0.0.tar.gz", hash = "sha256:f5d664321dc0c6622ff019f1e1c84e58ce0cecfddeb510e004cf60c2a3ab465b"}, +] [package.dependencies] -click = ">=7.0" +click = ">=8.0" docutils = "*" -sphinx = ">=2.0" +sphinx = ">=4.0" [[package]] name = "sphinx-pdj-theme" -version = "0.2.1" -description = "PdJ for Sphinx" -category = "dev" +version = "0.5.0" +description = "A cool theme for sphinx documentation" optional = false python-versions = "*" - -[[package]] -name = "sphinx-rtd-theme" -version = "1.1.1" -description = "Read the Docs theme for Sphinx" -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" - -[package.dependencies] -docutils = "<0.18" -sphinx = ">=1.6,<6" - -[package.extras] -dev = ["transifex-client", "sphinxcontrib-httpdomain", "bump2version", "wheel"] +groups = ["dev"] +files = [ + {file = "sphinx_pdj_theme-0.5.0.tar.gz", hash = "sha256:376fa8ee574ce49fe85c31eda2da581d44af92b676234ba5eed3d3cd049931b2"}, +] [[package]] name = "sphinxcontrib-applehelp" -version = "1.0.2" -description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" -category = "main" +version = "2.0.0" +description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "sphinxcontrib_applehelp-2.0.0-py3-none-any.whl", hash = "sha256:4cd3f0ec4ac5dd9c17ec65e9ab272c9b867ea77425228e68ecf08d6b28ddbdb5"}, + {file = "sphinxcontrib_applehelp-2.0.0.tar.gz", hash = "sha256:2f29ef331735ce958efa4734873f084941970894c6090408b079c61b2e1c06d1"}, +] [package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-devhelp" -version = "1.0.2" -description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." -category = "main" +version = "2.0.0" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "sphinxcontrib_devhelp-2.0.0-py3-none-any.whl", hash = "sha256:aefb8b83854e4b0998877524d1029fd3e6879210422ee3780459e28a1f03a8a2"}, + {file = "sphinxcontrib_devhelp-2.0.0.tar.gz", hash = "sha256:411f5d96d445d1d73bb5d52133377b4248ec79db5c793ce7dbe59e074b4dd1ad"}, +] [package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-htmlhelp" -version = "2.0.0" +version = "2.1.0" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8"}, + {file = "sphinxcontrib_htmlhelp-2.1.0.tar.gz", hash = "sha256:c9e2916ace8aad64cc13a0d233ee22317f2b9025b9cf3295249fa985cc7082e9"}, +] [package.extras] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["html5lib", "pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" optional = false python-versions = ">=3.5" +groups = ["main", "dev"] +files = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] [package.extras] -test = ["mypy", "flake8", "pytest"] +test = ["flake8", "mypy", "pytest"] [[package]] name = "sphinxcontrib-mermaid" -version = "0.7.1" +version = "1.0.0" description = "Mermaid diagrams in yours Sphinx powered docs" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "sphinxcontrib_mermaid-1.0.0-py3-none-any.whl", hash = "sha256:60b72710ea02087f212028feb09711225fbc2e343a10d34822fe787510e1caa3"}, + {file = "sphinxcontrib_mermaid-1.0.0.tar.gz", hash = "sha256:2e8ab67d3e1e2816663f9347d026a8dee4a858acdd4ad32dd1c808893db88146"}, +] + +[package.dependencies] +pyyaml = "*" +sphinx = "*" + +[package.extras] +test = ["defusedxml", "myst-parser", "pytest", "ruff", "sphinx"] [[package]] name = "sphinxcontrib-qthelp" -version = "1.0.3" -description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." -category = "main" +version = "2.0.0" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "sphinxcontrib_qthelp-2.0.0-py3-none-any.whl", hash = "sha256:b18a828cdba941ccd6ee8445dbe72ffa3ef8cbe7505d8cd1fa0d42d3f2d5f3eb"}, + {file = "sphinxcontrib_qthelp-2.0.0.tar.gz", hash = "sha256:4fe7d0ac8fc171045be623aba3e2a8f613f8682731f9153bb2e40ece16b9bbab"}, +] [package.extras] -test = ["pytest"] -lint = ["docutils-stubs", "mypy", "flake8"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] +test = ["defusedxml (>=0.7.1)", "pytest"] [[package]] name = "sphinxcontrib-serializinghtml" -version = "1.1.5" -description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." -category = "main" +version = "2.0.0" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "sphinxcontrib_serializinghtml-2.0.0-py3-none-any.whl", hash = "sha256:6e2cb0eef194e10c27ec0023bfeb25badbbb5868244cf5bc5bdc04e4464bf331"}, + {file = "sphinxcontrib_serializinghtml-2.0.0.tar.gz", hash = "sha256:e9d912827f872c029017a53f0ef2180b327c3f7fd23c87229f7a8e8b70031d4d"}, +] [package.extras] -lint = ["flake8", "mypy", "docutils-stubs"] +lint = ["mypy", "ruff (==0.5.5)", "types-docutils"] +standalone = ["Sphinx (>=5)"] test = ["pytest"] [[package]] name = "sqlalchemy" -version = "1.4.43" +version = "2.0.41" description = "Database Abstraction Library" -category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "SQLAlchemy-2.0.41-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:6854175807af57bdb6425e47adbce7d20a4d79bbfd6f6d6519cd10bb7109a7f8"}, + {file = "SQLAlchemy-2.0.41-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05132c906066142103b83d9c250b60508af556982a385d96c4eaa9fb9720ac2b"}, + {file = "SQLAlchemy-2.0.41-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b4af17bda11e907c51d10686eda89049f9ce5669b08fbe71a29747f1e876036"}, + {file = "SQLAlchemy-2.0.41-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:c0b0e5e1b5d9f3586601048dd68f392dc0cc99a59bb5faf18aab057ce00d00b2"}, + {file = "SQLAlchemy-2.0.41-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:0b3dbf1e7e9bc95f4bac5e2fb6d3fb2f083254c3fdd20a1789af965caf2d2348"}, + {file = "SQLAlchemy-2.0.41-cp37-cp37m-win32.whl", hash = "sha256:1e3f196a0c59b0cae9a0cd332eb1a4bda4696e863f4f1cf84ab0347992c548c2"}, + {file = "SQLAlchemy-2.0.41-cp37-cp37m-win_amd64.whl", hash = "sha256:6ab60a5089a8f02009f127806f777fca82581c49e127f08413a66056bd9166dd"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b1f09b6821406ea1f94053f346f28f8215e293344209129a9c0fcc3578598d7b"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1936af879e3db023601196a1684d28e12f19ccf93af01bf3280a3262c4b6b4e5"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2ac41acfc8d965fb0c464eb8f44995770239668956dc4cdf502d1b1ffe0d747"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81c24e0c0fde47a9723c81d5806569cddef103aebbf79dbc9fcbb617153dea30"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23a8825495d8b195c4aa9ff1c430c28f2c821e8c5e2d98089228af887e5d7e29"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:60c578c45c949f909a4026b7807044e7e564adf793537fc762b2489d522f3d11"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-win32.whl", hash = "sha256:118c16cd3f1b00c76d69343e38602006c9cfb9998fa4f798606d28d63f23beda"}, + {file = "sqlalchemy-2.0.41-cp310-cp310-win_amd64.whl", hash = "sha256:7492967c3386df69f80cf67efd665c0f667cee67032090fe01d7d74b0e19bb08"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6375cd674fe82d7aa9816d1cb96ec592bac1726c11e0cafbf40eeee9a4516b5f"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9f8c9fdd15a55d9465e590a402f42082705d66b05afc3ffd2d2eb3c6ba919560"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:32f9dc8c44acdee06c8fc6440db9eae8b4af8b01e4b1aee7bdd7241c22edff4f"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90c11ceb9a1f482c752a71f203a81858625d8df5746d787a4786bca4ffdf71c6"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:911cc493ebd60de5f285bcae0491a60b4f2a9f0f5c270edd1c4dbaef7a38fc04"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03968a349db483936c249f4d9cd14ff2c296adfa1290b660ba6516f973139582"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-win32.whl", hash = "sha256:293cd444d82b18da48c9f71cd7005844dbbd06ca19be1ccf6779154439eec0b8"}, + {file = "sqlalchemy-2.0.41-cp311-cp311-win_amd64.whl", hash = "sha256:3d3549fc3e40667ec7199033a4e40a2f669898a00a7b18a931d3efb4c7900504"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:81f413674d85cfd0dfcd6512e10e0f33c19c21860342a4890c3a2b59479929f9"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:598d9ebc1e796431bbd068e41e4de4dc34312b7aa3292571bb3674a0cb415dd1"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a104c5694dfd2d864a6f91b0956eb5d5883234119cb40010115fd45a16da5e70"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6145afea51ff0af7f2564a05fa95eb46f542919e6523729663a5d285ecb3cf5e"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b46fa6eae1cd1c20e6e6f44e19984d438b6b2d8616d21d783d150df714f44078"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41836fe661cc98abfae476e14ba1906220f92c4e528771a8a3ae6a151242d2ae"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-win32.whl", hash = "sha256:a8808d5cf866c781150d36a3c8eb3adccfa41a8105d031bf27e92c251e3969d6"}, + {file = "sqlalchemy-2.0.41-cp312-cp312-win_amd64.whl", hash = "sha256:5b14e97886199c1f52c14629c11d90c11fbb09e9334fa7bb5f6d068d9ced0ce0"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4eeb195cdedaf17aab6b247894ff2734dcead6c08f748e617bfe05bd5a218443"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d4ae769b9c1c7757e4ccce94b0641bc203bbdf43ba7a2413ab2523d8d047d8dc"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a62448526dd9ed3e3beedc93df9bb6b55a436ed1474db31a2af13b313a70a7e1"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc56c9788617b8964ad02e8fcfeed4001c1f8ba91a9e1f31483c0dffb207002a"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c153265408d18de4cc5ded1941dcd8315894572cddd3c58df5d5b5705b3fa28d"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f67766965996e63bb46cfbf2ce5355fc32d9dd3b8ad7e536a920ff9ee422e23"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-win32.whl", hash = "sha256:bfc9064f6658a3d1cadeaa0ba07570b83ce6801a1314985bf98ec9b95d74e15f"}, + {file = "sqlalchemy-2.0.41-cp313-cp313-win_amd64.whl", hash = "sha256:82ca366a844eb551daff9d2e6e7a9e5e76d2612c8564f58db6c19a726869c1df"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:90144d3b0c8b139408da50196c5cad2a6909b51b23df1f0538411cd23ffa45d3"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:023b3ee6169969beea3bb72312e44d8b7c27c75b347942d943cf49397b7edeb5"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:725875a63abf7c399d4548e686debb65cdc2549e1825437096a0af1f7e374814"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81965cc20848ab06583506ef54e37cf15c83c7e619df2ad16807c03100745dea"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:dd5ec3aa6ae6e4d5b5de9357d2133c07be1aff6405b136dad753a16afb6717dd"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:ff8e80c4c4932c10493ff97028decfdb622de69cae87e0f127a7ebe32b4069c6"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-win32.whl", hash = "sha256:4d44522480e0bf34c3d63167b8cfa7289c1c54264c2950cc5fc26e7850967e45"}, + {file = "sqlalchemy-2.0.41-cp38-cp38-win_amd64.whl", hash = "sha256:81eedafa609917040d39aa9332e25881a8e7a0862495fcdf2023a9667209deda"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9a420a91913092d1e20c86a2f5f1fc85c1a8924dbcaf5e0586df8aceb09c9cc2"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:906e6b0d7d452e9a98e5ab8507c0da791856b2380fdee61b765632bb8698026f"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a373a400f3e9bac95ba2a06372c4fd1412a7cee53c37fc6c05f829bf672b8769"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:087b6b52de812741c27231b5a3586384d60c353fbd0e2f81405a814b5591dc8b"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:34ea30ab3ec98355235972dadc497bb659cc75f8292b760394824fab9cf39826"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8280856dd7c6a68ab3a164b4a4b1c51f7691f6d04af4d4ca23d6ecf2261b7923"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-win32.whl", hash = "sha256:b50eab9994d64f4a823ff99a0ed28a6903224ddbe7fef56a6dd865eec9243440"}, + {file = "sqlalchemy-2.0.41-cp39-cp39-win_amd64.whl", hash = "sha256:5e22575d169529ac3e0a120cf050ec9daa94b6a9597993d1702884f6954a7d71"}, + {file = "sqlalchemy-2.0.41-py3-none-any.whl", hash = "sha256:57df5dc6fdb5ed1a88a1ed2195fd31927e705cad62dedd86b46972752a80f576"}, + {file = "sqlalchemy-2.0.41.tar.gz", hash = "sha256:edba70118c4be3c2b1f90754d308d0b79c6fe2c0fdc52d8ddf603916f83f4db9"}, +] [package.dependencies] -greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +greenlet = {version = ">=1", markers = "python_version < \"3.14\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")"} +typing-extensions = ">=4.6.0" [package.extras] -aiomysql = ["greenlet (!=0.4.17)", "aiomysql"] -aiosqlite = ["typing_extensions (!=3.10.0.1)", "greenlet (!=0.4.17)", "aiosqlite"] -asyncio = ["greenlet (!=0.4.17)"] -asyncmy = ["greenlet (!=0.4.17)", "asyncmy (>=0.2.3,!=0.2.4)"] -mariadb_connector = ["mariadb (>=1.0.1,!=1.1.2)"] +aiomysql = ["aiomysql (>=0.2.0)", "greenlet (>=1)"] +aioodbc = ["aioodbc", "greenlet (>=1)"] +aiosqlite = ["aiosqlite", "greenlet (>=1)", "typing_extensions (!=3.10.0.1)"] +asyncio = ["greenlet (>=1)"] +asyncmy = ["asyncmy (>=0.2.3,!=0.2.4,!=0.2.6)", "greenlet (>=1)"] +mariadb-connector = ["mariadb (>=1.0.1,!=1.1.2,!=1.1.5,!=1.1.10)"] mssql = ["pyodbc"] -mssql_pymssql = ["pymssql"] -mssql_pyodbc = ["pyodbc"] -mypy = ["sqlalchemy2-stubs", "mypy (>=0.910)"] -mysql = ["mysqlclient (>=1.4.0,<2)", "mysqlclient (>=1.4.0)"] -mysql_connector = ["mysql-connector-python"] -oracle = ["cx_oracle (>=7,<8)", "cx_oracle (>=7)"] +mssql-pymssql = ["pymssql"] +mssql-pyodbc = ["pyodbc"] +mypy = ["mypy (>=0.910)"] +mysql = ["mysqlclient (>=1.4.0)"] +mysql-connector = ["mysql-connector-python"] +oracle = ["cx_oracle (>=8)"] +oracle-oracledb = ["oracledb (>=1.0.1)"] postgresql = ["psycopg2 (>=2.7)"] -postgresql_asyncpg = ["greenlet (!=0.4.17)", "asyncpg"] -postgresql_pg8000 = ["pg8000 (>=1.16.6,!=1.29.0)"] -postgresql_psycopg2binary = ["psycopg2-binary"] -postgresql_psycopg2cffi = ["psycopg2cffi"] -pymysql = ["pymysql (<1)", "pymysql"] -sqlcipher = ["sqlcipher3-binary"] +postgresql-asyncpg = ["asyncpg", "greenlet (>=1)"] +postgresql-pg8000 = ["pg8000 (>=1.29.1)"] +postgresql-psycopg = ["psycopg (>=3.0.7)"] +postgresql-psycopg2binary = ["psycopg2-binary"] +postgresql-psycopg2cffi = ["psycopg2cffi"] +postgresql-psycopgbinary = ["psycopg[binary] (>=3.0.7)"] +pymysql = ["pymysql"] +sqlcipher = ["sqlcipher3_binary"] [[package]] name = "sqlalchemy-utils" version = "0.38.3" description = "Various utility functions for SQLAlchemy." -category = "main" optional = false python-versions = "~=3.6" +groups = ["main"] +files = [ + {file = "SQLAlchemy-Utils-0.38.3.tar.gz", hash = "sha256:9f9afba607a40455cf703adfa9846584bf26168a0c5a60a70063b70d65051f4d"}, + {file = "SQLAlchemy_Utils-0.38.3-py3-none-any.whl", hash = "sha256:5c13b5d08adfaa85f3d4e8ec09a75136216fad41346980d02974a70a77988bf9"}, +] [package.dependencies] SQLAlchemy = ">=1.3" @@ -2577,61 +5749,129 @@ intervals = ["intervals (>=0.7.1)"] password = ["passlib (>=1.6,<2.0)"] pendulum = ["pendulum (>=2.0.5)"] phone = ["phonenumbers (>=5.9.2)"] -test = ["pytest (>=2.7.1)", "Pygments (>=1.2)", "Jinja2 (>=2.3)", "docutils (>=0.10)", "flexmock (>=0.9.7)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pg8000 (>=1.12.4)", "pytz (>=2014.2)", "python-dateutil (>=2.6)", "pymysql", "flake8 (>=2.4.0)", "isort (>=4.2.2)", "pyodbc", "backports.zoneinfo"] -test_all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)", "backports.zoneinfo"] +test = ["Jinja2 (>=2.3)", "Pygments (>=1.2)", "backports.zoneinfo ; python_version < \"3.9\"", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "isort (>=4.2.2)", "pg8000 (>=1.12.4)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] +test-all = ["Babel (>=1.3)", "Jinja2 (>=2.3)", "Pygments (>=1.2)", "arrow (>=0.3.4)", "backports.zoneinfo ; python_version < \"3.9\"", "colour (>=0.0.4)", "cryptography (>=0.6)", "docutils (>=0.10)", "flake8 (>=2.4.0)", "flexmock (>=0.9.7)", "furl (>=0.4.1)", "intervals (>=0.7.1)", "isort (>=4.2.2)", "passlib (>=1.6,<2.0)", "pendulum (>=2.0.5)", "pg8000 (>=1.12.4)", "phonenumbers (>=5.9.2)", "psycopg2 (>=2.5.1)", "psycopg2cffi (>=2.8.1)", "pymysql", "pyodbc", "pytest (>=2.7.1)", "python-dateutil", "python-dateutil (>=2.6)", "pytz (>=2014.2)"] timezone = ["python-dateutil"] url = ["furl (>=0.4.1)"] [[package]] -name = "sssom" -version = "0.3.17" -description = "Operations on SSSOM mapping tables" -category = "main" -optional = false -python-versions = ">=3.7" +name = "sqlite-fts4" +version = "1.0.3" +description = "Python functions for working with SQLite FTS4 search" +optional = true +python-versions = "*" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "sqlite-fts4-1.0.3.tar.gz", hash = "sha256:78b05eeaf6680e9dbed8986bde011e9c086a06cb0c931b3cf7da94c214e8930c"}, + {file = "sqlite_fts4-1.0.3-py3-none-any.whl", hash = "sha256:0359edd8dea6fd73c848989e1e2b1f31a50fe5f9d7272299ff0e8dbaa62d035f"}, +] + +[package.extras] +test = ["pytest"] + +[[package]] +name = "sqlite-migrate" +version = "0.1b0" +description = "A simple database migration system for SQLite, based on sqlite-utils" +optional = true +python-versions = "*" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "sqlite-migrate-0.1b0.tar.gz", hash = "sha256:8d502b3ca4b9c45e56012bd35c03d23235f0823c976d4ce940cbb40e33087ded"}, + {file = "sqlite_migrate-0.1b0-py3-none-any.whl", hash = "sha256:a4125e35e1de3dc56b6b6ec60e9833ce0ce20192b929ddcb2d4246c5098859c6"}, +] [package.dependencies] -bioregistry = "*" -click = "*" -deprecation = "*" -linkml = "*" -networkx = "*" -numpy = "*" -pandas = "*" -pandasql = "*" -pyparsing = "*" -pyyaml = "*" -rdflib = ">=6" -scipy = "*" -sparqlwrapper = "*" -sssom-schema = "*" -validators = [ - "*", - ">=0.0", +sqlite-utils = "*" + +[package.extras] +test = ["black", "mypy", "pytest", "ruff"] + +[[package]] +name = "sqlite-utils" +version = "3.38" +description = "CLI tool and Python library for manipulating SQLite databases" +optional = true +python-versions = ">=3.8" +groups = ["main"] +markers = "extra == \"llm\"" +files = [ + {file = "sqlite_utils-3.38-py3-none-any.whl", hash = "sha256:8a27441015c3b2ef475f555861f7a2592f73bc60d247af9803a11b65fc605bf9"}, + {file = "sqlite_utils-3.38.tar.gz", hash = "sha256:1ae77b931384052205a15478d429464f6c67a3ac3b4eafd3c674ac900f623aab"}, ] +[package.dependencies] +click = "*" +click-default-group = ">=1.2.3" +pluggy = "*" +python-dateutil = "*" +sqlite-fts4 = "*" +tabulate = "*" + [package.extras] -docs = ["sphinx", "sphinx-rtd-theme", "sphinx-autodoc-typehints", "sphinx-click", "recommonmark"] -test = ["pytest"] +docs = ["beanbag-docutils (>=2.0)", "codespell", "furo", "pygments-csv-lexer", "sphinx-autobuild", "sphinx-copybutton"] +flake8 = ["flake8"] +mypy = ["data-science-types", "mypy", "types-click", "types-pluggy", "types-python-dateutil", "types-tabulate"] +test = ["black (>=24.1.1)", "cogapp", "hypothesis", "pytest"] +tui = ["trogon"] + +[[package]] +name = "sssom" +version = "0.4.15" +description = "Operations on SSSOM mapping tables" +optional = false +python-versions = "<4.0.0,>=3.9" +groups = ["main"] +files = [ + {file = "sssom-0.4.15-py3-none-any.whl", hash = "sha256:22eca776daaceeaa0a9133504d869c051b4eabb59abe1b5c74a34d23b83e7b0d"}, + {file = "sssom-0.4.15.tar.gz", hash = "sha256:588fbd554e5e52a20e7782ad1f0d6a237f5df9bb8494fd6a74f2cf9304aa6397"}, +] + +[package.dependencies] +click = ">=8.1.6" +curies = ">=0.7.3" +deprecation = ">=2.1.0,<3.0.0" +importlib-resources = ">=6.1.1,<7.0.0" +linkml = ">1.7.10" +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"]} +pyyaml = ">=6.0.1,<7.0.0" +rdflib = ">=6.0.0" +scipy = {version = "*", extras = ["scipy"]} +sparqlwrapper = ">=2.0.0" +sssom-schema = ">=1.0.0,<2.0.0" +validators = ">=0.20.0" [[package]] name = "sssom-schema" -version = "0.9.4" +version = "1.0.0" 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.0,>=3.8.1" +groups = ["main"] +files = [ + {file = "sssom_schema-1.0.0-py3-none-any.whl", hash = "sha256:e41031637094eddce7e71d6642e1f7b3f972aae08c0039c1dd27fe5208835d15"}, + {file = "sssom_schema-1.0.0.tar.gz", hash = "sha256:62ae18f0f1a7fd10a1d0bfdf1167a8b5761b3f5473bc1e5243005e163aceaec9"}, +] [package.dependencies] -linkml-runtime = ">=1.1.24,<2.0.0" +linkml-runtime = "*" [[package]] name = "stack-data" -version = "0.6.0" +version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, + {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, +] [package.dependencies] asttokens = ">=2.1.0" @@ -2639,23 +5879,77 @@ executing = ">=1.2.0" pure-eval = "*" [package.extras] -tests = ["pytest", "typeguard", "pygments", "littleutils", "cython"] +tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "strsimpy" version = "0.2.1" description = "A library implementing different string similarity and distance measures" -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "strsimpy-0.2.1-py3-none-any.whl", hash = "sha256:d676a440d5d3dbcf5ba92d01814a03a218776ce07bd7a8185da7019e04cf9ba7"}, + {file = "strsimpy-0.2.1.tar.gz", hash = "sha256:0842eb57f7af86c882a59a1bc8721ec2580a267e563fd0503ced2972040372c9"}, +] + +[[package]] +name = "tabulate" +version = "0.9.0" +description = "Pretty-print tabular data" +optional = false +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, + {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, +] + +[package.extras] +widechars = ["wcwidth"] + +[[package]] +name = "tenacity" +version = "9.1.2" +description = "Retry code until it succeeds" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "tenacity-9.1.2-py3-none-any.whl", hash = "sha256:f77bf36710d8b73a50b2dd155c97b870017ad21afe6ab300326b0371b3b05138"}, + {file = "tenacity-9.1.2.tar.gz", hash = "sha256:1169d376c297e7de388d18b4481760d478b0e99a777cad3a9c86e556f4b697cb"}, +] + +[package.extras] +doc = ["reno", "sphinx"] +test = ["pytest", "tornado (>=4.5)", "typeguard"] + +[[package]] +name = "termcolor" +version = "3.1.0" +description = "ANSI color formatting for output in terminal" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa"}, + {file = "termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970"}, +] + +[package.extras] +tests = ["pytest", "pytest-cov"] [[package]] name = "terminado" -version = "0.17.0" +version = "0.18.1" description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "terminado-0.18.1-py3-none-any.whl", hash = "sha256:a4468e1b37bb318f8a86514f65814e1afc977cf29b3992a4500d9dd305dcceb0"}, + {file = "terminado-0.18.1.tar.gz", hash = "sha256:de09f2c4b85de4765f7714688fff57d3e75bad1f909b589fde880460c753fd2e"}, +] [package.dependencies] ptyprocess = {version = "*", markers = "os_name != \"nt\""} @@ -2663,488 +5957,547 @@ pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} tornado = ">=6.1.0" [package.extras] -docs = ["pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest-timeout", "pytest (>=7.0)"] +docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] +test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] +typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "tinycss2" -version = "1.2.1" +version = "1.4.0" description = "A tiny CSS parser" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "tinycss2-1.4.0-py3-none-any.whl", hash = "sha256:3a49cf47b7675da0b15d0c6e1df8df4ebd96e9394bb905a5775adb0d884c5289"}, + {file = "tinycss2-1.4.0.tar.gz", hash = "sha256:10c0972f6fc0fbee87c3edb76549357415e94548c1ae10ebccdea16fb404a9b7"}, +] [package.dependencies] webencodings = ">=0.4" [package.extras] -test = ["flake8", "isort", "pytest"] -doc = ["sphinx-rtd-theme", "sphinx"] +doc = ["sphinx", "sphinx_rtd_theme"] +test = ["pytest", "ruff"] [[package]] name = "tomli" -version = "2.0.1" +version = "2.2.1" description = "A lil' TOML parser" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main", "dev"] +markers = "python_version < \"3.11\"" +files = [ + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, +] [[package]] name = "tomlkit" -version = "0.11.6" +version = "0.13.2" description = "Style preserving TOML library" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] [[package]] name = "tornado" -version = "6.2" +version = "6.5" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "dev" -optional = false -python-versions = ">= 3.7" - -[[package]] -name = "tox" -version = "3.27.0" -description = "tox is a generic virtualenv management and test command line tool" -category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[package.dependencies] -colorama = {version = ">=0.4.1", markers = "platform_system == \"Windows\""} -filelock = ">=3.0.0" -packaging = ">=14" -pluggy = ">=0.12.0" -py = ">=1.4.17" -six = ">=1.14.0" -tomli = {version = ">=2.0.1", markers = "python_version >= \"3.7\" and python_version < \"3.11\""} -virtualenv = ">=16.0.0,<20.0.0 || >20.0.0,<20.0.1 || >20.0.1,<20.0.2 || >20.0.2,<20.0.3 || >20.0.3,<20.0.4 || >20.0.4,<20.0.5 || >20.0.5,<20.0.6 || >20.0.6,<20.0.7 || >20.0.7" - -[package.extras] -docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)", "sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"] -testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)", "psutil (>=5.6.1)", "pathlib2 (>=2.3.3)"] +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "tornado-6.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:f81067dad2e4443b015368b24e802d0083fecada4f0a4572fdb72fc06e54a9a6"}, + {file = "tornado-6.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:9ac1cbe1db860b3cbb251e795c701c41d343f06a96049d6274e7c77559117e41"}, + {file = "tornado-6.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7c625b9d03f1fb4d64149c47d0135227f0434ebb803e2008040eb92906b0105a"}, + {file = "tornado-6.5-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a0d8d2309faf015903080fb5bdd969ecf9aa5ff893290845cf3fd5b2dd101bc"}, + {file = "tornado-6.5-cp39-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03576ab51e9b1677e4cdaae620d6700d9823568b7939277e4690fe4085886c55"}, + {file = "tornado-6.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ab75fe43d0e1b3a5e3ceddb2a611cb40090dd116a84fc216a07a298d9e000471"}, + {file = "tornado-6.5-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:119c03f440a832128820e87add8a175d211b7f36e7ee161c631780877c28f4fb"}, + {file = "tornado-6.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:231f2193bb4c28db2bdee9e57bc6ca0cd491f345cd307c57d79613b058e807e0"}, + {file = "tornado-6.5-cp39-abi3-win32.whl", hash = "sha256:fd20c816e31be1bbff1f7681f970bbbd0bb241c364220140228ba24242bcdc59"}, + {file = "tornado-6.5-cp39-abi3-win_amd64.whl", hash = "sha256:007f036f7b661e899bd9ef3fa5f87eb2cb4d1b2e7d67368e778e140a2f101a7a"}, + {file = "tornado-6.5-cp39-abi3-win_arm64.whl", hash = "sha256:542e380658dcec911215c4820654662810c06ad872eefe10def6a5e9b20e9633"}, + {file = "tornado-6.5.tar.gz", hash = "sha256:c70c0a26d5b2d85440e4debd14a8d0b463a0cf35d92d3af05f5f1ffa8675c826"}, +] [[package]] name = "tqdm" -version = "4.64.1" +version = "4.67.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" +python-versions = ">=3.7" +groups = ["main"] +files = [ + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, +] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["py-make (>=0.1.0)", "twine", "wheel"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] [[package]] name = "traitlets" -version = "5.5.0" -description = "" -category = "dev" +version = "5.14.3" +description = "Traitlets Python configuration system" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, +] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] + +[[package]] +name = "typeguard" +version = "4.4.2" +description = "Run-time type checker for Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typeguard-4.4.2-py3-none-any.whl", hash = "sha256:77a78f11f09777aeae7fa08585f33b5f4ef0e7335af40005b0c422ed398ff48c"}, + {file = "typeguard-4.4.2.tar.gz", hash = "sha256:a6f1065813e32ef365bc3b3f503af8a96f9dd4e0033a02c28c4a4983de8c6c49"}, +] + +[package.dependencies] +importlib_metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} +typing_extensions = ">=4.10.0" + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme (>=1.3.0)"] +test = ["coverage[toml] (>=7)", "mypy (>=1.2.0) ; platform_python_implementation != \"PyPy\"", "pytest (>=7)"] + +[[package]] +name = "types-python-dateutil" +version = "2.9.0.20250516" +description = "Typing stubs for python-dateutil" +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "types_python_dateutil-2.9.0.20250516-py3-none-any.whl", hash = "sha256:2b2b3f57f9c6a61fba26a9c0ffb9ea5681c9b83e69cd897c6b5f668d9c0cab93"}, + {file = "types_python_dateutil-2.9.0.20250516.tar.gz", hash = "sha256:13e80d6c9c47df23ad773d54b2826bd52dbbb41be87c3f339381c1700ad21ee5"}, +] + +[[package]] +name = "types-setuptools" +version = "80.7.0.20250516" +description = "Typing stubs for setuptools" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "types_setuptools-80.7.0.20250516-py3-none-any.whl", hash = "sha256:c1da6c11698139c8307c6df5987592df940e956912c204e42d844ba821dd2741"}, + {file = "types_setuptools-80.7.0.20250516.tar.gz", hash = "sha256:57274b58e05434de42088a86074c9e630e5786f759cf9cc1e3015e886297ca21"}, +] [[package]] name = "typing-extensions" -version = "4.4.0" -description = "Backported and Experimental Type Hints for Python 3.7+" -category = "main" +version = "4.13.2" +description = "Backported and Experimental Type Hints for Python 3.8+" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main", "dev"] +files = [ + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, +] [[package]] name = "typing-inspect" -version = "0.8.0" +version = "0.9.0" description = "Runtime inspection utilities for typing module." -category = "main" optional = false python-versions = "*" +groups = ["main"] +files = [ + {file = "typing_inspect-0.9.0-py3-none-any.whl", hash = "sha256:9ee6fc59062311ef8547596ab6b955e1b8aa46242d854bfc78f4f6b0eff35f9f"}, + {file = "typing_inspect-0.9.0.tar.gz", hash = "sha256:b23fc42ff6f6ef6954e4852c1fb512cdd18dbea03134f91f856a95ccc9461f78"}, +] [package.dependencies] mypy-extensions = ">=0.3.0" typing-extensions = ">=3.7.4" +[[package]] +name = "typing-inspection" +version = "0.4.0" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, + {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + +[[package]] +name = "tzdata" +version = "2025.2" +description = "Provider of IANA time zone data" +optional = false +python-versions = ">=2" +groups = ["main"] +files = [ + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, +] + [[package]] name = "uri-template" -version = "1.2.0" +version = "1.3.0" description = "RFC 6570 URI Template Processor" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" +groups = ["main", "dev"] +files = [ + {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, + {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, +] [package.extras] -dev = ["mypy", "flake8 (<4.0.0)", "flake8-annotations", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-noqa", "flake8-requirements", "flake8-type-annotations", "flake8-use-fstring", "pep8-naming"] +dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] [[package]] -name = "urllib3" -version = "1.26.12" -description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" +name = "uritemplate" +version = "4.1.1" +description = "Implementation of RFC 6570 URI Templates" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" - -[package.extras] -brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +python-versions = ">=3.6" +groups = ["main"] +files = [ + {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, + {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, +] [[package]] -name = "validators" -version = "0.20.0" -description = "Python Data Validation for Humans™." -category = "main" +name = "url-normalize" +version = "2.2.1" +description = "URL normalization for Python" optional = false -python-versions = ">=3.4" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "url_normalize-2.2.1-py3-none-any.whl", hash = "sha256:3deb687587dc91f7b25c9ae5162ffc0f057ae85d22b1e15cf5698311247f567b"}, + {file = "url_normalize-2.2.1.tar.gz", hash = "sha256:74a540a3b6eba1d95bdc610c24f2c0141639f3ba903501e61a52a8730247ff37"}, +] [package.dependencies] -decorator = ">=3.4.0" +idna = ">=3.3" [package.extras] -test = ["pytest (>=2.2.3)", "flake8 (>=2.4.0)", "isort (>=4.2.2)"] +dev = ["mypy", "pre-commit", "pytest", "pytest-cov", "pytest-socket", "ruff"] [[package]] -name = "virtualenv" -version = "20.16.6" -description = "Virtual Python Environment builder" -category = "main" +name = "urllib3" +version = "2.4.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, +] -[package.dependencies] -distlib = ">=0.3.6,<1" -filelock = ">=3.4.1,<4" -platformdirs = ">=2.4,<3" +[package.extras] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[[package]] +name = "validators" +version = "0.35.0" +description = "Python Data Validation for Humans™" +optional = false +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "validators-0.35.0-py3-none-any.whl", hash = "sha256:e8c947097eae7892cb3d26868d637f79f47b4a0554bc6b80065dfe5aac3705dd"}, + {file = "validators-0.35.0.tar.gz", hash = "sha256:992d6c48a4e77c81f1b4daba10d16c3a9bb0dbb79b3a19ea847ff0928e70497a"}, +] [package.extras] -docs = ["proselint (>=0.13)", "sphinx (>=5.3)", "sphinx-argparse (>=0.3.2)", "sphinx-rtd-theme (>=1)", "towncrier (>=22.8)"] -testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] +crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] [[package]] name = "watchdog" -version = "2.1.9" +version = "6.0.0" description = "Filesystem events monitoring" -category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["main"] +files = [ + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, +] [package.extras] watchmedo = ["PyYAML (>=3.10)"] [[package]] name = "wcwidth" -version = "0.2.5" +version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, + {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, +] [[package]] name = "webcolors" -version = "1.12" -description = "A library for working with color names and color values formats defined by HTML and CSS." -category = "main" -optional = false -python-versions = ">=3.7" +version = "24.11.1" +description = "A library for working with the color formats defined by HTML and CSS." +optional = false +python-versions = ">=3.9" +groups = ["main", "dev"] +files = [ + {file = "webcolors-24.11.1-py3-none-any.whl", hash = "sha256:515291393b4cdf0eb19c155749a096f779f7d909f7cceea072791cb9095b92e9"}, + {file = "webcolors-24.11.1.tar.gz", hash = "sha256:ecb3d768f32202af770477b8b65f318fa4f566c22948673a977b00d589dd80f6"}, +] [[package]] name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, + {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, +] [[package]] name = "websocket-client" -version = "1.4.2" +version = "1.8.0" description = "WebSocket client for Python with low level API options" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "websocket_client-1.8.0-py3-none-any.whl", hash = "sha256:17b44cc997f5c498e809b22cdf2d9c7a9e71c02c8cc2b6c56e7c2d1239bfa526"}, + {file = "websocket_client-1.8.0.tar.gz", hash = "sha256:3239df9f44da632f96012472805d40a23281a991027ce11d2f45a6f24ac4c3da"}, +] [package.extras] -docs = ["Sphinx (>=3.4)", "sphinx-rtd-theme (>=0.5)"] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] [[package]] name = "widgetsnbextension" -version = "4.0.3" +version = "4.0.14" description = "Jupyter interactive widgets for Jupyter Notebook" -category = "dev" optional = false python-versions = ">=3.7" +groups = ["dev"] +files = [ + {file = "widgetsnbextension-4.0.14-py3-none-any.whl", hash = "sha256:4875a9eaf72fbf5079dc372a51a9f268fc38d46f767cbf85c43a36da5cb9b575"}, + {file = "widgetsnbextension-4.0.14.tar.gz", hash = "sha256:a3629b04e3edb893212df862038c7232f62973373869db5084aed739b437b5af"}, +] [[package]] name = "wrapt" -version = "1.14.1" +version = "1.17.2" description = "Module for decorators, wrappers and monkey patching." -category = "main" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" - -[[package]] -name = "yarl" -version = "1.8.1" -description = "Yet another URL library" -category = "main" optional = false -python-versions = ">=3.7" - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3d57c572081fed831ad2d26fd430d565b76aa277ed1d30ff4d40670b1c0dd984"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b5e251054542ae57ac7f3fba5d10bfff615b6c2fb09abeb37d2f1463f841ae22"}, + {file = "wrapt-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:80dd7db6a7cb57ffbc279c4394246414ec99537ae81ffd702443335a61dbf3a7"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a6e821770cf99cc586d33833b2ff32faebdbe886bd6322395606cf55153246c"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60fb58b90c6d63779cb0c0c54eeb38941bae3ecf7a73c764c52c88c2dcb9d72"}, + {file = "wrapt-1.17.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b870b5df5b71d8c3359d21be8f0d6c485fa0ebdb6477dda51a1ea54a9b558061"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4011d137b9955791f9084749cba9a367c68d50ab8d11d64c50ba1688c9b457f2"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1473400e5b2733e58b396a04eb7f35f541e1fb976d0c0724d0223dd607e0f74c"}, + {file = "wrapt-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3cedbfa9c940fdad3e6e941db7138e26ce8aad38ab5fe9dcfadfed9db7a54e62"}, + {file = "wrapt-1.17.2-cp310-cp310-win32.whl", hash = "sha256:582530701bff1dec6779efa00c516496968edd851fba224fbd86e46cc6b73563"}, + {file = "wrapt-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:58705da316756681ad3c9c73fd15499aa4d8c69f9fd38dc8a35e06c12468582f"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ff04ef6eec3eee8a5efef2401495967a916feaa353643defcc03fc74fe213b58"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4db983e7bca53819efdbd64590ee96c9213894272c776966ca6306b73e4affda"}, + {file = "wrapt-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9abc77a4ce4c6f2a3168ff34b1da9b0f311a8f1cfd694ec96b0603dff1c79438"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b929ac182f5ace000d459c59c2c9c33047e20e935f8e39371fa6e3b85d56f4a"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f09b286faeff3c750a879d336fb6d8713206fc97af3adc14def0cdd349df6000"}, + {file = "wrapt-1.17.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1a7ed2d9d039bd41e889f6fb9364554052ca21ce823580f6a07c4ec245c1f5d6"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:129a150f5c445165ff941fc02ee27df65940fcb8a22a61828b1853c98763a64b"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1fb5699e4464afe5c7e65fa51d4f99e0b2eadcc176e4aa33600a3df7801d6662"}, + {file = "wrapt-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9a2bce789a5ea90e51a02dfcc39e31b7f1e662bc3317979aa7e5538e3a034f72"}, + {file = "wrapt-1.17.2-cp311-cp311-win32.whl", hash = "sha256:4afd5814270fdf6380616b321fd31435a462019d834f83c8611a0ce7484c7317"}, + {file = "wrapt-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:acc130bc0375999da18e3d19e5a86403667ac0c4042a094fefb7eec8ebac7cf3"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:d5e2439eecc762cd85e7bd37161d4714aa03a33c5ba884e26c81559817ca0925"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:3fc7cb4c1c744f8c05cd5f9438a3caa6ab94ce8344e952d7c45a8ed59dd88392"}, + {file = "wrapt-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8fdbdb757d5390f7c675e558fd3186d590973244fab0c5fe63d373ade3e99d40"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb1d0dbf99411f3d871deb6faa9aabb9d4e744d67dcaaa05399af89d847a91d"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d18a4865f46b8579d44e4fe1e2bcbc6472ad83d98e22a26c963d46e4c125ef0b"}, + {file = "wrapt-1.17.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc570b5f14a79734437cb7b0500376b6b791153314986074486e0b0fa8d71d98"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6d9187b01bebc3875bac9b087948a2bccefe464a7d8f627cf6e48b1bbae30f82"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:9e8659775f1adf02eb1e6f109751268e493c73716ca5761f8acb695e52a756ae"}, + {file = "wrapt-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e8b2816ebef96d83657b56306152a93909a83f23994f4b30ad4573b00bd11bb9"}, + {file = "wrapt-1.17.2-cp312-cp312-win32.whl", hash = "sha256:468090021f391fe0056ad3e807e3d9034e0fd01adcd3bdfba977b6fdf4213ea9"}, + {file = "wrapt-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:ec89ed91f2fa8e3f52ae53cd3cf640d6feff92ba90d62236a81e4e563ac0e991"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6ed6ffac43aecfe6d86ec5b74b06a5be33d5bb9243d055141e8cabb12aa08125"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:35621ae4c00e056adb0009f8e86e28eb4a41a4bfa8f9bfa9fca7d343fe94f998"}, + {file = "wrapt-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a604bf7a053f8362d27eb9fefd2097f82600b856d5abe996d623babd067b1ab5"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cbabee4f083b6b4cd282f5b817a867cf0b1028c54d445b7ec7cfe6505057cf8"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49703ce2ddc220df165bd2962f8e03b84c89fee2d65e1c24a7defff6f988f4d6"}, + {file = "wrapt-1.17.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8112e52c5822fc4253f3901b676c55ddf288614dc7011634e2719718eaa187dc"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9fee687dce376205d9a494e9c121e27183b2a3df18037f89d69bd7b35bcf59e2"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:18983c537e04d11cf027fbb60a1e8dfd5190e2b60cc27bc0808e653e7b218d1b"}, + {file = "wrapt-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:703919b1633412ab54bcf920ab388735832fdcb9f9a00ae49387f0fe67dad504"}, + {file = "wrapt-1.17.2-cp313-cp313-win32.whl", hash = "sha256:abbb9e76177c35d4e8568e58650aa6926040d6a9f6f03435b7a522bf1c487f9a"}, + {file = "wrapt-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:69606d7bb691b50a4240ce6b22ebb319c1cfb164e5f6569835058196e0f3a845"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:4a721d3c943dae44f8e243b380cb645a709ba5bd35d3ad27bc2ed947e9c68192"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:766d8bbefcb9e00c3ac3b000d9acc51f1b399513f44d77dfe0eb026ad7c9a19b"}, + {file = "wrapt-1.17.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e496a8ce2c256da1eb98bd15803a79bee00fc351f5dfb9ea82594a3f058309e0"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40d615e4fe22f4ad3528448c193b218e077656ca9ccb22ce2cb20db730f8d306"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a5aaeff38654462bc4b09023918b7f21790efb807f54c000a39d41d69cf552cb"}, + {file = "wrapt-1.17.2-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a7d15bbd2bc99e92e39f49a04653062ee6085c0e18b3b7512a4f2fe91f2d681"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3890b508a23299083e065f435a492b5435eba6e304a7114d2f919d400888cc6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8c8b293cd65ad716d13d8dd3624e42e5a19cc2a2f1acc74b30c2c13f15cb61a6"}, + {file = "wrapt-1.17.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c82b8785d98cdd9fed4cac84d765d234ed3251bd6afe34cb7ac523cb93e8b4f"}, + {file = "wrapt-1.17.2-cp313-cp313t-win32.whl", hash = "sha256:13e6afb7fe71fe7485a4550a8844cc9ffbe263c0f1a1eea569bc7091d4898555"}, + {file = "wrapt-1.17.2-cp313-cp313t-win_amd64.whl", hash = "sha256:eaf675418ed6b3b31c7a989fd007fa7c3be66ce14e5c3b27336383604c9da85c"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c803c401ea1c1c18de70a06a6f79fcc9c5acfc79133e9869e730ad7f8ad8ef9"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:f917c1180fdb8623c2b75a99192f4025e412597c50b2ac870f156de8fb101119"}, + {file = "wrapt-1.17.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ecc840861360ba9d176d413a5489b9a0aff6d6303d7e733e2c4623cfa26904a6"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb87745b2e6dc56361bfde481d5a378dc314b252a98d7dd19a651a3fa58f24a9"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58455b79ec2661c3600e65c0a716955adc2410f7383755d537584b0de41b1d8a"}, + {file = "wrapt-1.17.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4e42a40a5e164cbfdb7b386c966a588b1047558a990981ace551ed7e12ca9c2"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:91bd7d1773e64019f9288b7a5101f3ae50d3d8e6b1de7edee9c2ccc1d32f0c0a"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bb90fb8bda722a1b9d48ac1e6c38f923ea757b3baf8ebd0c82e09c5c1a0e7a04"}, + {file = "wrapt-1.17.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:08e7ce672e35efa54c5024936e559469436f8b8096253404faeb54d2a878416f"}, + {file = "wrapt-1.17.2-cp38-cp38-win32.whl", hash = "sha256:410a92fefd2e0e10d26210e1dfb4a876ddaf8439ef60d6434f21ef8d87efc5b7"}, + {file = "wrapt-1.17.2-cp38-cp38-win_amd64.whl", hash = "sha256:95c658736ec15602da0ed73f312d410117723914a5c91a14ee4cdd72f1d790b3"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99039fa9e6306880572915728d7f6c24a86ec57b0a83f6b2491e1d8ab0235b9a"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2696993ee1eebd20b8e4ee4356483c4cb696066ddc24bd70bcbb80fa56ff9061"}, + {file = "wrapt-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:612dff5db80beef9e649c6d803a8d50c409082f1fedc9dbcdfde2983b2025b82"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:62c2caa1585c82b3f7a7ab56afef7b3602021d6da34fbc1cf234ff139fed3cd9"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c958bcfd59bacc2d0249dcfe575e71da54f9dcf4a8bdf89c4cb9a68a1170d73f"}, + {file = "wrapt-1.17.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc78a84e2dfbc27afe4b2bd7c80c8db9bca75cc5b85df52bfe634596a1da846b"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba0f0eb61ef00ea10e00eb53a9129501f52385c44853dbd6c4ad3f403603083f"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e1fe0e6ab7775fd842bc39e86f6dcfc4507ab0ffe206093e76d61cde37225c8"}, + {file = "wrapt-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c86563182421896d73858e08e1db93afdd2b947a70064b813d515d66549e15f9"}, + {file = "wrapt-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f393cda562f79828f38a819f4788641ac7c4085f30f1ce1a68672baa686482bb"}, + {file = "wrapt-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:36ccae62f64235cf8ddb682073a60519426fdd4725524ae38874adf72b5f2aeb"}, + {file = "wrapt-1.17.2-py3-none-any.whl", hash = "sha256:b18f2d1533a71f069c7f82d524a52599053d4c7166e9dd374ae2136b7f40f7c8"}, + {file = "wrapt-1.17.2.tar.gz", hash = "sha256:41388e9d4d1522446fe79d3213196bd9e3b301a336965b9e27ca2788ebd122f3"}, +] [[package]] name = "zipp" -version = "3.10.0" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" -category = "main" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" +groups = ["main", "dev"] +markers = "python_version == \"3.9\"" +files = [ + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, +] [package.extras] -docs = ["sphinx (>=3.5)", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "furo", "jaraco.tidelift (>=1.4)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "flake8 (<5)", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "jaraco.functools", "more-itertools", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\""] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["big-O", "importlib-resources ; python_version < \"3.9\"", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-ignore-flaky"] +type = ["pytest-mypy"] [extras] docs = [] -mariadb = [] +duckdb = ["duckdb"] +llm = ["llm"] +mariadb = ["mariadb"] +postgres = ["psycopg2-binary"] [metadata] -lock-version = "1.1" +lock-version = "2.1" python-versions = "^3.9" -content-hash = "0ccf9b90a2063125515a2400b79f34541f5dd6fa09a5ed9d4b5d50150b8a2b49" - -[metadata.files] -aiohttp = [] -aiosignal = [] -alabaster = [] -antlr4-python3-runtime = [] -anyio = [] -appdirs = [] -appnope = [] -argon2-cffi = [] -argon2-cffi-bindings = [] -arrow = [] -asttokens = [] -async-timeout = [] -attrs = [] -babel = [] -backcall = [] -bcp47 = [] -beautifulsoup4 = [] -bioregistry = [] -bleach = [] -certifi = [] -cffi = [] -cfgraph = [] -chardet = [] -charset-normalizer = [] -class-resolver = [] -click = [] -click-log = [] -colorama = [] -curies = [] -debugpy = [] -decorator = [] -defusedxml = [] -deprecated = [] -deprecation = [] -distlib = [] -docopt = [] -docutils = [] -entrypoints = [] -et-xmlfile = [] -exceptiongroup = [] -executing = [] -fastjsonschema = [] -fastobo = [] -filelock = [] -fqdn = [] -frozenlist = [] -fsspec = [] -funowl = [] -ghp-import = [] -graphviz = [] -greenlet = [] -hbreader = [] -idna = [] -imagesize = [] -importlib-metadata = [] -inflect = [] -iniconfig = [] -ipykernel = [] -ipython = [] -ipython-genutils = [] -ipywidgets = [] -isodate = [] -isoduration = [] -jedi = [] -jinja2 = [] -json-flattener = [] -jsonasobj = [] -jsonasobj2 = [] -jsonpatch = [] -jsonpath-ng = [] -jsonpointer = [] -jsonschema = [] -jupyter = [] -jupyter-client = [] -jupyter-console = [] -jupyter-core = [] -jupyter-server = [] -jupyterlab-pygments = [] -jupyterlab-widgets = [] -kgcl-rdflib = [] -kgcl-schema = [] -lark = [] -linkml = [] -linkml-dataops = [] -linkml-runtime = [] -lxml = [] -markdown = [] -markdown-it-py = [] -markupsafe = [] -matplotlib-inline = [] -mdit-py-plugins = [] -mdurl = [] -mergedeep = [] -mistune = [] -mkdocs = [] -more-click = [] -multidict = [] -mypy-extensions = [] -myst-parser = [] -nbclassic = [] -nbclient = [] -nbconvert = [] -nbformat = [] -nest-asyncio = [] -networkx = [] -notebook = [] -notebook-shim = [] -num2words = [] -numpy = [] -nxontology = [] -oaklib = [] -ols-client = [] -ontoportal-client = [] -openpyxl = [] -packaging = [] -pandas = [] -pandasql = [] -pandera = [] -pandocfilters = [] -parse = [] -parso = [] -pexpect = [] -pickleshare = [] -platformdirs = [] -pluggy = [] -ply = [] -prefixcommons = [] -prefixmaps = [] -prometheus-client = [] -prompt-toolkit = [] -pronto = [] -psutil = [] -psycopg2-binary = [] -ptyprocess = [] -pure-eval = [] -py = [] -pyarrow = [] -pycparser = [] -pydantic = [] -pygments = [] -pyjsg = [] -pyparsing = [] -pyrsistent = [] -pyshex = [] -pyshexc = [] -pystow = [] -pytest = [] -pytest-logging = [] -python-dateutil = [] -pytrie = [] -pytz = [] -pywin32 = [] -pywinpty = [] -pyyaml = [] -pyyaml-env-tag = [] -pyzmq = [] -qtconsole = [] -qtpy = [] -quantulum3 = [] -ratelimit = [] -rdflib = [] -rdflib-jsonld = [] -rdflib-shim = [] -requests = [] -rfc3339-validator = [] -rfc3987 = [] -"ruamel.yaml" = [] -"ruamel.yaml.clib" = [] -scipy = [] -semsql = [] -send2trash = [] -shexjsg = [] -six = [] -sniffio = [] -snowballstemmer = [] -sortedcontainers = [] -soupsieve = [] -sparqlslurper = [] -sparqlwrapper = [] -sphinx = [] -sphinx-click = [] -sphinx-pdj-theme = [] -sphinx-rtd-theme = [] -sphinxcontrib-applehelp = [] -sphinxcontrib-devhelp = [] -sphinxcontrib-htmlhelp = [] -sphinxcontrib-jsmath = [] -sphinxcontrib-mermaid = [] -sphinxcontrib-qthelp = [] -sphinxcontrib-serializinghtml = [] -sqlalchemy = [] -sqlalchemy-utils = [] -sssom = [] -sssom-schema = [] -stack-data = [] -strsimpy = [] -terminado = [] -tinycss2 = [] -tomli = [] -tomlkit = [] -tornado = [] -tox = [] -tqdm = [] -traitlets = [] -typing-extensions = [] -typing-inspect = [] -uri-template = [] -urllib3 = [] -validators = [] -virtualenv = [] -watchdog = [] -wcwidth = [] -webcolors = [] -webencodings = [] -websocket-client = [] -widgetsnbextension = [] -wrapt = [] -yarl = [] -zipp = [] +content-hash = "36592b2404117e8f8e38e7c1b6b170def08c65c362e74c4e35bfd190d8a9225b" diff --git a/pre_poetry/Makefile b/pre_poetry/Makefile deleted file mode 100644 index 7fecd7a..0000000 --- a/pre_poetry/Makefile +++ /dev/null @@ -1,122 +0,0 @@ -#!/usr/bin/env python - -export PYTHONPATH=. -.PHONY: data/felix_modifications.tsv -.PHONY: clean - -# .PHONY: inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml - -# https://docs.google.com/spreadsheets/d/1VFeUZqLmnmXDS1JcyXQbMgF513WyUBgz/edit#gid=1742629071 - -test: - pytest tests/test_*py - -unit-tests: - pytest tests/unit/*.py - -integration-tests: - pytest tests/*.py - -typecheck: - mypy kgx --ignore-missing-imports - -schema_automator/dosdp/model.py: schema_automator/dosdp/dosdp_linkml.yaml - gen-python $< > $@ && python -m schema_automator.dosdp.model - -inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml: - schema_automator/infer_model.py \ - tsv2model \ - -E species \ - data/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.tsv > \ - inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml - -# samples of mapping enumerables to semantic terms via BioPortal -target/species_enum_ncbitaxon.yaml: inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml - schema_automator/bioportal-enum-annotation.py \ - --modelfile inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml \ - --enum_source species_enum \ - --ontoprefix ncbitaxon > target/species_enum_ncbitaxon.yaml - -target/species_enum_all_bp.yaml: inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml - schema_automator/bioportal-enum-annotation.py \ - --modelfile inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml \ - --enum_source species_enum > \ - target/species_enum_all_bp.yaml - -target/type_enum_so.yaml: inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml - schema_automator/bioportal-enum-annotation.py \ - --modelfile inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml \ - --enum_source type_enum \ - --ontoprefix so > \ - target/type_enum_so.yaml - -data/felix_modifications.tsv: - schema_automator/get_felix_tsv.py - -inferred-models/felix_modifications.yaml: data/felix_modifications.tsv - schema_automator/infer_model.py \ - tsv2model \ - data/felix_modifications.tsv > \ - inferred-models/felix_modifications.yaml - -target/felix_modifications_modification_type_enum_so.yaml: inferred-models/felix_modifications.yaml - schema_automator/bioportal-enum-annotation.py \ - --modelfile inferred-models/felix_modifications.yaml \ - --enum_source modification_type_enum \ - --ontoprefix so > \ - target/felix_modifications_modification_type_enum_so.yaml - -copy-pfx: - find ../phenopacket-schema -name "*.proto" -exec cp {} tests/resources/phenopackets/ \; - -pfx-fix-imports: - perl -pi -ne 's@import "http://github.com/.*/@import"@' tests/resources/phenopackets/*proto - -clean: - [ ! -e inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml ] || \ - rm inferred-models/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml - [ ! -e target/species_enum_ncbitaxon.yaml ] || rm target/species_enum_ncbitaxon.yaml - [ ! -e target/species_enum_all_bp.yaml ] || rm target/species_enum_all_bp.yaml - [ ! -e target/type_enum_so.yaml ] || rm target/type_enum_so.yaml - [ ! -e target/felix_modifications.tsv ] || rm felix_modifications.tsv - [ ! -e inferred-models/felix_modifications.yaml ] || rm inferred-models/felix_modifications.yaml - [ ! -e target/felix_modifications_modification_type_enum_so.yaml ] || rm target/felix_modifications_modification_type_enum_so.yaml - -# DOCKER - -# Building docker image -VERSION = "v1.1.7" -IM=monarchinitiative/linkml -DEV=monarchinitiative/linkml-dev - -docker-build: - docker build $(CACHE) \ - -t $(IM):$(VERSION) -t $(IM):latest -t $(DEV):latest \ - . - -docker-test: - docker run -v $(PWD):/work -w /work/ --rm -ti linkml/linkml bash - - -docker-build-no-cache: - $(MAKE) build CACHE=--no-cache - -docker-build-dev: - docker build --build-arg ODK_VERSION=$(VERSION) \ - -t $(DEV):$(VERSION) -t $(DEV):latest \ - . - -docker-clean: - docker kill $(IM) || echo not running - docker rm $(IM) || echo not made - -#### Publishing ##### - -docker-publish-no-build: - docker push $(IM):latest - docker push $(IM):$(VERSION) - -docker-publish: docker-build - $(MAKE) docker-publish-no-build - - diff --git a/pre_poetry/README.md b/pre_poetry/README.md deleted file mode 100644 index ac97cd8..0000000 --- a/pre_poetry/README.md +++ /dev/null @@ -1 +0,0 @@ -placeholder for local and temporary files. on .gitignore, so not synced. diff --git a/pre_poetry/enum_annotator.md b/pre_poetry/enum_annotator.md deleted file mode 100644 index 56b581f..0000000 --- a/pre_poetry/enum_annotator.md +++ /dev/null @@ -1,158 +0,0 @@ -# `webmap_enums.py` documentation - - - -`webmap_enums.py` reads the labels of enums in a LinkML model and submits them to a web-based term mapping service. Rudimentary code for using the BioPortal annotator has been commented out as the OLS term search has be emphasized in recent development effort. - - All of the mappings are written to a TSV (`mappings_log.tsv` by default) file specified by `--tabular_outputfile` - -The enums' descriptions and meanings can be overwritten if the following two conditions are true: - -- If the cosine distance between the enum's label and the best search result's label or synonyms is less than or equal to the threshold (`--maxdist`, 0.05) -- If there was no meaning in the input, or if the `--overwite_meaning` is set - -The model is written out to `STDOUT`, whether any enums have been updated or not. - -`webmap_enums.py` should be executed from the `linkml-model-enrichment` repo's root directory. The input files mentioned in the examples below are not guaranteed to be present in a cloned `linkml-model-enrichment` repo. - -**Convert a TSV file into a LinkML YAML file** -schema_automator/infer_model.py tsv2model -E Taxon -E FAO -E Engineering tests/resources/webmap_enums.tsv > target/webmap_enums.yaml - -**Map taxon-related enums from a sample file to NCBItaxon terms, without overwriting anything** - -```bash -./schema_automator/enum_annotator.py \ ---verbosity DEBUG \ ---modelfile target/webmap_enums.yaml \ ---tabular_outputfile target/ncbitaxon_mappings_log.tsv \ ---ontoprefix ncbitaxon \ ---enum_list Taxon_enum \ ---search_engine OLS > target/ncbitaxon_mappings.yaml -``` - -*That takes a little less than 2 minutes for 26 enum lables, on a 2020 Intel MacBook Pro with a 200 Mbps network connection. `webmap_enums.py` has not been optimized for speed in any way. The greatest time cost appears to come from waiting for responses from the search engine. While the BioPortal annotator indicates which portion of the enum label was matched to which property of the matched terms as part of the search itself, retrieving the same information from OLS requires retrieving the term details for each matched term. One example of a potential improvement to `webmap_enums.py` would be caching search results so that similar labels would not be submitted multiple times.* - -*The OLS search may be retrieving proper mappings for* Lentivirus.human-immunodeficiency-virus1 (Human immunodeficiency virus 1, NCBITaxon:11676) *and* Nepovirus.Tobacco-ringspot-virus (Tobacco ringspot virus, NCBITaxon:12282), *but terms that combine a genus and a species are handled in any special way, so that is a vulnerability at this time.* - -*In the default configuration,* Simian virus 40 *is incorrectly mapped to* Simian virus 41, NCBITaxon:2560766. NCBITaxon:1891767 'Macaca mulatta polyomavirus 1' is probably the correct mapping, with equivalent name 'Simian virus 40'. NCBITaxon:10633 is an alternative ID. I have not found any configuration of `webmap_enums.py` to retrieve the correct term for this string. - -*In the default configuration, no acceptable mappings are found for the following. (The same iterative approach can help here, too.)* - -- '#N/A' - - - *No NCBItaxon mapping expected.* - -- 'Saccharomyces cerevisiae/Bacillus subtilis/Bacillus subtilis' - - - *Multiple taxa in input. No NCBItaxon mapping expected.* - -- 'herpes.simplex.virus-1' - - - NCBITaxon:10298 'Human alphaherpesvirus 1' *has the related genbank synonym* 'Herpes simplex virus 1' *and can be found by prioritizing non-label annotations with the modification* `--query_fields annotations,label` - -- 'Human influenza hemagglutinin' - - - *Taxon + protein. No NCBItaxon mapping expected* - -- 'NA' - - - *No NCBItaxon mapping expected.* - -- 'phage.lambda' - - - NCBITaxon:10710 *has the label* Escherichia virus Lambda. 'Phage lambda' *or* 'lambda phage' *are assigned to several different synonyms and annotations. This hit can be retrieved by prioritizing annotations hits over label hits with* `--query_fields annotations,label`. - -- 'Pseudomonas plasmid pVS1' - - - *The default search retrieves* NCBITaxon:219557, *labeled* 'Plasmid pVS1'. *No other relevant annotations are available, so the word 'Pseudomonas' becomes noise in the string distance calculation. Perhaps a string distance metric other than cosine would help?* - -- 'SARS-CoV-2' - - - NCBITaxon:2697049 *has the label* Severe acute respiratory syndrome coronavirus 2 *and the genbank acronym* 'SARS-CoV-2'. *This hit can be retrieved by prioritizing annotations hits over label hits with* `--query_fields annotations,label` *and by disabling the substitution of whitespace for hyphens with something like* `--replaced_chars ._` - - - -**Add Sequence Ontology mappings on top of the NCBItaxon mappings** - -```bash -./schema_automator/enum_annotator.py \ ---verbosity DEBUG \ ---modelfile target/ncbitaxon_mappings.yaml \ ---tabular_outputfile target/ncbi_so_mappings_log.tsv \ ---ontoprefix so \ ---enum_list Engineering_enum \ ---search_engine OLS > target/ncbi_so_mappings.yaml -``` - - - -**Add ENVO mappings for MIxS soil types** - -```bash -./schema_automator/enum_annotator.py \ ---verbosity DEBUG \ ---modelfile target/ncbi_so_mappings.yaml \ ---tabular_outputfile target/ncbi_so__envo_mappings.tsv \ ---ontoprefix envo \ ---enum_list FAO_enum \ ---search_engine OLS > target/ncbi_so__envo_mappings.yaml -``` - - - -### Options - -```bash -enum_annotator.py [OPTIONS] - - Uses web-based ontology lookup tools to map the permitted values of enums - from linkml files to CURIES. Optionally overwrites the meaning with a - CURIE and the description with a preferred label. Writes the resulting - YAML to STDOUT. - -Options: - -v, --verbosity LVL Either CRITICAL, ERROR, WARNING, INFO or - DEBUG - - -f, --modelfile PATH Path to a YAML linkml file containing - enumerated values. [required] - - -t, --tabular_outputfile PATH A tsv dump of all search results will be - written to this file. [default: - mappings_log.tsv] - - -p, --ontoprefix TEXT comma-separated list of (abbreviated) - ontologies to search over. [default: - NCBITaxon,SO,ENVO,PATO,GO,OBI] - - -e, --enum_list TEXT Comma-separated list of enums to search - with. Defaults to all enums. - - -q, --query_fields TEXT Comma-separated list of term properties to - include in string similarity calculation. - Defaults to label,synonym,description,short_ - form,obo_id,annotations,logical_description, - iri. - - -c, --replaced_chars TEXT Characters to replace with whitespace. - [default: \.\_\- ] - - -n, --min_search_chars INTEGER TEMPORARILY DISABLED. Queries with fewer - characters will not be submitted in the - search. [default: 2] - - -r, --row_req INTEGER Requested number of search results. - [default: 5] - - -x, --maxdist FLOAT Maximum string distance between query and - best matching term's best matching property. - [default: 0.05] - - -m, --overwite_meaning Should existing enum meanings and - descriptions be overwritten? - - -s, --search_engine TEXT BioPortal option has been temporarily - disabled. [default: OLS] - - --help Show this message and exit. -``` diff --git a/pre_poetry/enum_annotator.py b/pre_poetry/enum_annotator.py deleted file mode 100755 index 10c408f..0000000 --- a/pre_poetry/enum_annotator.py +++ /dev/null @@ -1,370 +0,0 @@ -#!/usr/bin/env python3 - -from __future__ import print_function -import json -import sys -import urllib.error -import urllib.parse -import urllib.request -from strsimpy.cosine import Cosine -import yaml -import re -import pandas as pds -import requests -import click -import logging -import click_log -import random - -logger = logging.getLogger(__name__) -click_log.basic_config(logger) -pds.set_option('display.expand_frame_repr', False) - -global inferred_model, ecg, opg, rrg, qfg, mdg, omg -ecg = None -failures = [] - -cols2display = ['enum_class', 'orig_enum', 'query', 'obo_id', 'pref_lab', - 'name', 'cosine_dist', 'dist_ok', 'type', 'scope', 'rank'] - -success_frame = pds.DataFrame(columns=cols2display) - - -# MIN CHARACTERS FOR SEARCH NOT BEING ENFORCED - -# TODO write mapped terms back in as meanings -# give option for overwriting? -# TODO all user to specify enum classes to process -# when verbose, stderr gets status and debugging info -# stdout gets the modified model as yaml and should be redirected to a file - -# OLS dataframe structure not identical to previous BP dataframes: -# different columns -# BP shows one best row -# OLS lists up to N best -# not filtering out small queries in OLS approach yet -# (OLS approach?) neither handling nor optimizing for repeat values -# not merging results back into model yet - -# examples of previously challenging mappings -# # bicarbonate -# # term_iri = 'https://www.ebi.ac.uk/ols/api/ontologies/chebi/terms/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FCHEBI_32139' -# # fungus -# # term_iri = 'https://www.ebi.ac.uk/ols/api/ontologies/ncbitaxon/terms/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FNCBITaxon_33169' -# # sars-cov-2 -# # term_iri = 'https://www.ebi.ac.uk/ols/api/ontologies/ncbitaxon/terms/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FNCBITaxon_2697049' -# # Escherichia phage T7 -# # # http://purl.obolibrary.org/obo/NCBITaxon_10760 -# # term_iri = 'https://www.ebi.ac.uk/ols/api/ontologies/ncbitaxon/terms/http%253A%252F%252Fpurl.obolibrary.org%252Fobo%252FNCBITaxon_10760' - - -def eprint(*args, **kwargs): - print(*args, file=sys.stderr, **kwargs) - - -# TODO add filter based on min_search_chars_param? -# no longer requiring a minimum search length -def one_enum_to_ols_frame_list(permitteds, one_enum_param): - global failures - global success_frame - - per_enum_frame = pds.DataFrame(columns=cols2display) - - for orig_enum in permitteds: - - temp = one_enum_param + ": " + orig_enum - logger.info(temp) - - # tidied_enum = re.sub(r'[_,.\-;@#?!&$ ]+', ' ', orig_enum) - if ecg is not None: - tidied_enum = re.sub(r'[' + ecg + ']+', ' ', orig_enum) - - ontologies_phrase = '' - if len(opg) > 1: - ontologies_phrase = 'ontology=' + opg.lower() - - qf_phrase = '' - if len(qfg) > 1: - qf_phrase = 'queryFields=' + qfg.lower() - - # requiring local loses EROs annotations of SV40 - # 'local=true' + '&' + \ - request_string = 'http://www.ebi.ac.uk/ols/api/search?q=' + \ - urllib.parse.quote(tidied_enum) + '&' + \ - 'type=class' + '&' + \ - 'exact=false' + '&' + \ - ontologies_phrase + "&" + \ - 'rows=' + str(rrg) + '&' + \ - qf_phrase - - logger.debug(request_string) - - response_param = requests.get(request_string) - ols_string_search_res_j = response_param.json() - ols_string_search_res_frame = pds.DataFrame(ols_string_search_res_j['response']['docs']) - ols_string_search_res_frame.insert(0, "query", tidied_enum) - - # did the string search get any result rows? - r, c = ols_string_search_res_frame.shape - if r == 0: - no_search_res_dict = {'description': '', 'id': orig_enum, 'iri': '', 'is_defining_ontology': '', - 'label': '', 'obo_id': '', 'ontology_name': '', 'ontology_prefix': '', - 'short_form': '', 'type': ''} - no_search_res_frame = pds.DataFrame([no_search_res_dict]) - ols_string_search_res_frame = ols_string_search_res_frame.append(no_search_res_frame) - failures.append(orig_enum) - - ols_string_search_res_frame['query'] = orig_enum - inner_cosine_obj = Cosine(1) - - annotations_frame = pds.DataFrame(columns=['name', 'obo_id', 'scope', 'type', 'xrefs']) - - for ols_string_search_res_row in ols_string_search_res_frame.itertuples(index=False): - once = urllib.parse.quote(ols_string_search_res_row.iri, safe='') - twice = urllib.parse.quote(once, safe='') - # build url from base - term_retr_base = 'http://www.ebi.ac.uk/ols/api/ontologies/' - term_retr_assembled = term_retr_base + ols_string_search_res_row.ontology_name + '/terms/' + twice - term_details = requests.get(term_retr_assembled) - term_json = term_details.json() - has_label = 'label' in set(term_json.keys()) - if has_label: - logger.debug(term_retr_assembled) - temp = term_json['label'] - logger.debug(temp) - label_frame = pds.DataFrame([[term_json['label'], 'label', 'label', '']], - columns=['name', 'scope', 'type', 'xrefs']) - label_frame['obo_id'] = term_json['obo_id'] - label_frame['pref_lab'] = term_json['label'] - annotations_frame = annotations_frame.append(label_frame, ignore_index=True) - # also get other properties? - - has_synonyms = 'obo_synonym' in set(term_json.keys()) - if has_synonyms: - obo_syn_json = term_json['obo_synonym'] - obo_syn_frame = pds.DataFrame(obo_syn_json) - obo_syn_frame['obo_id'] = term_json['obo_id'] - obo_syn_frame['pref_lab'] = term_json['label'] - annotations_frame = annotations_frame.append(obo_syn_frame, ignore_index=True) - - # # don't process every kind of annotation, like genetic code - # has_annotations = 'annotation' in set(term_json.keys()) - # if has_annotations: - # obo_ano_json = term_json['annotation'] - # for anokey in obo_ano_json.keys(): - # for keyval in obo_ano_json[anokey]: - # new_row = {'name': keyval, - # 'obo_id': term_json['obo_id'], - # 'scope': anokey, - # 'type': 'annotation', - # 'xrefs': '', - # 'pref_lab': term_json['label']} - # annotations_frame = annotations_frame.append(new_row, ignore_index=True) - - annotations_row_count = len(annotations_frame.index) - - if annotations_row_count == 0: - logger.warning('NO ANNOTATIONS') - manual_row = pds.Series(['', '', '', '', '', '']) - row_df = pds.DataFrame([manual_row], columns=['name', 'obo_id', 'scope', 'type', 'xrefs', 'pref_lab']) - annotations_frame = pds.concat([row_df, annotations_frame], ignore_index=True) - failures.append(orig_enum) - annotations_frame['enum_class'] = one_enum_param - annotations_frame['query'] = tidied_enum - annotations_frame['orig_enum'] = orig_enum - # check whether anny of the annotation on any of the hits have an - # acceptable cosine string distance - annotations_frame['name'] = annotations_frame['name'].fillna('') - annotations_frame['cosine_dist'] = \ - annotations_frame.apply(lambda row: inner_cosine_obj.distance(tidied_enum.strip().lower(), - row['name'].strip().lower()), - axis=1) - annotations_frame = annotations_frame.sort_values('cosine_dist') - annotations_frame['dist_ok'] = annotations_frame['cosine_dist'] <= mdg - annotations_frame['rank'] = list(range(1, len(annotations_frame.index)+1)) - - # annotations_frame = annotations_frame[ - # ['enum_class', 'orig_enum', 'query', 'name', 'cosine_dist', 'dist_ok', - # 'obo_id', 'pref_lab', 'type', 'scope']] - - annotations_frame = annotations_frame[cols2display] - - # do something with xrefs? - logger.debug(annotations_frame) - - # get best acceptable row - acceptable_cosine = annotations_frame[annotations_frame['cosine_dist'] <= mdg] - acceptable_row_count = len(acceptable_cosine.index) - if acceptable_row_count > 0: - best_acceptable = acceptable_cosine.iloc[0] - success_frame = success_frame.append(best_acceptable) - # check if permitted value already has a meaning - meaning_search = list(inferred_model['enums'][one_enum_param]['permissible_values'][orig_enum].keys()) - if 'meaning' in meaning_search: - has_meaning = True - else: - has_meaning = False - meaningless = not has_meaning - if meaningless or omg: - # insert meaning - inferred_model['enums'][one_enum_param]['permissible_values'][orig_enum]['meaning'] = best_acceptable[ - 'obo_id'] - inferred_model['enums'][one_enum_param]['permissible_values'][orig_enum]['description'] = \ - best_acceptable['pref_lab'] - else: - temp = 'NO ACCEPTABLE MAPPINGS FOR ' + one_enum_param + " " + orig_enum - logger.warning(temp) - # sort and make unique - failures.append(orig_enum) - per_enum_frame = per_enum_frame.append(annotations_frame) - # I think there will be one success frame for each enum - success_frame = success_frame[cols2display] - success_frame = success_frame[list(annotations_frame.columns)] - logger.info(success_frame) - return per_enum_frame - - -def all_enums_to_ols(inferred_model_param, the_enums_param): - multi_enum_frame = pds.DataFrame(columns=cols2display) - for one_enum in the_enums_param: - permitteds = get_one_enum_class(inferred_model_param, one_enum) - one_enum_class_list = one_enum_to_ols_frame_list(permitteds, one_enum) - multi_enum_frame = multi_enum_frame.append(one_enum_class_list) - return multi_enum_frame - - -def get_one_enum_class(inferred_model_param, enum_class_param): - inferred_enums = inferred_model_param['enums'][enum_class_param]['permissible_values'] - inferred_keys = list(inferred_enums.keys()) - inferred_keys.sort(key=str.casefold) - return inferred_keys - - -def get_enum_list(inferred_model_param): - inner_enums = list(inferred_model_param['enums'].keys()) - return inner_enums - - -def case_fold_list_sort(input_list): - output_list = input_list - output_list.sort(key=str.casefold) - return output_list - - -def read_yaml_model(modelfile_param): - with open(modelfile_param) as file: - inner_inferred_model = yaml.load(file, Loader=yaml.FullLoader) - return inner_inferred_model - - -# don't forget type field on options ??? -# synbio example (without redirection of yaml stdout): -# ./schema_automator/mixs_qd_bp_or_ols.py \ -# --modelfile target/Ontology_example_20210317_P2B1_allmods_categorytype_different_scores_per_mod-1.yaml \ -# --ontoprefix NCBItaxon,SO \ -# --enum_list species_enum,host_organism_enum,category_enum,type_enum,type_long_enum \ -# --verbose -@click.command() -@click_log.simple_verbosity_option(logger) -@click.option('--modelfile', '-f', - help='Path to a YAML linkml file containing enumerated values.', - required=True, - type=click.Path(exists=True), - ) -@click.option('--tabular_outputfile', '-t', - default='mappings_log.tsv', - help='A tsv dump of all search results will be written to this file.', - show_default=True, - type=click.Path() - ) -@click.option('--ontoprefix', '-p', - default='NCBITaxon,SO,ENVO,PATO,GO,OBI', - help='comma-separated list of (abbreviated) ontologies to search over.', - show_default=True - ) -@click.option('--enum_list', '-e', - default='', - help='Comma-separated list of enums to search with. Defaults to all enums.', - show_default=False - ) -# the choice and order of the query_fields has a big impact on what terms are returned -# overwrite the model's description with preferred term? -# OLS defaults are {label, synonym, description, short_form, obo_id, annotations, logical_description, iri} -@click.option('--query_fields', '-q', - default='', - help="Comma-separated list of term properties to include in string similarity calculation. " + - "Defaults to label,synonym,description,short_form,obo_id,annotations,logical_description,iri.", - show_default=False - ) -# replaced_chars impacts returned fields too -# 'SARS-CoV-2' fails if the hyphens are escaped or ??? -@click.option('--replaced_chars', '-c', - default='\.\_\- ', - help='Characters to replace with whitespace.', - show_default=True - ) -@click.option('--min_search_chars', '-n', - default=2, - help='TEMPORARILY DISABLED. Queries with fewer characters will not be submitted in the search.', - show_default=True - ) -@click.option('--row_req', '-r', - default=5, - help='Requested number of search results.', - show_default=True - ) -@click.option('--maxdist', '-x', - default=0.05, - help="Maximum string distance between query and best matching term's best matching property.", - show_default=True - ) -@click.option('--overwite_meaning', '-m', - help="Should existing enum meanings and descriptions be overwritten?", - is_flag=True - ) -@click.option('--search_engine', '-s', - default='OLS', - help="BioPortal option has been temporarily disabled.", - show_default=True - ) -def clickmain(modelfile, tabular_outputfile, ontoprefix, enum_list, query_fields, replaced_chars, min_search_chars, - row_req, maxdist, overwite_meaning, search_engine): - """Uses web-based ontology lookup tools to map the permitted values of enums from linkml files to CURIES. - Optionally overwrites the meaning with a CURIE and the description with a preferred label. - Writes the resulting YAML to STDOUT.""" - global failures, inferred_model, ecg, opg, rrg, qfg, mdg, omg - - inferred_model = read_yaml_model(modelfile) - ecg = replaced_chars - opg = ontoprefix - rrg = row_req - qfg = query_fields - mdg = maxdist - omg = overwite_meaning - - requested_enums = enum_list.split(",") - sorted_requested = case_fold_list_sort(requested_enums) - avaialble_enums = get_enum_list(inferred_model) - sorted_avaialble = case_fold_list_sort(avaialble_enums) - logger.info(sorted_avaialble) - - if len(enum_list) == 0 or len(enum_list[0]) == 0: - settled_enums = sorted_avaialble - else: - settled_enums = sorted_requested - - if search_engine == 'OLS': - all_ols_results = all_enums_to_ols(inferred_model, settled_enums) - logger.info("MAPPING FAILURES") - logger.info(list(set(failures))) - all_ols_results.to_csv(tabular_outputfile, sep='\t') - yaml.safe_dump(inferred_model, sys.stdout, default_flow_style=False) - elif search_engine == 'BioPortal': - logger.warning('BioPortal search temporarily disabled') - return - else: - logger.warning('No valid search engine specified') - - -if __name__ == '__main__': - clickmain(auto_envvar_prefix='ENUMENRICH') diff --git a/pre_poetry/environment.sh b/pre_poetry/environment.sh deleted file mode 100755 index 41763fb..0000000 --- a/pre_poetry/environment.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -python3 -m venv venv -source venv/bin/activate -export PYTHONPATH=. diff --git a/pre_poetry/ols_search_wrapper.py b/pre_poetry/ols_search_wrapper.py deleted file mode 100644 index d5025d3..0000000 --- a/pre_poetry/ols_search_wrapper.py +++ /dev/null @@ -1,158 +0,0 @@ - -def one_enum_to_ols_frame_list(permitteds, one_enum_param): - global failures - global success_frame - - per_enum_frame = pds.DataFrame(columns=cols2display) - - for orig_enum in permitteds: - - temp = one_enum_param + ": " + orig_enum - logger.info(temp) - - # tidied_enum = re.sub(r'[_,.\-;@#?!&$ ]+', ' ', orig_enum) - tidied_enum = re.sub(r'[' + ecg + ']+', ' ', orig_enum) - - ontologies_phrase = '' - if len(opg) > 1: - ontologies_phrase = 'ontology=' + opg.lower() - - qf_phrase = '' - if len(qfg) > 1: - qf_phrase = 'queryFields=' + qfg.lower() - - # requiring local loses EROs annotations of SV40 - # 'local=true' + '&' + \ - request_string = 'http://www.ebi.ac.uk/ols/api/search?q=' + \ - urllib.parse.quote(tidied_enum) + '&' + \ - 'type=class' + '&' + \ - 'exact=false' + '&' + \ - ontologies_phrase + "&" + \ - 'rows=' + str(rrg) + '&' + \ - qf_phrase - - logger.debug(request_string) - - response_param = requests.get(request_string) - ols_string_search_res_j = response_param.json() - ols_string_search_res_frame = pds.DataFrame(ols_string_search_res_j['response']['docs']) - ols_string_search_res_frame.insert(0, "query", tidied_enum) - - # did the string search get any result rows? - r, c = ols_string_search_res_frame.shape - if r == 0: - no_search_res_dict = {'description': '', 'id': orig_enum, 'iri': '', 'is_defining_ontology': '', - 'label': '', 'obo_id': '', 'ontology_name': '', 'ontology_prefix': '', - 'short_form': '', 'type': ''} - no_search_res_frame = pds.DataFrame([no_search_res_dict]) - ols_string_search_res_frame = ols_string_search_res_frame.append(no_search_res_frame) - failures.append(orig_enum) - - ols_string_search_res_frame['query'] = orig_enum - inner_cosine_obj = Cosine(1) - - annotations_frame = pds.DataFrame(columns=['name', 'obo_id', 'scope', 'type', 'xrefs']) - - for ols_string_search_res_row in ols_string_search_res_frame.itertuples(index=False): - once = urllib.parse.quote(ols_string_search_res_row.iri, safe='') - twice = urllib.parse.quote(once, safe='') - # build url from base - term_retr_base = 'http://www.ebi.ac.uk/ols/api/ontologies/' - term_retr_assembled = term_retr_base + ols_string_search_res_row.ontology_name + '/terms/' + twice - term_details = requests.get(term_retr_assembled) - term_json = term_details.json() - has_label = 'label' in set(term_json.keys()) - if has_label: - logger.debug(term_retr_assembled) - temp = term_json['label'] - logger.debug(temp) - label_frame = pds.DataFrame([[term_json['label'], 'label', 'label', '']], - columns=['name', 'scope', 'type', 'xrefs']) - label_frame['obo_id'] = term_json['obo_id'] - label_frame['pref_lab'] = term_json['label'] - annotations_frame = annotations_frame.append(label_frame, ignore_index=True) - # also get other properties? - - has_synonyms = 'obo_synonym' in set(term_json.keys()) - if has_synonyms: - obo_syn_json = term_json['obo_synonym'] - obo_syn_frame = pds.DataFrame(obo_syn_json) - obo_syn_frame['obo_id'] = term_json['obo_id'] - obo_syn_frame['pref_lab'] = term_json['label'] - annotations_frame = annotations_frame.append(obo_syn_frame, ignore_index=True) - - # # don't process every kind of annotation, like genetic code - # has_annotations = 'annotation' in set(term_json.keys()) - # if has_annotations: - # obo_ano_json = term_json['annotation'] - # for anokey in obo_ano_json.keys(): - # for keyval in obo_ano_json[anokey]: - # new_row = {'name': keyval, - # 'obo_id': term_json['obo_id'], - # 'scope': anokey, - # 'type': 'annotation', - # 'xrefs': '', - # 'pref_lab': term_json['label']} - # annotations_frame = annotations_frame.append(new_row, ignore_index=True) - - annotations_row_count = len(annotations_frame.index) - - if annotations_row_count == 0: - logger.warning('NO ANNOTATIONS') - manual_row = pds.Series(['', '', '', '', '', '']) - row_df = pds.DataFrame([manual_row], columns=['name', 'obo_id', 'scope', 'type', 'xrefs', 'pref_lab']) - annotations_frame = pds.concat([row_df, annotations_frame], ignore_index=True) - failures.append(orig_enum) - annotations_frame['enum_class'] = one_enum_param - annotations_frame['query'] = tidied_enum - annotations_frame['orig_enum'] = orig_enum - # check whether anny of the annotation on any of the hits have an - # acceptable cosine string distance - annotations_frame['name'] = annotations_frame['name'].fillna('') - annotations_frame['cosine_dist'] = \ - annotations_frame.apply(lambda row: inner_cosine_obj.distance(tidied_enum.strip().lower(), - row['name'].strip().lower()), - axis=1) - annotations_frame = annotations_frame.sort_values('cosine_dist') - annotations_frame['dist_ok'] = annotations_frame['cosine_dist'] <= mdg - annotations_frame['rank'] = list(range(1, len(annotations_frame.index)+1)) - - # annotations_frame = annotations_frame[ - # ['enum_class', 'orig_enum', 'query', 'name', 'cosine_dist', 'dist_ok', - # 'obo_id', 'pref_lab', 'type', 'scope']] - - annotations_frame = annotations_frame[cols2display] - - # do something with xrefs? - logger.debug(annotations_frame) - - # get best acceptable row - acceptable_cosine = annotations_frame[annotations_frame['cosine_dist'] <= mdg] - acceptable_row_count = len(acceptable_cosine.index) - if acceptable_row_count > 0: - best_acceptable = acceptable_cosine.iloc[0] - success_frame = success_frame.append(best_acceptable) - # check if permitted value already has a meaning - meaning_search = list(inferred_model['enums'][one_enum_param]['permissible_values'][orig_enum].keys()) - if 'meaning' in meaning_search: - has_meaning = True - else: - has_meaning = False - meaningless = not has_meaning - if meaningless or omg: - # insert meaning - inferred_model['enums'][one_enum_param]['permissible_values'][orig_enum]['meaning'] = best_acceptable[ - 'obo_id'] - inferred_model['enums'][one_enum_param]['permissible_values'][orig_enum]['description'] = \ - best_acceptable['pref_lab'] - else: - temp = 'NO ACCEPTABLE MAPPINGS FOR ' + one_enum_param + " " + orig_enum - logger.warning(temp) - # sort and make unique - failures.append(orig_enum) - per_enum_frame = per_enum_frame.append(annotations_frame) - # I think there will be one success frame for each enum - success_frame = success_frame[cols2display] - success_frame = success_frame[list(annotations_frame.columns)] - logger.info(success_frame) - return per_enum_frame diff --git a/pre_poetry/synbio_organism_mapped.yaml b/pre_poetry/synbio_organism_mapped.yaml deleted file mode 100644 index 16121ed..0000000 --- a/pre_poetry/synbio_organism_mapped.yaml +++ /dev/null @@ -1,676 +0,0 @@ -name: Organism -description: Synthetic biology Organism -id: https://w3id.org/Organism -imports: -- linkml:types -prefixes: - linkml: - prefix_prefix: linkml - prefix_reference: https://w3id.org/linkml/ - synbio: - prefix_prefix: synbio - prefix_reference: https://w3id.org/synbio/ -default_prefix: synbio -enums: - assembly_dir_path_enum: - name: assembly_dir_path_enum - definition_uri: https://w3id.org/synbio/AssemblyDirPathEnum - from_schema: https://w3id.org/Organism - permissible_values: - /data/cDNA/Drosophila/: - text: /data/cDNA/Drosophila/ - description: /data/cDNA/Drosophila/ - /data/cDNA/human/: - text: /data/cDNA/human/ - description: /data/cDNA/human/ - binomial_name_enum: - name: binomial_name_enum - permissible_values: - Acetobacter pomorum: - text: Acetobacter pomorum - description: Acetobacter pomorum - meaning: NCBITaxon:65959 - annotations: - match_val: Acetobacter pomorum - match_type: label - cosine: 0.0 - title: Acetobacter pomorum - Acetobacter tropicalis: - text: Acetobacter tropicalis - description: Acetobacter tropicalis - meaning: NCBITaxon:104102 - annotations: - match_val: Acetobacter tropicalis - match_type: label - cosine: 0.0 - title: Acetobacter tropicalis - Aequorea.victoria: - text: Aequorea.victoria - description: Aequorea victoria - meaning: NCBITaxon:6100 - annotations: - match_val: Aequorea victoria - match_type: label - cosine: 0.0 - title: Aequorea victoria - Aequorea_victoria: - text: Aequorea_victoria - description: Aequorea victoria - meaning: NCBITaxon:6100 - annotations: - match_val: Aequorea victoria - match_type: label - cosine: 0.0 - title: Aequorea victoria - Agrobacterium.tumefaciens: - text: Agrobacterium.tumefaciens - description: Agrobacterium tumefaciens - meaning: NCBITaxon:358 - annotations: - match_val: Agrobacterium tumefaciens - match_type: label - cosine: 0.0 - title: Agrobacterium tumefaciens - Arabidopsis.thaliana: - text: Arabidopsis.thaliana - description: Arabidopsis thaliana - meaning: NCBITaxon:3702 - annotations: - match_val: Arabidopsis thaliana - match_type: label - cosine: 0.0 - title: Arabidopsis thaliana - Ashbya.gossypii: - text: Ashbya.gossypii - description: Eremothecium gossypii - meaning: NCBITaxon:33169 - annotations: - match_val: Ashbya gossypii - match_type: hasRelatedSynonym - cosine: 0.0 - title: Eremothecium gossypii - Bacillus flexus: - text: Bacillus flexus - annotations: - match_val: Bacillus flexus T6186-2 - match_type: label - cosine: 0.16650642566271778 - Bacillus kochii: - text: Bacillus kochii - description: Cytobacillus kochii - meaning: NCBITaxon:859143 - annotations: - match_val: Bacillus kochii - match_type: hasRelatedSynonym - cosine: 0.0 - title: Cytobacillus kochii - Bacillus subtilis: - text: Bacillus subtilis - description: Bacillus subtilis - meaning: NCBITaxon:1423 - annotations: - match_val: Bacillus subtilis - match_type: label - cosine: 0.0 - title: Bacillus subtilis - Bacillus.subtilis: - text: Bacillus.subtilis - description: Bacillus subtilis - meaning: NCBITaxon:1423 - annotations: - match_val: Bacillus subtilis - match_type: label - cosine: 0.0 - title: Bacillus subtilis - Bacteriophage.Mu: - text: Bacteriophage.Mu - description: Escherichia phage Mu - meaning: NCBITaxon:2681603 - annotations: - match_val: Bacteriophage Mu - match_type: hasExactSynonym - cosine: 0.0 - title: Escherichia phage Mu - Bordetella.bronchiseptica: - text: Bordetella.bronchiseptica - description: Bordetella bronchiseptica - meaning: NCBITaxon:518 - annotations: - match_val: Bordetella bronchiseptica - match_type: label - cosine: 0.0 - title: Bordetella bronchiseptica - Citrobacter freundii: - text: Citrobacter freundii - description: Citrobacter freundii - meaning: NCBITaxon:546 - annotations: - match_val: Citrobacter freundii - match_type: label - cosine: 0.0 - title: Citrobacter freundii - Cytomegalovirus: - text: Cytomegalovirus - description: Cytomegalovirus - meaning: NCBITaxon:10358 - annotations: - match_val: Cytomegalovirus - match_type: label - cosine: 0.0 - title: Cytomegalovirus - Discosoma.sp: - text: Discosoma.sp - description: Discosoma sp. - meaning: NCBITaxon:86600 - annotations: - match_val: Discosoma sp. - match_type: label - cosine: 0.0425728922436619 - title: Discosoma sp. - Drosophila melanogaster: - text: Drosophila melanogaster - description: Drosophila melanogaster - meaning: NCBITaxon:7227 - annotations: - match_val: Drosophila melanogaster - match_type: label - cosine: 0.0 - title: Drosophila melanogaster - Drosophila pseudoobscura: - text: Drosophila pseudoobscura - description: Drosophila pseudoobscura - meaning: NCBITaxon:7237 - annotations: - match_val: Drosophila pseudoobscura - match_type: label - cosine: 0.0 - title: Drosophila pseudoobscura - Drosophila.melanogaster: - text: Drosophila.melanogaster - description: Drosophila melanogaster - meaning: NCBITaxon:7227 - annotations: - match_val: Drosophila melanogaster - match_type: label - cosine: 0.0 - title: Drosophila melanogaster - Entacmaea.quadricolor: - text: Entacmaea.quadricolor - description: Entacmaea quadricolor - meaning: NCBITaxon:6118 - annotations: - match_val: Entacmaea quadricolor - match_type: label - cosine: 0.0 - title: Entacmaea quadricolor - Enterococcus durans: - text: Enterococcus durans - description: Enterococcus durans - meaning: NCBITaxon:53345 - annotations: - match_val: Enterococcus durans - match_type: label - cosine: 0.0 - title: Enterococcus durans - Escherichia coli: - text: Escherichia coli - description: Escherichia coli - meaning: NCBITaxon:562 - annotations: - match_val: Escherichia coli - match_type: label - cosine: 0.0 - title: Escherichia coli - Escherichia.coli: - text: Escherichia.coli - description: Escherichia coli - meaning: NCBITaxon:562 - annotations: - match_val: Escherichia coli - match_type: label - cosine: 0.0 - title: Escherichia coli - Homo sapiens: - text: Homo sapiens - description: Homo sapiens - meaning: NCBITaxon:9606 - annotations: - match_val: Homo sapiens - match_type: label - cosine: 0.0 - title: Homo sapiens - Homo sapiens Mus musculus: - text: Homo sapiens Mus musculus - annotations: - match_val: Homo sapiens/Mus musculus xenograft - match_type: label - cosine: 0.13992192242976664 - Human influenza A: - text: Human influenza A - annotations: - match_val: Human Influenza A Virus - match_type: hasExactSynonym - cosine: 0.13247238276429096 - Klebsiella.pneumoniae: - text: Klebsiella.pneumoniae - description: Klebsiella pneumoniae - meaning: NCBITaxon:573 - annotations: - match_val: Klebsiella pneumoniae - match_type: label - cosine: 0.0 - title: Klebsiella pneumoniae - Komagataella pastoris: - text: Komagataella pastoris - description: Komagataella pastoris - meaning: NCBITaxon:4922 - annotations: - match_val: Komagataella pastoris - match_type: label - cosine: 0.0 - title: Komagataella pastoris - Lactobacillus brevis: - text: Lactobacillus brevis - annotations: - match_val: Lactobacillus brevis EW - match_type: label - cosine: 0.05848691647599147 - Lactobacillus plantarum: - text: Lactobacillus plantarum - annotations: - match_val: Lactobacillus plantarum IPLA88 - match_type: label - cosine: 0.08929227511907478 - Lentivirus.human-immunodeficiency-virus1: - text: Lentivirus.human-immunodeficiency-virus1 - annotations: - match_val: Human immunodeficiency virus - match_type: label - cosine: 0.12022816123485602 - Leuconostoc mesenteroides: - text: Leuconostoc mesenteroides - description: Leuconostoc mesenteroides - meaning: NCBITaxon:1245 - annotations: - match_val: Leuconostoc mesenteroides - match_type: label - cosine: 0.0 - title: Leuconostoc mesenteroides - Mus musculus: - text: Mus musculus - description: Mus musculus - meaning: NCBITaxon:10090 - annotations: - match_val: Mus musculus - match_type: label - cosine: 0.0 - title: Mus musculus - NA: - text: NA - annotations: - match_val: Bacillus sp. B4-WWTP-NA-D-NA-NA - match_type: label - cosine: 0.5477329831333546 - Nepovirus.Tobacco-ringspot-virus: - text: Nepovirus.Tobacco-ringspot-virus - annotations: - match_val: Tobacco ringspot virus - match_type: label - cosine: 0.11392237043170383 - Paenibacillus taichungensis: - text: Paenibacillus taichungensis - description: Paenibacillus taichungensis - meaning: NCBITaxon:484184 - annotations: - match_val: Paenibacillus taichungensis - match_type: label - cosine: 0.0 - title: Paenibacillus taichungensis - Pichia pastoris: - text: Pichia pastoris - description: Komagataella pastoris - meaning: NCBITaxon:4922 - annotations: - match_val: Pichia pastoris - match_type: hasRelatedSynonym - cosine: 0.0 - title: Komagataella pastoris - Pisum.sativum: - text: Pisum.sativum - description: Pisum sativum - meaning: NCBITaxon:3888 - annotations: - match_val: Pisum sativum - match_type: label - cosine: 0.0 - title: Pisum sativum - Pseudomonas aeruginosa: - text: Pseudomonas aeruginosa - description: Pseudomonas aeruginosa - meaning: NCBITaxon:287 - annotations: - match_val: Pseudomonas aeruginosa - match_type: label - cosine: 0.0 - title: Pseudomonas aeruginosa - Pseudomonas plasmid pVS1: - text: Pseudomonas plasmid pVS1 - annotations: - match_val: Plasmid pVS1 - match_type: label - cosine: 0.2456634908586427 - Pseudomonas.putida: - text: Pseudomonas.putida - description: Pseudomonas putida - meaning: NCBITaxon:303 - annotations: - match_val: Pseudomonas putida - match_type: label - cosine: 0.0 - title: Pseudomonas putida - SARS-CoV-2: - text: SARS-CoV-2 - annotations: - match_val: Reverse genetics vector pCCI-4K-SARS-CoV-2-NanoLuc - match_type: label - cosine: 0.679492017453059 - Saccharomyces cerevisiae: - text: Saccharomyces cerevisiae - description: Saccharomyces cerevisiae - meaning: NCBITaxon:4932 - annotations: - match_val: Saccharomyces cerevisiae - match_type: label - cosine: 0.0 - title: Saccharomyces cerevisiae - Saccharomyces.cerevisiae: - text: Saccharomyces.cerevisiae - description: Saccharomyces cerevisiae - meaning: NCBITaxon:4932 - annotations: - match_val: Saccharomyces cerevisiae - match_type: label - cosine: 0.0 - title: Saccharomyces cerevisiae - Salmonella enterica: - text: Salmonella enterica - description: Salmonella enterica - meaning: NCBITaxon:28901 - annotations: - match_val: Salmonella enterica - match_type: label - cosine: 0.0 - title: Salmonella enterica - Simian.virus.40: - text: Simian.virus.40 - annotations: - match_val: Simian virus 41 - match_type: hasExactSynonym - cosine: 0.0714285714285714 - Solanum.tuberosum: - text: Solanum.tuberosum - description: Solanum tuberosum - meaning: NCBITaxon:4113 - annotations: - match_val: Solanum tuberosum - match_type: label - cosine: 0.0 - title: Solanum tuberosum - Sorangium.cellulosum: - text: Sorangium.cellulosum - description: Sorangium cellulosum - meaning: NCBITaxon:56 - annotations: - match_val: Sorangium cellulosum - match_type: label - cosine: 0.0 - title: Sorangium cellulosum - Staphylococcus.aureus: - text: Staphylococcus.aureus - description: Staphylococcus aureus - meaning: NCBITaxon:1280 - annotations: - match_val: Staphylococcus aureus - match_type: label - cosine: 0.0 - title: Staphylococcus aureus - Streptococcus.pyogenes: - text: Streptococcus.pyogenes - description: Streptococcus pyogenes - meaning: NCBITaxon:1314 - annotations: - match_val: Streptococcus pyogenes - match_type: label - cosine: 0.0 - title: Streptococcus pyogenes - Streptomyces.alboniger: - text: Streptomyces.alboniger - description: Streptomyces alboniger - meaning: NCBITaxon:132473 - annotations: - match_val: Streptomyces alboniger - match_type: label - cosine: 0.0 - title: Streptomyces alboniger - Streptomyces.noursei: - text: Streptomyces.noursei - description: Streptomyces noursei - meaning: NCBITaxon:1971 - annotations: - match_val: Streptomyces noursei - match_type: label - cosine: 0.0 - title: Streptomyces noursei - Vibrio natriegens: - text: Vibrio natriegens - description: Vibrio natriegens - meaning: NCBITaxon:691 - annotations: - match_val: Vibrio natriegens - match_type: label - cosine: 0.0 - title: Vibrio natriegens - Woodchuck Hepatitis Virus: - text: Woodchuck Hepatitis Virus - description: Woodchuck hepatitis virus - meaning: NCBITaxon:35269 - annotations: - match_val: Woodchuck hepatitis virus - match_type: label - cosine: 0.0 - title: Woodchuck hepatitis virus - Woodchuck.Hepatitis.Virus: - text: Woodchuck.Hepatitis.Virus - description: Woodchuck hepatitis virus - meaning: NCBITaxon:35269 - annotations: - match_val: Woodchuck hepatitis virus - match_type: label - cosine: 0.0 - title: Woodchuck hepatitis virus - Xenopus.laevis: - text: Xenopus.laevis - description: Xenopus laevis - meaning: NCBITaxon:8355 - annotations: - match_val: Xenopus laevis - match_type: label - cosine: 0.0 - title: Xenopus laevis - Yarrowia lipolytica: - text: Yarrowia lipolytica - description: Yarrowia lipolytica - meaning: NCBITaxon:4952 - annotations: - match_val: Yarrowia lipolytica - match_type: label - cosine: 0.0 - title: Yarrowia lipolytica - bacteriophage P1: - text: bacteriophage P1 - description: Escherichia virus P1 - meaning: NCBITaxon:10678 - annotations: - match_val: Bacteriophage P1 - match_type: hasExactSynonym - cosine: 0.0 - title: Escherichia virus P1 - bacteriophage.M13: - text: bacteriophage.M13 - description: Escherichia virus M13 - meaning: NCBITaxon:1977402 - annotations: - match_val: Bacteriophage M13 - match_type: hasExactSynonym - cosine: 0.0 - title: Escherichia virus M13 - bacteriophage.SP6: - text: bacteriophage.SP6 - description: Salmonella virus SP6 - meaning: NCBITaxon:194966 - annotations: - match_val: Bacteriophage SP6 - match_type: hasExactSynonym - cosine: 0.0 - title: Salmonella virus SP6 - bacteriophage.T3: - text: bacteriophage.T3 - description: Enterobacteria phage T3 - meaning: NCBITaxon:10759 - annotations: - match_val: Bacteriophage T3 - match_type: hasExactSynonym - cosine: 0.0 - title: Enterobacteria phage T3 - bacteriophage.T4: - text: bacteriophage.T4 - description: Escherichia virus T4 - meaning: NCBITaxon:10665 - annotations: - match_val: Bacteriophage T4 - match_type: hasExactSynonym - cosine: 0.0 - title: Escherichia virus T4 - bacteriophage.T7: - text: bacteriophage.T7 - description: Escherichia phage T7 - meaning: NCBITaxon:10760 - annotations: - match_val: Bacteriophage T7 - match_type: hasExactSynonym - cosine: 0.0 - title: Escherichia phage T7 - bacteriophage.f1: - text: bacteriophage.f1 - description: Enterobacteria phage f1 - meaning: NCBITaxon:10863 - annotations: - match_val: Bacteriophage f1 - match_type: hasExactSynonym - cosine: 0.0 - title: Enterobacteria phage f1 - bacteriophage.lambda: - text: bacteriophage.lambda - description: Escherichia virus Lambda - meaning: NCBITaxon:10710 - annotations: - match_val: Bacteriophage lambda - match_type: hasRelatedSynonym - cosine: 0.0 - title: Escherichia virus Lambda - cauliflower.mosaic.virus: - text: cauliflower.mosaic.virus - description: Cauliflower mosaic virus - meaning: NCBITaxon:10641 - annotations: - match_val: Cauliflower mosaic virus - match_type: label - cosine: 0.0 - title: Cauliflower mosaic virus - herpes.simplex.virus-1: - text: herpes.simplex.virus-1 - annotations: - match_val: Herpes simplex virus unknown type - match_type: label - cosine: 0.20069474611454663 - homo.sapiens: - text: homo.sapiens - description: Homo sapiens - meaning: NCBITaxon:9606 - annotations: - match_val: Homo sapiens - match_type: label - cosine: 0.0 - title: Homo sapiens - ms21: - text: ms21 - annotations: - match_val: Rhodobacter sp. MS21 - match_type: label - cosine: 0.6026402928804868 - phage.lambda: - text: phage.lambda - annotations: - match_val: Escherichia phage Lambda - match_type: label - cosine: 0.33667504192891995 - plasmids: - text: plasmids - description: plasmids - meaning: NCBITaxon:36549 - annotations: - match_val: plasmids - match_type: label - cosine: 0.0 - title: plasmids - synthetic: - text: synthetic - description: synthetic construct - meaning: NCBITaxon:32630 - annotations: - match_val: synthetic - match_type: hasRelatedSynonym - cosine: 0.0 - title: synthetic construct -slots: - species: - name: species - definition_uri: https://w3id.org/synbio/species - from_schema: https://w3id.org/Organism - strain: - name: strain - definition_uri: https://w3id.org/synbio/strain - from_schema: https://w3id.org/Organism - comment: - name: comment - definition_uri: https://w3id.org/synbio/comment - from_schema: https://w3id.org/Organism - default_genome_id: - name: default_genome_id - definition_uri: https://w3id.org/synbio/default_genome_id - from_schema: https://w3id.org/Organism - assembly_dir_path: - name: assembly_dir_path - definition_uri: https://w3id.org/synbio/assembly_dir_path - from_schema: https://w3id.org/Organism - binomial_name: - name: binomial_name - definition_uri: https://w3id.org/synbio/binomial_name - from_schema: https://w3id.org/Organism - range: binomial_name_enum -classes: - Organism: - name: Organism - definition_uri: https://w3id.org/synbio/Organism - from_schema: https://w3id.org/Organism - is_a: NamedThing - slots: - - species - - strain - - comment - - default_genome_id - - assembly_dir_path - - binomial_name -metamodel_version: 1.7.0 -generation_date: '2021-11-22T14:11:40' - diff --git a/pyproject.toml b/pyproject.toml index 8df806c..9533229 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,57 +6,97 @@ authors = ["Chris Mungall", "Mark Miller", "Sierra Moxon", "Harshad Hegde"] license = "BSD 3-Clause" readme = "README.md" +keywords = ["schema", "linked data", "data modeling", "rdf", "owl"] + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Programming Language :: Python", + "Environment :: Console", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "Intended Audience :: Healthcare Industry", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] + +repository = "https://github.com/linkml/schema-automator/" +documentation = "https://linkml.io/schema-automator/" + packages = [ { include = "schema_automator" } ] [tool.poetry.dependencies] python = "^3.9" -linkml = "^1.3.5" -mkdocs = "^1.2.3" -pandas = "^1.3.5" -python-dateutil = "^2.8.2" -jsonpatch = "^1.32" -quantulum3 = "^0.7.9" -funowl = "^0.1.11" -click-log = "^0.4.0" -psycopg2-binary = "^2.9.2" -strsimpy = "^0.2.1" -requests = "^2.26.0" -bioregistry = "^0.5.87" -oaklib = "^0.1.52" -pandera = "^0.12.0" -tomlkit = "^0.11.4" -inflect = "^6.0.0" - - -[tool.poetry.dev-dependencies] -pytest = "^7.1.1" -Sphinx = "^4.4.0" -sphinx-pdj-theme = "^0.2.1" -sphinx-click = "^3.1.0" -sphinxcontrib-mermaid = "^0.7.1" -jupyter = "^1.0.0" -lxml = "^4.9.1" +linkml = "^1.9.1" +pandas = ">=1.3.5" +python-dateutil = ">=2.8.2" +quantulum3 = ">=0.7.9" +funowl = ">=0.2.3" +click-log = ">=0.4.0" +psycopg2-binary = { version = "^2.9.2", optional = true } +strsimpy = ">=0.2.1" +requests = ">=2.26.0" +oaklib = ">=0.5.25" +pandera = ">=0.12.0" +tomlkit = ">=0.11.4" +inflect = ">=6.0.0" +schemasheets = "^0.4.0" +linkml-runtime = "^1.9.2" +duckdb = { version = "^0.10.1", optional = true } +click = "^8.1.7" +deprecated = "^1.2.15" +mariadb = {version = "^1.1.11", optional = true} +sqlalchemy = "^2.0.36" +rdflib = "^7.1.1" +jsonasobj2 = "^1.0.4" +deprecation = "^2.1.0" +numpy = "<2.0" +pydbml = "^1.1.2" +pyyaml = "^6.0.2" +llm = {version = "^0.21", optional = true} + +[tool.poetry.group.dev.dependencies] +pytest = ">=7.1.1" +Sphinx = ">=4.4.0" +sphinx-pdj-theme = ">=0.2.1" +sphinx-click = ">=3.1.0" +sphinxcontrib-mermaid = ">=0.9.2" +myst-parser = "*" +jupyter = ">=1.0.0" +lxml = ">=4.9.1" +deptry = "^0.23.0" [build-system] -requires = ["poetry-core>=1.0.0"] -build-backend = "poetry.core.masonry.api" +requires = ["poetry-core>=1.0.0", "poetry-dynamic-versioning>=1.0.0,<2.0.0"] +build-backend = "poetry_dynamic_versioning.backend" + +[tool.poetry-dynamic-versioning] +enable = true +vcs = "git" +style = "pep440" [tool.poetry.scripts] schemauto = "schema_automator.cli:main" -tsv2linkml = "schema_automator.importers.csv_import_engine:tsv2model" -tsvs2linkml = "schema_automator.importers.csv_import_engine:tsvs2model" -enum_annotator = "schema_automator.annotators.enum_annotator:enum_annotator" -enums_to_curateable = "schema_automator.annotators.enums_to_curateable:enums_to_curateable" -curated_to_enums = "schema_automator.annotators.curated_to_enums:curated_to_enums" -rdf2linkml = "schema_automator.importers.rdf_instance_import_engine:rdf2model" -owl2linkml = "schema_automator.importers.owl_import_engine:owl2model" -dosdp2linkml = "schema_automator.importers.owl_import_engine:dosdp2model" -jsondata2linkml = "schema_automator.importers.json_instance_import_engine:json2model" -jsonschema2linkml = "schema_automator.importers.jsonschema_import_engine:jsonschema2model" extract-schema = "schema_automator.utils.schema_extractor:cli" [tool.poetry.extras] docs = ["Sphinx", "sphinx-pdj-theme", "sphinxcontrib-mermaid"] mariadb = ["mariadb"] +postgres = ["psycopg2-binary"] +duckdb = ["duckdb"] +llm = ["llm"] + +[tool.codespell] +# Ref: https://github.com/codespell-project/codespell#using-a-config-file +skip = '.git,*.lock,resources' +check-hidden = true +ignore-regex = '\bOGER\b' +ignore-words-list = 'sie,assertIn' + +[tool.deptry.per_rule_ignores] +DEP002 = ["numpy", "psycopg2-binary", "duckdb", "mariadb"] diff --git a/schema_automator/__init__.py b/schema_automator/__init__.py index 2eadd7a..0cfc39b 100644 --- a/schema_automator/__init__.py +++ b/schema_automator/__init__.py @@ -1,3 +1,11 @@ +from importlib import metadata + from schema_automator.annotators import * from schema_automator.importers import * from schema_automator.generalizers import * + +try: + __version__ = metadata.version(__package__) +except metadata.PackageNotFoundError: + # package is not installed + __version__ = "0.0.0" # pragma: no cover diff --git a/schema_automator/annotators/__init__.py b/schema_automator/annotators/__init__.py index 1bb4b07..66f2c4e 100644 --- a/schema_automator/annotators/__init__.py +++ b/schema_automator/annotators/__init__.py @@ -1,2 +1,3 @@ from schema_automator.annotators.schema_annotator import SchemaAnnotator -from schema_automator.annotators.jsonld_annotator import JsonLdAnnotator \ No newline at end of file +from schema_automator.annotators.jsonld_annotator import JsonLdAnnotator +from schema_automator.annotators.llm_annotator import LLMAnnotator diff --git a/schema_automator/annotators/enum_annotator.py b/schema_automator/annotators/enum_annotator.py index 1b3f85b..3a8b5ee 100644 --- a/schema_automator/annotators/enum_annotator.py +++ b/schema_automator/annotators/enum_annotator.py @@ -214,7 +214,7 @@ def get_ols_term_annotations(iri_param, ontology_param, session_param, ols_terms default=2, show_default=True) @click.option('--max_cosine', help="""how much of a cosine distance will you tolerate - when comparing an enum name to a term lable or synonym?""", + when comparing an enum name to a term label or synonym?""", default=0.05, show_default=True) @click.option('--query_field_string', help="""do you want to define a custom list of fields to search in? diff --git a/schema_automator/annotators/jsonld_annotator.py b/schema_automator/annotators/jsonld_annotator.py index fea5559..03d934c 100644 --- a/schema_automator/annotators/jsonld_annotator.py +++ b/schema_automator/annotators/jsonld_annotator.py @@ -5,6 +5,8 @@ from linkml_runtime import SchemaView from linkml_runtime.linkml_model import SchemaDefinition, Definition, Prefix, DefinitionName +from schema_automator.annotators import SchemaAnnotator + JSON = Dict @@ -14,7 +16,7 @@ def is_url(/service/s: str) -> bool: else: return False -class JsonLdAnnotator: +class JsonLdAnnotator(SchemaAnnotator): """ Annotates a schema using URIs/Prefixes derived from a JSON-LD file """ diff --git a/schema_automator/annotators/llm_annotator.py b/schema_automator/annotators/llm_annotator.py new file mode 100644 index 0000000..c54dc99 --- /dev/null +++ b/schema_automator/annotators/llm_annotator.py @@ -0,0 +1,78 @@ +import logging +from dataclasses import dataclass +from typing import Union, Optional + +from linkml_runtime import SchemaView +from linkml_runtime.linkml_model import SchemaDefinition + +from schema_automator.annotators import SchemaAnnotator + +logger = logging.getLogger(__name__) + +SYSTEM_PROMPT = """ +You are a LinkML schema assistant and your job is to suggest +values for missing elements in the schema. +Schema details: {schema_info} +""" + +def enrich_using_llm(schema: Union[SchemaDefinition, str], model_name: str = None) -> SchemaDefinition: + """ + Use the LLM model to enrich the schema with descriptions for elements that are missing them. + + Requires installation with the llm extra. + + :param schema: + :param model_name: + :return: + """ + from llm import get_model, Conversation + if not model_name: + model_name = "gpt-4-turbo" + model = get_model(model_name) + sv = SchemaView(schema) + schema = sv.schema + schema_info =f"name: {schema.name}, description: {schema.description}" + system_prompt = SYSTEM_PROMPT.format(schema_info=schema_info) + logger.info(f"System: {system_prompt}") + for elt in sv.all_elements().values(): + typ = elt.__class__.__name__ + if not elt.description: + prompt = (f"Generate a description for the {typ} with name '{elt.name}'" + "The description should be a concise phrase that describes the element.") + conversation = Conversation(model=model) + result = conversation.prompt(prompt, system_prompt) + elt.description = result.text() + logger.debug(f"Updated Description: {elt.description}") + return schema + + +@dataclass +class LLMAnnotator(SchemaAnnotator): + """ + Annotates a schema using an LLM. + """ + + model_name: Optional[str] = None + + def enrich(self, schema: Union[SchemaDefinition, str]) -> SchemaDefinition: + """ + Enrich a schema using an LLM. + + >>> from schema_automator.utils.schemautils import write_schema + >>> annotator = LLMAnnotator(model_name="gpt-4") + >>> schema = annotator.enrich("tests/resources/biopax3.yaml") + >>> write_schema(schema) + + Requires installation with the llm extra: + + .. code-block:: bash + + pip install schema-automator[llm] + + Note: exercise caution on running this on large schemas with expensive + models like gpt-4. + + :param schema: + :return: + """ + return enrich_using_llm(schema, model_name=self.model_name) diff --git a/schema_automator/annotators/schema_annotator.py b/schema_automator/annotators/schema_annotator.py index cc68c13..a305419 100644 --- a/schema_automator/annotators/schema_annotator.py +++ b/schema_automator/annotators/schema_annotator.py @@ -1,12 +1,13 @@ import click import logging +import re import yaml from dataclasses import dataclass from typing import List, Union, Iterator from linkml_runtime.linkml_model import SchemaDefinition, Element, PermissibleValue, ClassDefinition, SlotDefinition from linkml_runtime.utils.metamodelcore import Curie -from linkml_runtime.utils.schemaview import SchemaView, re, EnumDefinition +from linkml_runtime.utils.schemaview import SchemaView, EnumDefinition from oaklib import BasicOntologyInterface from oaklib.datamodels.search import SearchConfiguration from oaklib.datamodels.text_annotator import TextAnnotation @@ -31,7 +32,7 @@ class SchemaAnnotator: A SchemaAnnotator wraps an OAK ontology interface. See `OAK documentation `_ for more details """ - ontology_implementation: BasicOntologyInterface + ontology_implementation: BasicOntologyInterface = None mine_descriptions: bool = False allow_partial: bool = False curie_only: bool = True @@ -191,7 +192,9 @@ def _add_description_from_curies(self, elt: Union[Element, PermissibleValue], cu @click.option('--output', '-o', help="Path to saved yaml schema") def annotate_schema(schema: str, input: str, output: str, **args): """ - Annotate all elements of a schema + Annotate all elements of a schema. + + DEPRECATED: use main schemauto CLI instead """ logging.basicConfig(level=logging.INFO) annr = SchemaAnnotator() diff --git a/schema_automator/cli.py b/schema_automator/cli.py index 427a917..780d0b3 100644 --- a/schema_automator/cli.py +++ b/schema_automator/cli.py @@ -5,26 +5,35 @@ """ import logging import os +from pathlib import Path + import click + import pandas as pd import yaml from linkml_runtime.linkml_model import SchemaDefinition -from oaklib.selector import get_resource_from_shorthand, get_implementation_from_shorthand +from oaklib.selector import get_implementation_from_shorthand -from schema_automator import JsonLdAnnotator +from schema_automator import JsonLdAnnotator, FrictionlessImportEngine +from schema_automator.annotators import llm_annotator from schema_automator.annotators.schema_annotator import SchemaAnnotator from schema_automator.generalizers.csv_data_generalizer import CsvDataGeneralizer from schema_automator.generalizers.generalizer import DEFAULT_CLASS_NAME, DEFAULT_SCHEMA_NAME from schema_automator.generalizers.pandas_generalizer import PandasDataGeneralizer +from schema_automator.importers.cadsr_import_engine import CADSRImportEngine from schema_automator.importers.dosdp_import_engine import DOSDPImportEngine from schema_automator.generalizers.json_instance_generalizer import JsonDataGeneralizer from schema_automator.importers.jsonschema_import_engine import JsonSchemaImportEngine +from schema_automator.importers.kwalify_import_engine import KwalifyImportEngine from schema_automator.importers.owl_import_engine import OwlImportEngine from schema_automator.generalizers.rdf_data_generalizer import RdfDataGeneralizer +from schema_automator.importers.rdfs_import_engine import RdfsImportEngine from schema_automator.importers.sql_import_engine import SqlImportEngine -from schema_automator.utils.schemautils import minify_schema, write_schema +from schema_automator.importers.tabular_import_engine import TableImportEngine +from schema_automator.utils.schemautils import write_schema +from schema_automator import __version__ input_option = click.option( "-i", @@ -34,7 +43,7 @@ output_option = click.option( "-o", "--output", - help="path to output file." + help="path to output file or directory." ) schema_name_option = click.option( '--schema-name', @@ -42,10 +51,28 @@ default=DEFAULT_SCHEMA_NAME, show_default=True, help='Schema name') +schema_id_option = click.option( + '--schema-id', + help='Schema id') annotator_option = click.option( '--annotator', '-A', help='name of annotator to use for auto-annotating results. Must be an OAK selector') +use_attributes_option = click.option( + "--use-attributes/--no-use-attributes", + help="If true, use attributes over slots/slot_usage" +) +column_separator_option = click.option('--column-separator', '-s', default='\t', help='separator') + +# generalizer options + +downcase_header_option = click.option('--downcase-header/--no-downcase-header', default=False, help='if true make headers lowercase') +snakecase_header_option = click.option('--snakecase-header/--no-snakecase-header', default=False, help='if true make headers snakecase') +infer_foreign_keys_option = click.option('--infer-foreign-keys/--no-infer-foreign-keys', default=False, help='infer ranges/foreign keys') +enum_columns_option = click.option('--enum-columns', '-E', multiple=True, help='column(s) that is forced to be an enum') +enum_mask_columns_option = click.option('--enum-mask-columns', multiple=True, help='column(s) that are excluded from being enums') +max_enum_size_option = click.option('--max-enum-size', default=50, help='do not create an enum if more than max distinct members') +enum_threshold_option = click.option('--enum-threshold', default=0.1, help='if the number of distinct values / rows is less than this, do not make an enum') @click.group() @@ -54,6 +81,7 @@ help="Set the level of verbosity") @click.option("-q", "--quiet", help="Silence all diagnostics") +@click.version_option(__version__, "-V", "--version") def main(verbose: int, quiet: bool): """Run the LinkML Schema Automator Command Line. @@ -84,13 +112,12 @@ def main(verbose: int, quiet: bool): @schema_name_option @annotator_option @click.option('--class-name', '-c', default=DEFAULT_CLASS_NAME, help='Core class name in schema') -@click.option('--column-separator', '-s', default='\t', help='separator') -@click.option('--downcase-header/--no-downcase-header', default=False, help='if true make headers lowercase') -@click.option('--enum-columns', '-E', multiple=True, help='column that is forced to be an enum') -@click.option('--enum-threshold', type=click.FLOAT, help='set high to be more inclusive') -@click.option('--max-enum-size', - type=click.INT, - help='set high to be more inclusive') +@column_separator_option +@downcase_header_option +@snakecase_header_option +@enum_columns_option +@enum_threshold_option +@max_enum_size_option @click.option('--data-dictionary-row-count', type=click.INT, help='rows that provide metadata about columns') @@ -104,7 +131,7 @@ def generalize_tsv(tsvfile, output, class_name, schema_name, pandera: bool, anno Example: - schemauto generalize-tsv --class-name Person --schema-name PersonInfo my/data/persons.tsv + ``schemauto generalize-tsv --class-name Person --schema-name PersonInfo my/data/persons.tsv`` """ kwargs = {k:v for k, v in kwargs.items() if v is not None} if pandera: @@ -123,13 +150,12 @@ def generalize_tsv(tsvfile, output, class_name, schema_name, pandera: bool, anno @click.argument('tsvfiles', nargs=-1) # input TSV (must have column headers @output_option @schema_name_option -@click.option('--column-separator', '-s', default='\t', help='separator') -@click.option('--downcase-header/--no-downcase-header', default=False, help='if true make headers lowercase') -@click.option('--infer-foreign-keys/--no-infer-foreign-keys', default=False, help='infer ranges/foreign keys') -@click.option('--enum-columns', '-E', multiple=True, help='column(s) that is forced to be an enum') -@click.option('--enum-mask-columns', multiple=True, help='column(s) that are excluded from being enums') -@click.option('--max-enum-size', default=50, help='do not create an enum if more than max distinct members') -@click.option('--enum-threshold', default=0.1, help='if the number of distinct values / rows is less than this, do not make an enum') +@column_separator_option +@downcase_header_option +@snakecase_header_option +@enum_columns_option +@enum_threshold_option +@max_enum_size_option @click.option('--robot/--no-robot', default=False, help='set if the TSV is a ROBOT template') def generalize_tsvs(tsvfiles, output, schema_name, **kwargs): """ @@ -137,11 +163,11 @@ def generalize_tsvs(tsvfiles, output, schema_name, **kwargs): See :ref:`generalizers` for more on the generalization framework - This uses :ref:`CsvDataGeneralizer.convert_multiple` + This uses CsvDataGeneralizer.convert_multiple Example: - schemauto generalize-tsvs --class-name Person --schema-name PersonInfo my/data/*.tsv + ``schemauto generalize-tsvs --class-name Person --schema-name PersonInfo my/data/*.tsv`` """ ie = CsvDataGeneralizer(**kwargs) schema = ie.convert_multiple(tsvfiles, schema_name=schema_name) @@ -152,6 +178,12 @@ def generalize_tsvs(tsvfiles, output, schema_name, **kwargs): @click.argument('url') # input TSV (must have column headers @output_option @schema_name_option +@column_separator_option +@downcase_header_option +@snakecase_header_option +@enum_columns_option +@enum_threshold_option +@max_enum_size_option @click.option('--class-name', '-c', default=DEFAULT_CLASS_NAME, help='Core class name in schema') @click.option('--pandera/--no-pandera', default=False, help='set to use panderas as inference engine') @click.option('--data-output', help='Path to file of downloaded data') @@ -166,19 +198,21 @@ def generalize_htmltable(url, output, class_name, schema_name, pandera: bool, """ Generalizes from a table parsed from a URL - Uses pandas/beautiful soup + Uses pandas/beautiful soup. + + Note: if the website cannot be accessed directly, you can download the HTML + and pass in an argument of the form file:///absolute/path/to/file.html """ dfs = pd.read_html(url) logging.info(f"{url} has {len(dfs)} tables") df = dfs[table_number] if data_output: - df.to_csv(data_output, sep="\t") + df.to_csv(data_output, index=False, sep="\t") if pandera: - ie = PandasDataGeneralizer(**kwargs) - schema = ie.convert(df, class_name=class_name, schema_name=schema_name) + ge = PandasDataGeneralizer(**kwargs) else: - ie = CsvDataGeneralizer(**kwargs) - schema = ie.convert_dicts(df.to_dict('records')) + ge = CsvDataGeneralizer(**kwargs) + schema = ge.convert_from_dataframe(df, class_name=class_name, schema_name=schema_name) write_schema(schema, output) @@ -197,7 +231,7 @@ def import_dosdps(dpfiles, output, **args): Example: - schemauto import-dosdps --range-as-enums patterns/*yaml -o my-schema.yaml + ``schemauto import-dosdps --range-as-enums patterns/*.yaml -o my-schema.yaml`` """ ie = DOSDPImportEngine() schema = ie.convert(dpfiles, **args) @@ -219,6 +253,40 @@ def import_sql(db, output, **args): write_schema(schema, output) +@main.command() +@output_option +@schema_name_option +@click.option('--class-name', '-c', default=DEFAULT_CLASS_NAME, help='Core class name in schema') +@click.option('--data-output', help='Path to file of downloaded data') +@click.option('--element-type', help='E.g. class, enum') +@click.option('--parent', help='parent ID') +@click.option('--columns', + required=True, + help='comma-separated schemasheets descriptors of each column. Must be in same order') +@click.option('--table-number', + type=int, + default=0, + show_default=True, + help='If URL has multiple tables, use this one (zero-based)') +@click.argument('url') # input TSV (must have column headers +def import_htmltable(url, output, class_name, schema_name, columns, + table_number: int, data_output, + **kwargs): + """ + Imports from a table parsed from a URL using SchemaSheets + + Uses pandas/beautiful soup + """ + dfs = pd.read_html(url) + logging.info(f"{url} has {len(dfs)} tables") + df = dfs[table_number] + if data_output: + df.to_csv(data_output, index=False, sep="\t") + ie = TableImportEngine(columns=columns.split(","), **kwargs) + schema = ie.import_from_dataframe(df) + write_schema(schema, output) + + @main.command() @click.argument('input') @output_option @@ -243,7 +311,7 @@ def generalize_json(input, output, schema_name, depluralize: bool, format, omit_ Example: - schemauto generalize-json my/data/persons.json -o my.yaml + ``schemauto generalize-json my/data/persons.json -o my.yaml`` """ ie = JsonDataGeneralizer(omit_null=omit_null, depluralize_class_names=depluralize) if inlined_map: @@ -270,7 +338,7 @@ def generalize_toml(input, output, schema_name, omit_null, **kwargs): Example: - schemauto generalize-toml my/data/conf.toml -o my.yaml + ``schemauto generalize-toml my/data/conf.toml -o my.yaml`` """ ie = JsonDataGeneralizer(omit_null=omit_null) schema = ie.convert(input, format='toml', **kwargs) @@ -281,8 +349,17 @@ def generalize_toml(input, output, schema_name, omit_null, **kwargs): @click.argument('input') @output_option @schema_name_option +@use_attributes_option +@click.option( + "--is-openapi/--no-is-openapi", + default=False, + show_default=True, + help="If true, use OpenAPI schema style" +) +@click.option("--import-project/--no-import-project", + help="If true, then the input path should be a directory with multiple schema files") @click.option('--format', '-f', default='json', help='JSON Schema format - yaml or json') -def import_json_schema(input, output, schema_name, format, **args): +def import_json_schema(input, output, import_project: bool, schema_name, format, **kwargs): """ Imports from JSON Schema to LinkML @@ -290,10 +367,75 @@ def import_json_schema(input, output, schema_name, format, **args): Example: - schemauto import-json-schema my/schema/personinfo.schema.json + ``schemauto import-json-schema my/schema/personinfo.schema.json`` """ - loader = JsonSchemaImportEngine() - schema = loader.load(input, name=schema_name, format=format) + ie = JsonSchemaImportEngine(**kwargs) + if not import_project: + schema = ie.convert(input, name=schema_name, format=format) + write_schema(schema, output) + else: + if output is None: + raise ValueError(f"You must pass an export directory with --output") + ie.import_project(input, output, name=schema_name, format=format) + + +@main.command() +@click.argument('input') +@output_option +@schema_name_option +@use_attributes_option +def import_kwalify(input, output, schema_name, **kwargs): + """ + Imports from Kwalify Schema to LinkML + + See :ref:`importers` for more on the importer framework + + Example: + + ``schemauto import-kwalify my/schema/personinfo.kwalify.yaml`` + """ + ie = KwalifyImportEngine(**kwargs) + schema = ie.convert(input, output, name=schema_name, format=format) + write_schema(schema, output) + +@main.command() +@click.argument('input') +@output_option +@schema_name_option +@schema_id_option +def import_frictionless(input, output, schema_name, schema_id, **kwargs): + """ + Imports from Frictionless data package to LinkML + + See :ref:`importers` for more on the importer framework + + Example: + + ``schemauto import-frictionless cfde.package.json`` + """ + ie = FrictionlessImportEngine(**kwargs) + schema = ie.convert(input, name=schema_name, id=schema_id) + write_schema(schema, output) + + +@main.command() +@output_option +@schema_name_option +@schema_id_option +@click.argument('input') +def import_cadsr(input, output, schema_name, schema_id, **kwargs): + """ + Imports from CADSR CDE JSON API output to LinkML + + See :ref:`importers` for more on the importer framework + + Example: + + ``schemauto import-cadsr "cdes/*.json"`` + """ + ie = CADSRImportEngine() + paths = [str(gf.absolute()) for gf in Path().glob(input) if gf.is_file()] + schema = ie.convert(paths, name=schema_name, id=schema_id) write_schema(schema, output) @@ -314,15 +456,47 @@ def import_owl(owlfile, output, **args): See :ref:`importers` for more on the importer framework + For a list of caveats on LinkML to OWL mapping, see: + + - https://linkml.io/linkml/generators/owl.html + Example: - schemauto import-owl prov.ofn -o my.yaml + ``schemauto import-owl prov.ofn -o my.yaml`` """ sie = OwlImportEngine() schema = sie.convert(owlfile, **args) write_schema(schema, output) +@main.command() +@click.argument('rdfsfile') +@output_option +@schema_name_option +@click.option('--format', '-f', + default='turtle', + help="Input format, eg. turtle") +@click.option('--identifier', '-I', help="Slot to use as identifier") +@click.option('--model-uri', help="Model URI prefix") +@click.option('--metamodel-mappings', + help="Path to metamodel mappings YAML dictionary") +@click.option('--output', '-o', help="Path to saved yaml schema") +def import_rdfs(rdfsfile: str, output: str, metamodel_mappings: str, schema_name: str, **args): + """ + Import an RDFS schema to LinkML + + Example: + + schemauto import-rdfs prov.rdfs.ttl -o prov.yaml + """ + mappings_obj = None + if metamodel_mappings: + with open(metamodel_mappings) as f: + mappings_obj = yaml.safe_load(f) + sie = RdfsImportEngine(initial_metamodel_mappings=mappings_obj) + schema = sie.convert(rdfsfile, name=schema_name, **args) + write_schema(schema, output) + @main.command() @click.argument('rdffile') @output_option @@ -337,7 +511,7 @@ def generalize_rdf(rdffile, dir, output, **args): Example: - schemauto generalize-rdf my/data/persons.ttl + ``schemauto generalize-rdf my/data/persons.ttl`` """ sie = RdfDataGeneralizer() if not os.path.exists(dir): @@ -358,7 +532,7 @@ def generalize_rdf(rdffile, dir, output, **args): @output_option def annotate_schema(schema: str, input: str, output: str, **kwargs): """ - Annotate all elements of a schema + Annotate all elements of a schema. This uses OAK (https://incatools.github.io/ontology-access-kit), and you can provide any OAK backend that supports text annotation. @@ -367,13 +541,13 @@ def annotate_schema(schema: str, input: str, output: str, **kwargs): Example: - schemauto annotate-schema -i bioportal: my-schema.yaml -o annotated.yaml + ``schemauto annotate-schema -i bioportal: my-schema.yaml -o annotated.yaml`` This will require you setting the API key via OAK - see OAK docs. You can specify a specific ontology - schemauto annotate-schema -i bioportal:ncbitaxon my-schema.yaml -o annotated.yaml + ``schemauto annotate-schema -i bioportal:ncbitaxon my-schema.yaml -o annotated.yaml`` In future OAK will support a much wider variety of annotators including: @@ -391,30 +565,44 @@ def annotate_schema(schema: str, input: str, output: str, **kwargs): schema = annr.annotate_schema(schema) write_schema(schema, output) - @main.command() +#@main.command() @click.argument('schema') @click.option('--input', '-i', help="OAK input ontology selector") @click.option('--annotate/--no-annotate', default=True, help="If true, annotate the schema") @output_option -def enrich_schema(schema: str, input: str, output: str, annotate: bool, **args): +def enrich_using_ontology(schema: str, input: str, output: str, annotate: bool, **args): """ Enrich a schema using an ontology. + Here, "enrich" means copying over metadata from the ontology to the schema. + For example, if the schema has a class "Gene" that is mapped to a SO class for "gene", + then calling this command will copy the SO class definition to the schema class. + This will use OAK to add additional metadata using uris and mappings in the schema. + See the OAK docs for options for which annotators to use; examples include: + + - bioportal: # (include the colon) any ontology in bioportal + + - bioportal:umls # a specific ontology in bioportal + + - my.obo # any local OBO file + + - sqlite:obo:cl # a specific OBO file or semsql registered ontology + For example, if your schema has a class with a mapping to a SO class, then the definition of that will be copied to the class description. - + Example: - schemauto enrich-schema -i bioportal: my-schema.yaml -o my-enriched.yaml + ``schemauto enrich-using-ontology -i bioportal: my-schema.yaml -o my-enriched.yaml`` If your schema has no mappings you can use --annotate to add them Example: - schemauto enrich-schema -i so.obo --annotate my-schema.yaml -o my-enriched.yaml --annotate + ``schemauto enrich-using-ontology -i so.obo --annotate my-schema.yaml -o my-enriched.yaml --annotate`` """ impl = get_implementation_from_shorthand(input) annr = SchemaAnnotator(impl) @@ -425,6 +613,33 @@ def enrich_schema(schema: str, input: str, output: str, annotate: bool, **args): write_schema(schema, output) +@main.command() +@click.option('--model', '-m', help="Name of model") +@output_option +@click.argument('schema') +def enrich_using_llm(schema: str, model: str, output: str, **args): + """ + Enrich a schema using an LLM. + + Example: + + schemauto enrich-using-llm -m gpt-4-turbo my-schema.yaml -o my-enriched.yaml + + This will enrich the schema by adding missing description fields. In future + other enrichments may be possible. + + Note for this to work, you will need to have LLM installed as an extra. + + Example: + + ``pip install schema-automator[llm]`` + + """ + logging.info(f"Enriching: {schema}") + schema = llm_annotator.enrich_using_llm(schema, model) + write_schema(schema, output) + + @main.command() @click.argument('schema') @output_option diff --git a/schema_automator/enhancer/general_enhancer.py b/schema_automator/enhancer/general_enhancer.py deleted file mode 100644 index bb856c2..0000000 --- a/schema_automator/enhancer/general_enhancer.py +++ /dev/null @@ -1,17 +0,0 @@ -from dataclasses import dataclass - - -@dataclass -class GeneralSchemaEnhancer: - """ - Main functions have moved to core linkml, see https://github.com/linkml/linkml/pull/854 - - This is currently a stub for future enhancements - """ - pass - - - - - - diff --git a/schema_automator/generalizers/csv_data_generalizer.py b/schema_automator/generalizers/csv_data_generalizer.py index b5e5376..c9e0483 100644 --- a/schema_automator/generalizers/csv_data_generalizer.py +++ b/schema_automator/generalizers/csv_data_generalizer.py @@ -1,3 +1,4 @@ +import datetime import click import logging import yaml @@ -15,6 +16,7 @@ from linkml_runtime import SchemaView from linkml_runtime.linkml_model import SchemaDefinition, ClassDefinition, TypeDefinition, SlotDefinition from linkml_runtime.linkml_model.meta import UniqueKey +from linkml_runtime.utils.formatutils import underscore from quantulum3 import parser as q_parser from dataclasses import dataclass, field @@ -85,7 +87,7 @@ class CsvDataGeneralizer(Generalizer): """If number if distinct values divided by total number of values is greater than this, then the column is considered an enum""" enum_strlen_threshold: int = 30 - """Maximimum length of a string to be considered a permissible enum value""" + """Maximum length of a string to be considered a permissible enum value""" max_enum_size: int = 50 """Max number of permissible values for a column to be considered an enum""" @@ -93,6 +95,9 @@ class CsvDataGeneralizer(Generalizer): downcase_header: bool = False """If true, coerce column names to be lower case""" + snakecase_header: bool = False + """If true, coerce column names to be snake case""" + infer_foreign_keys: bool = False """For multi-CVS files, infer linkages between rows""" @@ -114,9 +119,9 @@ def infer_linkages(self, files: List[str], **kwargs) -> List[ForeignKey]: This procedure can generate false positives, so additional heuristics are applied. Each potential foreign key relationship gets an ad-hoc score: - - links across tables score more highly than within - - suffixes such as _id are more likely on PK and FK tables - - the foreign key column table is likely to start with the base column name + - links across tables score more highly than within + - suffixes such as _id are more likely on PK and FK tables + - the foreign key column table is likely to start with the base column name In addition, if there are competing primary keys for a table, the top scoring one is selected """ fks: List[ForeignKey] = [] @@ -127,10 +132,14 @@ def infer_linkages(self, files: List[str], **kwargs) -> List[ForeignKey]: c = os.path.splitext(os.path.basename(file))[0] if self.downcase_header: c = c.lower() + if self.snakecase_header: + c = underscore(c) logging.info(f'READING {file} ') df = pd.read_csv(file, sep=self.column_separator, skipinitialspace=True).fillna("") if self.downcase_header: df = df.rename(columns=str.lower) + if self.snakecase_header: + df = df.rename(columns=underscore) exclude = [] for col in df.columns: vals = set(df[col].tolist()) @@ -242,6 +251,8 @@ def convert_multiple(self, files: List[str], **kwargs) -> SchemaDefinition: c = os.path.splitext(os.path.basename(file))[0] if self.downcase_header: c = c.lower() + if self.snakecase_header: + c = underscore(c) s = self.convert(file, class_name=c, **kwargs) if s is not None: schemas.append(s) @@ -267,6 +278,16 @@ def convert(self, file: str, **kwargs) -> SchemaDefinition: rr = csv.DictReader(tsv_file, fieldnames=header, delimiter=self.column_separator, skipinitialspace=False) return self.convert_dicts([r for r in rr], **kwargs) + def convert_from_dataframe(self, df: pd.DataFrame, **kwargs) -> SchemaDefinition: + """ + Converts a single dataframe to a single-class schema + + :param df: + :param kwargs: + :return: + """ + return self.convert_dicts(df.to_dict('records'), **kwargs) + def read_slot_tsv(self, file: str, **kwargs) -> Dict: with open(file, newline='') as tsv_file: rows_list = csv.reader(tsv_file, delimiter=self.column_separator) @@ -359,6 +380,8 @@ def convert_dicts(self, for row in rr: if self.downcase_header: row = {k.lower(): v for k, v in row.items()} + if self.snakecase_header: + row = {underscore(k): v for k, v in row.items()} n += 1 if n == 1 and self.robot: for k, v in row.items(): @@ -622,7 +645,11 @@ def infer_range(slot: dict, vals: set, types: dict, coerce=True) -> str: return 'boolean' if all(isfloat(v) for v in nn_vals): return 'float' - if all(is_date(v) for v in nn_vals): + parsed_datetimes = [is_date_or_datetime(v) for v in nn_vals] + if all(pd == 'date' for pd in parsed_datetimes): + return 'date' + if all(pd in ('date', 'datetime') for pd in parsed_datetimes): + # This selects datetime when values are mixed which may fail validation return 'datetime' if is_all_measurement(nn_vals): return 'measurement' @@ -669,6 +696,24 @@ def is_date(string, fuzzy=False): return False +def is_date_or_datetime(string, fuzzy=False): + """ + Return whether the string can be interpreted as a date or datetime. + + :param string: str, string to check for date + :param fuzzy: bool, ignore unknown tokens in string if True + """ + try: + dt = parse(string, fuzzy=fuzzy) + if dt.hour == 0 and dt.minute == 0 and dt.second == 0: + return 'date' + return 'datetime' + except Exception: + # https://stackoverflow.com/questions/4990718/how-can-i-write-a-try-except-block-that-catches-all-exceptions + # we don't know all the different parse exceptions, we assume any error means this is not a date + return False + + @dataclass class Hit: term_id: str @@ -784,60 +829,5 @@ def add_missing_to_schema(schema: SchemaDefinition): description='Holds a measurement serialized as a string') -@click.group() -def main(): - pass - - -@main.command() -@click.argument('tsvfile') # input TSV (must have column headers -@click.option('--output', '-o', help='Output file') -@click.option('--class_name', '-c', default='example', help='Core class name in schema') -@click.option('--schema_name', '-n', default='example', help='Schema name') -@click.option('--separator', '-s', default='\t', help='separator') -@click.option('--downcase-header/--no-downcase-header', default=False, help='if true make headers lowercase') -@click.option('--enum-columns', '-E', multiple=True, help='column that is forced to be an enum') -@click.option('--robot/--no-robot', default=False, help='set if the TSV is a ROBOT template') -def tsv2model(tsvfile, output, separator, class_name, schema_name, **kwargs): - """ Infer a model from a TSV """ - ie = CsvDataGeneralizer(**kwargs) - schema = ie.convert(tsvfile, class_name=class_name, schema_name=schema_name) - write_schema(schema, output) - - -@main.command() -@click.argument('tsvfiles', nargs=-1) # input TSV (must have column headers -@click.option('--output', '-o', help='Output file') -@click.option('--schema_name', '-n', default='example', help='Schema name') -@click.option('--file_separator', '-s', default='\t', help='separator') -@click.option('--downcase-header/--no-downcase-header', default=False, help='if true make headers lowercase') -@click.option('--infer-foreign-keys/--no-infer-foreign-keys', default=False, help='infer ranges/foreign keys') -@click.option('--enum-columns', '-E', multiple=True, help='column(s) that is forced to be an enum') -@click.option('--enum-mask-columns', multiple=True, help='column(s) that are excluded from being enums') -@click.option('--max-enum-size', default=50, help='do not create an enum if more than max distinct members') -@click.option('--enum-threshold', default=0.1, help='if the number of distinct values / rows is less than this, do not make an enum') -@click.option('--robot/--no-robot', default=False, help='set if the TSV is a ROBOT template') -def tsvs2model(tsvfiles, output, schema_name, **kwargs): - """ Infer a model from multiple TSVs """ - ie = CsvDataGeneralizer(**kwargs) - schema = ie.convert_multiple(tsvfiles, schema_name=schema_name) - write_schema(schema, output) - - -@main.command() -@click.argument('yamlfile') -@click.option('--zooma-confidence', '-Z', help='zooma confidence') -@click.option('--results', '-r', help='mapping results file') -def enrich(yamlfile, results, **args): - """ Infer a model from a TSV """ - yamlobj = yaml.load(open(yamlfile)) - cache = {} - infer_enum_meanings(yamlobj, cache=cache) - if results is not None: - with open(results, "w") as io: - io.write(yaml.dump(cache)) - print(yaml.dump(yamlobj, default_flow_style=False, sort_keys=False)) - - if __name__ == '__main__': main() diff --git a/schema_automator/importers/infer_model_from_rdftab.py b/schema_automator/generalizers/infer_model_from_rdftab.py similarity index 100% rename from schema_automator/importers/infer_model_from_rdftab.py rename to schema_automator/generalizers/infer_model_from_rdftab.py diff --git a/schema_automator/importers/__init__.py b/schema_automator/importers/__init__.py index bcb9821..2011d25 100644 --- a/schema_automator/importers/__init__.py +++ b/schema_automator/importers/__init__.py @@ -2,4 +2,4 @@ from schema_automator.importers.owl_import_engine import OwlImportEngine from schema_automator.importers.dosdp_import_engine import DOSDPImportEngine from schema_automator.importers.frictionless_import_engine import FrictionlessImportEngine - +from schema_automator.importers.cadsr_import_engine import CADSRImportEngine diff --git a/schema_automator/importers/cadsr_import_engine.py b/schema_automator/importers/cadsr_import_engine.py new file mode 100644 index 0000000..9a3a05c --- /dev/null +++ b/schema_automator/importers/cadsr_import_engine.py @@ -0,0 +1,288 @@ +""" +CADSR CDE Import Engine + +This ingests the output of the caDSR API https://cadsrapi.cancer.gov/rad/NCIAPI/1.0/api +""" +import logging +import urllib +from typing import Union, Dict, Tuple, List, Any, Optional, Iterable, Iterator + +from dataclasses import dataclass + +from linkml.utils.schema_builder import SchemaBuilder +from linkml_runtime.linkml_model import Annotation +from linkml_runtime.linkml_model.meta import SchemaDefinition, SlotDefinition, EnumDefinition, \ + PermissibleValue, UniqueKey, ClassDefinition +from linkml_runtime.loaders import json_loader +from linkml_runtime.utils.formatutils import camelcase, underscore + +from schema_automator.importers.import_engine import ImportEngine +import schema_automator.metamodels.cadsr as cadsr + +ID_LABEL_PAIR = Tuple[str, str] + +TMAP = { + "DATE": "date", + "NUMBER": "float", + "ALPHANUMERIC": "string", + "CHARACTER": "string", + "HL7EDv3": "string", + "HL7CDv3": "string", + "java.lang.Double": "float", + "Numeric Alpha DVG": "float", + "SAS Date": "string", + "java.util.Date": "date", + "DATE/TIME": "datetime", + "TIME": "time", + "Integer": "integer", + "java.lang.Integer": "integer", + "Floating-point": "float", +} + +def extract_concepts(concepts: List[cadsr.Concept]) -> Tuple[ID_LABEL_PAIR, List[str]]: + main = None + rest = [] + if not concepts: + raise ValueError("No concepts") + for concept in concepts: + if concept.evsSource != "NCI_CONCEPT_CODE": + continue + id = f"NCIT:{concept.conceptCode.strip()}" + pair = id, concept.longName + if concept.primaryIndicator == "Yes": + if main: + raise ValueError(f"Multiple primary for: {concepts}") + main = pair + else: + rest.append(id) + if not main: + logging.warning(f"No primary, using arbitrary from {rest}") + main = rest[0] + rest = rest[1:] + return main, rest + +@dataclass +class CADSRImportEngine(ImportEngine): + """ + An ImportEngine that imports NCI CADSR CDEs + + Ingests the output of `caDSR API `_. + + Note that we include a LinkML schema for this in schema_automator.metamodels.cadsr + + - Each CDE (DataElement) becomes a unique slot + - the CDE is added as a lot of a context-specific class + - the context-specific class is a subclass of the CDE's DataElementConcept + + Note that this creates a lot of 1-1 classes, as in many cases there is no + attempt to group concepts. However, this is not always the case. + + E.g. the concept with publicId 2012668 (Access Route) is used in 5 contexts + (AHRQ, CCR, ...) + + Each context-specific concept has its own set of CDEs + + See also https://github.com/monarch-initiative/cde-harmonization + """ + + def convert(self, paths: Iterable[str], id: str=None, name: str=None, **kwargs) -> SchemaDefinition: + """ + Converts one or more CDE JSON files into LinkML + + :param files: + :param kwargs: + :return: + """ + sb = SchemaBuilder() + schema = sb.schema + if id: + schema.id = id + if not name: + name = package.name + if name: + schema.name = name + classes = {} + slots = {} + enums = {} + for path in paths: + logging.info(f"Loading {path}") + with (open(path) as file): + container: cadsr.DataElementContainer + container = json_loader.load(file, target_class=cadsr.DataElementContainer) + cde = container.DataElement + ctxt = cde.context + ln = cde.longName + source = urllib.parse.quote(ctxt) + source = f"cadsr:{source}" + # Each DataElement becomes one slot; + # we make the name both unique and human readable + # TODO: check this; frequently reused, e.g. + # NCI Standards + Group ID + slot = SlotDefinition( + name=urllib.parse.quote(underscore(f"{ctxt} {cde.preferredName} {ln}")), + slot_uri=f"cadsr:{cde.publicId}", + title=cde.preferredName, + description=cde.preferredDefinition, + aliases=[ln], + conforms_to=f"cadsr:DataElement", + source=source, + ) + # each data element belongs to a concept + # (may be reused across classes?) + slots[slot.name] = slot + dec = cde.DataElementConcept + property = dec.Property + main_prop_concept, prop_mappings = extract_concepts(property.Concepts) + # a concept is linked to a class + objectClass = dec.ObjectClass + # NCIT concepts describing the class; + # there will be one primary and possibly secondary concepts + mainConcept, mappings = extract_concepts(objectClass.Concepts) + class_name = objectClass.longName + concept_name = urllib.parse.quote(camelcase(f"{ctxt} {class_name}")) + parent_concept_name = urllib.parse.quote(class_name) + if parent_concept_name not in classes: + parent_cls = ClassDefinition( + name=parent_concept_name, + title=objectClass.preferredName, + description=objectClass.preferredDefinition, + #aliases=[concept.longName], + class_uri=f"cadsr:{objectClass.publicId}", + exact_mappings=[mainConcept[0]], + broad_mappings=mappings, + conforms_to=f"cadsr:ObjectClass", + ) + classes[parent_concept_name] = parent_cls + if concept_name not in classes: + cls = ClassDefinition( + name=concept_name, + title=f"{dec.preferredName} ({ctxt})", + description=dec.preferredDefinition, + aliases=[dec.longName], + class_uri=f"cadsr:{dec.publicId}", + is_a=parent_concept_name, + conforms_to=f"cadsr:DataElementConcept", + ) + classes[concept_name] = cls + else: + cls = classes[concept_name] + cls.slots.append(slot.name) + # In theory the ObjectClass should link to a general class of utility in NCIT. + # In practice the actual concept may not be so useful. E.g. in 2724331 + # "Agent Adverse Event Attribution Name" the DataConcept is + # Agent (C1708) defined as "An active power or cause (as principle, + # substance, physical or biological factor, etc.) that produces a specific effect." + # which is very upper-ontological + #for ocConcept in objectClass.Concepts: + # if ocConcept.evsSource == "NCI_CONCEPT_CODE": + # cls.is_a = f"NCIT:{ocConcept.conceptCode}" + valueDomain = cde.ValueDomain + # TODO + conceptualDomain = valueDomain.ConceptualDomain + pvs = valueDomain.PermissibleValues + if pvs: + enum_name = urllib.parse.quote(camelcase(valueDomain.preferredName)) + enum = EnumDefinition( + name=enum_name, + title=valueDomain.preferredName, + description=valueDomain.preferredDefinition, + aliases=[valueDomain.longName], + # enum_uri=f"cadsr:{valueDomain.publicId}", + ) + enums[enum_name] = enum + rng = enum_name + for pv in pvs: + # url encode the value to escape symbols like <, >, etc. + pv_value = urllib.parse.quote(pv.value).replace("%20", " ") + tgt_pv = PermissibleValue( + text=pv_value, + title=pv.value, + description=pv.valueDescription, + ) + enum.permissible_values[tgt_pv.text] = tgt_pv + vm = pv.ValueMeaning + tgt_pv.title = vm.preferredName + if not tgt_pv.description: + tgt_pv.description = vm.preferredDefinition + if vm.Concepts: + mainConcept, mappings = extract_concepts(vm.Concepts) + tgt_pv.meaning = mainConcept[0] + tgt_pv.broad_mappings = mappings + else: + datatype = valueDomain.dataType + rng = TMAP.get(datatype, "string") + slot.range = rng + anns = [] + for rd in cde.ReferenceDocuments: + rf_type = urllib.parse.quote(underscore(rd.type)) + anns.append(Annotation( + tag=rf_type, + value=rd.description, + )) + for ann in anns: + slot.annotations[ann.tag] = ann + + sb.add_prefix("NCIT", "http://purl.obolibrary.org/obo/NCIT_") + sb.add_prefix("cadsr", "http://example.org/cadsr/") + sb.add_defaults() + for c in schema.classes.values(): + c.from_schema = 'http://example.org/' + schema = sb.schema + schema.classes = classes + schema.slots = slots + schema.enums = enums + return schema + + def as_rows(self, paths: Iterable[str], **kwargs) -> Iterator[Dict]: + for path in paths: + logging.info(f"Loading {path}") + with (open(path) as file): + container: cadsr.DataElementContainer + container = json_loader.load(file, target_class=cadsr.DataElementContainer) + cde = container.DataElement + yield from self._obj_as_rows(cde, path) + + def _obj_as_rows(self, e: Union[cadsr.DataElement, cadsr.DataElementConcept, cadsr.Concept, cadsr.Property, cadsr.ObjectClass, cadsr.ConceptualDomain, + cadsr.ValueDomain, cadsr.PermissibleValue, cadsr.ValueMeaning], parent_id: str) -> Iterator[Dict]: + if isinstance(e, cadsr.Concept): + obj = { + "id": e.conceptCode, + "context": e.evsSource, + "longName": e.longName, + } + elif isinstance(e, cadsr.CDEPermissibleValue): + obj = { + "id": e.publicId, + "value": e.value, + "valueDescription": e.valueDescription, + } + else: + obj = { + "id": e.publicId, + "preferredName": e.preferredName, + "context": e.context, + "longName": e.longName, + } + obj["parentId"] = parent_id + obj["type"] = type(e).class_name + id = obj["id"] + yield obj + if isinstance(e, cadsr.DataElement): + yield from self._obj_as_rows(e.DataElementConcept, id) + yield from self._obj_as_rows(e.ValueDomain, id) + elif isinstance(e, cadsr.DataElementConcept): + yield from self._obj_as_rows(e.ObjectClass, id) + yield from self._obj_as_rows(e.Property, id) + yield from self._obj_as_rows(e.ConceptualDomain, id) + elif isinstance(e, cadsr.ValueDomain): + for pv in e.PermissibleValues: + yield from self._obj_as_rows(pv.ValueMeaning, id) + if isinstance(e, (cadsr.ObjectClass, cadsr.Property, cadsr.PermissibleValue)): + for c in e.Concepts: + yield from self._obj_as_rows(c, id) + + + + + + diff --git a/schema_automator/importers/dbml_import_engine.py b/schema_automator/importers/dbml_import_engine.py new file mode 100644 index 0000000..a40f7d4 --- /dev/null +++ b/schema_automator/importers/dbml_import_engine.py @@ -0,0 +1,95 @@ +from schema_automator.importers.import_engine import ImportEngine +from pydbml import PyDBML +from linkml_runtime.linkml_model import SchemaDefinition, ClassDefinition, SlotDefinition +from dataclasses import dataclass + + +def _map_dbml_type_to_linkml(dbml_type: str) -> str: + """ + Maps DBML data types to LinkML types. + + :param dbml_type: The DBML column type. + :return: Corresponding LinkML type. + """ + type_mapping = { + "int": "integer", + "varchar": "string", + "text": "string", + "float": "float", + "boolean": "boolean", + "date": "date", + "datetime": "datetime", + } + return type_mapping.get(dbml_type.lower(), "string") + + +@dataclass +class DbmlImportEngine(ImportEngine): + """ + An ImportEngine that introspects a DBML schema to determine a corresponding LinkML schema. + """ + + def convert( + self, + file: str, + name: str = None, + model_uri: str = None, + identifier: str = None, + **kwargs + ) -> SchemaDefinition: + """ + Converts a DBML schema file into a LinkML SchemaDefinition. + + :param file: Path to the DBML schema file. + :param name: Optional name for the generated LinkML schema. + :param model_uri: Optional URI for the schema. + :param identifier: Identifier field for the schema. + :return: SchemaDefinition object representing the DBML schema. + """ + # Initialize the schema definition + schema_name = name or "GeneratedSchema" + schema = SchemaDefinition(name=schema_name, id=model_uri or f"https://example.org/%7Bschema_name%7D") + + # Parse the DBML file + with open(file, 'r', encoding='utf-8') as f: + dbml_content = f.read() + parsed_dbml = PyDBML(dbml_content) + + # Process tables + for table in parsed_dbml.tables: + class_def = ClassDefinition( + name=table.name, + description=table.note or f"Auto-generated class for table '{table.name}'", + slots=[], + unique_keys=[], # Initialize unique keys property + ) + processed_slots = set() # Track processed slot names to avoid duplicates + + # Handle primary key and unique constraints + primary_key_columns = [col for col in table.columns if col.pk] + unique_columns = [col for col in table.columns if col.unique and not col.pk] + + # Process columns + for column in table.columns: + + slot_name = column.name + slot_def = SlotDefinition( + name=slot_name, + range=_map_dbml_type_to_linkml(column.type), + description=column.note or f"Column '{slot_name}'", + required=column in primary_key_columns or column.unique, + identifier=column in primary_key_columns, # Mark primary key columns as identifiers + ) + schema.slots[slot_name] = slot_def + class_def.slots.append(slot_name) + processed_slots.add(slot_name) + + # Handle single unique column as primary key if no explicit primary key exists + if not primary_key_columns and len(unique_columns) == 1: + unique_column = unique_columns[0] + schema.slots[unique_column.name].identifier = True + schema.slots[unique_column.name].required = True + + schema.classes[table.name] = class_def + + return schema diff --git a/schema_automator/importers/dosdp_import_engine.py b/schema_automator/importers/dosdp_import_engine.py index 9b49c09..c9010ad 100644 --- a/schema_automator/importers/dosdp_import_engine.py +++ b/schema_automator/importers/dosdp_import_engine.py @@ -139,9 +139,10 @@ def deref_class(name: ALIAS) -> CURIE: rangedef = ClassDefinition(camelcase(f'{range_base_name} class')) #rangedef.is_a = METACLASS rangedef.mixins = [GROUPING_CLASS] - subc_slot = SlotDefinition('subclass_of', - has_member=AnonymousSlotExpression(equals_string=var_range_as_curie)) - rangedef.slot_usage[subc_slot.name] = subc_slot + # TODO: restore when owlgen fixed + #subc_slot = SlotDefinition('subclass_of', + # has_member=AnonymousSlotExpression(equals_string=var_range_as_curie)) + #rangedef.slot_usage[subc_slot.name] = subc_slot extra_classes.append(rangedef) rangedef.description = f'Any subclass of {var_range_as_curie} ({v.range})' slot = SlotDefinition(vn, range=rangedef.name) diff --git a/schema_automator/importers/frictionless_import_engine.py b/schema_automator/importers/frictionless_import_engine.py index 14a9d79..3c3e57e 100644 --- a/schema_automator/importers/frictionless_import_engine.py +++ b/schema_automator/importers/frictionless_import_engine.py @@ -46,7 +46,7 @@ class FrictionlessImportEngine(ImportEngine): """ - def convert(self, file: str, id: str,name: str, **kwargs) -> SchemaDefinition: + def convert(self, file: str, id: str=None, name: str=None, **kwargs) -> SchemaDefinition: """ Converts one or more JSON files into a Schema @@ -59,8 +59,6 @@ def convert(self, file: str, id: str,name: str, **kwargs) -> SchemaDefinition: schema = sb.schema if id: schema.id = id - if name: - sb.add_prefix(name, f"{id}/") if not name: name = package.name if name: @@ -128,7 +126,7 @@ def add_enum(self, sb: SchemaBuilder, field: fl.Field) -> EnumDefinition: if len(toks) == 2: [prefix, short] = toks pv = PermissibleValue(short, meaning=code) - sb.add_prefix(prefix, f"{sb.schema.id}/{prefix}/") + sb.add_prefix(prefix, f"{sb.schema.id}/{prefix}/", replace_if_present=True) e.permissible_values[pv.text] = pv if e.name is sb.schema: raise NotImplementedError(f"Cannot yet merge enums") diff --git a/schema_automator/importers/import_engine.py b/schema_automator/importers/import_engine.py index b807899..e644ca8 100644 --- a/schema_automator/importers/import_engine.py +++ b/schema_automator/importers/import_engine.py @@ -1,8 +1,10 @@ from abc import ABC +from dataclasses import dataclass from linkml_runtime.linkml_model import SchemaDefinition, Prefix +@dataclass class ImportEngine(ABC): """ Abstract Base Class for all Import Engines. diff --git a/schema_automator/importers/jsonschema_import_engine.py b/schema_automator/importers/jsonschema_import_engine.py index 3110927..fec8629 100644 --- a/schema_automator/importers/jsonschema_import_engine.py +++ b/schema_automator/importers/jsonschema_import_engine.py @@ -1,29 +1,46 @@ import json +from dataclasses import dataclass +from pathlib import Path import click import yaml import logging -from copy import copy -from typing import Any, Tuple, Dict, Union, List, Optional +from typing import Any, Tuple, Dict, List, Optional -from linkml_runtime.linkml_model import SchemaDefinition, Element, ClassDefinition, \ +from linkml.utils.schema_builder import SchemaBuilder +from linkml_runtime.linkml_model import SchemaDefinition, ClassDefinition, \ SlotDefinition, EnumDefinition, \ - ClassDefinitionName, \ - SlotDefinitionName, Prefix -from linkml_runtime.utils.formatutils import underscore + ClassDefinitionName, Prefix +from linkml_runtime.linkml_model.meta import ReachabilityQuery, AnonymousEnumExpression +from linkml_runtime.utils.formatutils import underscore, camelcase from schema_automator.importers.import_engine import ImportEngine -from schema_automator.utils.schemautils import minify_schema, write_schema +from schema_automator.utils.schemautils import write_schema # TODO: move to core. https://github.com/linkml/linkml/issues/104 RESERVED = ['in', 'not', 'def'] + +def json_schema_from_open_api(oa: Dict) -> Dict: + """ + Convert an OpenAPI schema to a JSON-Schema schema + + :param oa: + :return: + """ + schemas = oa.get('components', {}).get('schemas', {}) + schema = {'$defs': schemas} + return schema + +@dataclass class JsonSchemaImportEngine(ImportEngine): """ - A :ref:`ImportEngine` that imports a JSON-Schema representation to a LinkML Schema + An ImportEngine that imports a JSON-Schema representation to a LinkML Schema """ + use_attributes: bool = False + is_openapi: bool = False - def convert(self, input: str, name=None, format = 'json', **kwargs): + def convert(self, input: str, name=None, format = 'json', **kwargs) -> SchemaDefinition: """ Converts a JSON-Schema json file into a LinkML schema @@ -41,14 +58,77 @@ def convert(self, input: str, name=None, format = 'json', **kwargs): obj = yaml.safe_load(stream) else: raise Exception(f'Bad format: {format}') - return self.loads(obj, name, **kwargs) + return self.loads(obj, name, input_path=input, **kwargs) + + def import_project(self, import_directory: str, export_directory: str, match_suffix=".json", name=None, **kwargs) -> str: + path = Path(import_directory) + export_path = Path(export_directory) + imports_list = [] + importer_name = "main.yaml" + if name is None: + name = "imported" + path_to_schema_map = {} + class_name_to_module_map = {} + for item in path.rglob("*"): + if str(item).endswith(match_suffix): + relpath = item.relative_to(path) + module_name = str(relpath.with_suffix("").as_posix()) + module_name_safe = "-".join(relpath.with_suffix("").parts) + logging.info(f"Converting {item} => {module_name_safe}") + schema = self.convert(str(item), name=module_name_safe, **kwargs) + output_path = export_path / relpath + output_path = output_path.with_suffix(".yaml") + output_path.parent.mkdir(parents=True, exist_ok=True) + path_to_schema_map[output_path] = schema + if str(output_path) == importer_name: + raise ValueError(f"Must choose new importer_name: {output_path}") + imports_list.append(module_name) + for cn in schema.classes: + if cn in class_name_to_module_map: + raise ValueError(f"Class name clash; {cn} is in {module_name} and {class_name_to_module_map[cn]}") + class_name_to_module_map[cn] = module_name + # add imports based on ranges + for this_module, schema in path_to_schema_map.items(): + relpath = this_module.relative_to(export_path) + logging.debug(f"Relative path {relpath} for module at: {this_module}") + depth = len(relpath.parts) - 1 + rel = "../" * depth + for cls in schema.classes.values(): + for a in cls.attributes.values(): + rng = a.range + if rng not in class_name_to_module_map: + continue + if rng in schema.classes: + # no need to self-import + continue + import_module_name = rel + class_name_to_module_map[rng] + if import_module_name not in schema.imports: + logging.info(f"Adding import to {import_module_name} in {schema.name} for {rng}") + schema.imports.append(import_module_name) + for output_path, schema in path_to_schema_map.items(): + write_schema(schema, output_path) + sb = SchemaBuilder(name=name) + sb.add_defaults() + s = sb.schema + for i in imports_list: + s.imports.append(i) + importer_path = export_path / importer_name + write_schema(s, importer_path) + return str(importer_path) + def load(self, input: str, name=None, format = 'json', **kwargs): return self.convert(input, name=name, format=format, **kwargs) def loads(self, obj: Any, name=None, **kwargs) -> SchemaDefinition: + if self.is_openapi: + obj = json_schema_from_open_api(obj) return self.translate_schema(obj, name, **kwargs) + def _class_name(self, cn: str) -> str: + # in future this can be configurable + return camelcase(cn) + def get_id(self, obj) -> str: if 'id' in obj: id = obj['id'] @@ -56,7 +136,10 @@ def get_id(self, obj) -> str: id = obj['$ref'] else: raise Exception(f'No id {obj}') - return self.split_name(id)[0] + if id.startswith("#/definitions/"): + return self.split_name(id)[0] + else: + return self._class_name(Path(str(id)).stem) def split_name(self, name) -> Tuple[str, str]: name = name.replace('#/definitions/', '') @@ -68,13 +151,15 @@ def split_name(self, name) -> Tuple[str, str]: return name, pkg - def translate_schema(self, obj: Dict, id_val=None, name=None, root_class_name=None) -> SchemaDefinition: + def translate_schema(self, obj: Dict, id_val=None, name=None, root_class_name=None, input_path: str = None) -> SchemaDefinition: if id_val is None and '$id' in obj: id_val = obj['$id'] if id_val is None and '$schema' in obj: id_val = obj['$schema'] if name is None and 'title' in obj: name = obj['title'].replace(' ','-') + if name[0].isnumeric(): + name = f"_{name}" jsonschema_version = obj.get('$schema', None) if id_val is None and name is None: raise Exception(f'Must pass name OR id, or these must be present in the jsonschema') @@ -88,9 +173,17 @@ def translate_schema(self, obj: Dict, id_val=None, name=None, root_class_name=No self.translate_definitions(obj.get('$defs', {})) else: self.translate_definitions(obj.get('definitions', {})) + if root_class_name is None: + root_class_name = obj.get('name', None) if root_class_name is None: root_class_name = obj.get('title', None) + if root_class_name is None and input_path: + root_class_name = Path(input_path).stem + if root_class_name is None: + raise ValueError(f'No root class name: {obj}') + root_class_name = self._class_name(root_class_name) if 'properties' in obj: + logging.info(f'Root class: {root_class_name}') root_class = ClassDefinition(root_class_name) self.translate_properties(obj, root_class) self.schema.classes[root_class_name] = root_class @@ -121,7 +214,7 @@ def translate_array(self, obj: Dict, name: str) -> SlotDefinition: slot.multivalued = True return slot elif 'properties' in obj: - c = ClassDefinition(f'{name}Class') + c = ClassDefinition(f'{self._class_name(name)}Class') self.translate_properties(obj, c) self.schema.classes[c.name] = c slot = SlotDefinition(name) @@ -133,20 +226,19 @@ def translate_array(self, obj: Dict, name: str) -> SlotDefinition: return None def translate_ref(self, obj: dict) -> ClassDefinitionName: - return ClassDefinitionName(self.get_id(obj)) + return ClassDefinitionName(self._class_name(self.get_id(obj))) def translate_oneOf(self, oneOfList: List) -> Optional[ClassDefinition]: if all('$ref' in x for x in oneOfList): cns = [self.translate_ref(x) for x in oneOfList] - n = '_'.join(cns) + n = self._class_name('_'.join(cns)) c = ClassDefinition(n, union_of=cns) return c else: logging.warning(f'Cannot yet handle oneOfs without refs: {oneOfList}') return None - def translate_property(self, obj: Dict, name: str) -> SlotDefinition: - #print(f'Translating property {name}: {obj}') + def translate_property(self, obj: Dict, name: str, class_name: str = None) -> SlotDefinition: if name is None: raise ValueError(f'Name not set for {obj}') schema = self.schema @@ -159,6 +251,8 @@ def translate_property(self, obj: Dict, name: str) -> SlotDefinition: s.description = obj.get('description', None) if s.description is not None: s.description = s.description.strip() + # HCA-specific + s.title = obj.get("user_friendly", None) default = obj.get('default', None) if '$ref' in obj: s.range = self.translate_ref(obj) @@ -179,16 +273,50 @@ def translate_property(self, obj: Dict, name: str) -> SlotDefinition: elif t == 'string': if 'enum' in obj: pvs = obj['enum'] - ename = f'{name}_options' + if self.use_attributes and class_name: + ename = f'{class_name}_{name}_options' + else: + ename = f'{name}_options' schema.enums[ename] = EnumDefinition(name=ename, permissible_values=pvs) s.range = ename + self._enum_from_ontology_extension(s, obj, name, class_name=class_name) else: logging.error(f'Cannot translate type {t} in {obj}') if s.name is schema.slots: logging.warning(f'TODO: unify alternate slots') - schema.slots[s.name] = s + if not self.use_attributes: + schema.slots[s.name] = s return s + def _enum_from_ontology_extension(self, slot: SlotDefinition, js_obj: dict, name: str, class_name: str = None): + gr = js_obj.get("graph_restriction", None) + if not gr: + return + if self.use_attributes and class_name: + ename = f'{class_name}_{name}_options' + else: + ename = f'{name}_options' + rqs = [] + for ont in gr["ontologies"]: + rq = ReachabilityQuery(source_ontology=ont, + source_nodes=gr.get("classes", []), + include_self=gr.get("include_self", False), + is_direct=gr.get("direct", False), + relationship_types=gr.get("relations", []), + ) + rqs.append(rq) + + if len(rqs) == 0: + logging.warning(f"No ontologies in {gr}") + return + elif len(rqs) == 1: + edef = EnumDefinition(ename, reachable_from = rqs[0]) + else: + includes = [AnonymousEnumExpression(reachable_from=rq) for rq in rqs] + edef = EnumDefinition(ename, include=includes) + self.schema.enums[ename] = edef + slot.range = ename + def translate_object(self, obj: Dict, name: str = None) -> ClassDefinitionName: """ Translates jsonschema obj of type object @@ -218,17 +346,20 @@ def translate_object(self, obj: Dict, name: str = None) -> ClassDefinitionName: raise ValueError(f'Problem splitting name from package') if name is None: name = 'TODO' + name = self._class_name(name) c = ClassDefinition(name, description=desc, from_schema=pkg) if unionCls: c.union_of = unionCls.union_of for k, v in properties.items(): # TODO: reuse below - #print(f' PROP {k} = {v}') - slot = self.translate_property(v, k) + slot = self.translate_property(v, k, class_name=name) if slot.name in required: slot.required = True - c.slots.append(slot.name) - c.slot_usage[slot.name] = slot + if self.use_attributes: + c.attributes[slot.name] = slot + else: + c.slots.append(slot.name) + c.slot_usage[slot.name] = slot schema.classes[c.name] = c return c.name @@ -236,11 +367,14 @@ def translate_object(self, obj: Dict, name: str = None) -> ClassDefinitionName: def translate_properties(self, obj: dict, parent_class: ClassDefinition): required = obj.get('required', []) for k, v in obj.get('properties',{}).items(): - slot = self.translate_property(v, k) + slot = self.translate_property(v, k, class_name=parent_class.name) if slot.name in required: slot.required = True - parent_class.slots.append(slot.name) - parent_class.slot_usage[slot.name] = slot + if self.use_attributes: + parent_class.attributes[slot.name] = slot + else: + parent_class.slots.append(slot.name) + parent_class.slot_usage[slot.name] = slot @click.command() diff --git a/schema_automator/importers/kwalify_import_engine.py b/schema_automator/importers/kwalify_import_engine.py new file mode 100644 index 0000000..08956cb --- /dev/null +++ b/schema_automator/importers/kwalify_import_engine.py @@ -0,0 +1,109 @@ +from typing import Union, Dict, Tuple, List, Any, Optional + +from dataclasses import dataclass + +import yaml +from linkml.utils.schema_builder import SchemaBuilder +from linkml_runtime.linkml_model.meta import SchemaDefinition, SlotDefinition, EnumDefinition, \ + PermissibleValue, UniqueKey, ClassDefinition +from linkml_runtime.utils.formatutils import camelcase + +from schema_automator.importers.import_engine import ImportEngine +import schema_automator.metamodels.frictionless as fl + + +# maps from kwalify to linkml +TYPE_MAPPING = { + "str": "string", + "int": "integer", + "float": "float", + "bool": "boolean", + "timestamp": "datetime", +} + + + +@dataclass +class KwalifyImportEngine(ImportEngine): + """ + An ImportEngine that imports Kwalify schemas + """ + + def convert(self, file: str, id: str=None, name: str=None, class_name: str=None, **kwargs) -> SchemaDefinition: + """ + Converts one or more Kwalify files into a Schema + + :param files: + :param kwargs: + :return: + """ + sb = SchemaBuilder() + schema = sb.schema + if id: + schema.id = id + if not name: + name = "example" + if name: + schema.name = name + kwalify = yaml.safe_load(open(file)) + if kwalify["type"] != "map": + raise ValueError(f"Expected map, got {kwalify['type']}") + if class_name is None: + class_name = camelcase(name) + self.convert_to_class(sb, kwalify["mapping"], class_name) + sb.add_defaults() + if name: + schema.default_prefix = name + return sb.schema + + def convert_to_class(self, sb: SchemaBuilder, kwalify_map: Dict[str, Any], name: str): + """ + Convert a Kwalify map to a class + + :param sb: + :param kwalify: + :param name: + :return: + """ + cls = ClassDefinition(name=name) + sb.schema.classes[name] = cls + for slot_name, v in kwalify_map.items(): + if isinstance(v, list): + if len(v) != 1: + raise ValueError(f"Expected single element in list, got {v}") + v = v[0] + slot = SlotDefinition(name=slot_name, required=v.get('required', False)) + pattern = v.get('pattern', None) + if pattern: + # remove outer /..../ + slot.pattern = pattern[1:-1] + + typ = v['type'] + if typ == 'seq': + slot.multivalued = True + seq = v['sequence'] + if len(seq) != 1: + raise ValueError(f"Expected single element in sequence, got {seq}") + v = seq[0] + typ = v['type'] + if typ == 'map': + range_cls_name = camelcase(slot_name) + self.convert_to_class(sb, v["mapping"], range_cls_name) + slot.range = range_cls_name + elif typ == 'seq': + raise NotImplementedError("Sequences of sequences not supported") + else: + slot.range = TYPE_MAPPING.get(typ, "string") + pvs = v.get('enum', None) + if pvs: + enum_name = f"{name}_{slot_name}_enum" + sb.add_enum(EnumDefinition(name=enum_name, permissible_values=pvs)) + slot.range = enum_name + cls.attributes[slot_name] = slot + + + + + + + diff --git a/schema_automator/importers/owl_import_engine.py b/schema_automator/importers/owl_import_engine.py index 487a9bd..921923c 100644 --- a/schema_automator/importers/owl_import_engine.py +++ b/schema_automator/importers/owl_import_engine.py @@ -266,7 +266,10 @@ def set_cardinality(p, min_card, max_card): val = a.value.v if isinstance(sub, IRI): sub = self.iri_to_name(sub) - if isinstance(val, Literal): + if isinstance(val, AnonymousIndividual): + logging.info(f'Ignoring anonymous individuals: {sub} {strp} {val}') + continue + elif isinstance(val, Literal): val = str(val.v) elif isinstance(val, IRI): val = val.v diff --git a/schema_automator/importers/rdfs_import_engine.py b/schema_automator/importers/rdfs_import_engine.py new file mode 100644 index 0000000..d34ea0d --- /dev/null +++ b/schema_automator/importers/rdfs_import_engine.py @@ -0,0 +1,376 @@ +import logging +from pathlib import Path +from typing import Any, Dict, Iterable, List, Mapping, Optional, TextIO, Union +import typing +from collections import defaultdict, Counter +import warnings + +from jsonasobj2 import JsonObj +from linkml.utils.schema_builder import SchemaBuilder +from linkml_runtime import SchemaView +from linkml_runtime.linkml_model import ( + SchemaDefinition, + SlotDefinition, + ClassDefinition, + Prefix, +) + +from dataclasses import dataclass, field + +from linkml_runtime.utils.formatutils import underscore +from linkml_runtime.utils.introspection import package_schemaview +from rdflib import Graph, RDF, OWL, URIRef, RDFS, SKOS, SDO, Namespace, Literal +from schema_automator.importers.import_engine import ImportEngine + + +HTTP_SDO = Namespace("http://schema.org/") + +DEFAULT_METAMODEL_MAPPINGS: Dict[str, List[URIRef]] = { + # See https://github.com/linkml/linkml/issues/2507 + "description": [RDFS.comment], + "is_a": [RDFS.subClassOf, SKOS.broader], + "domain_of": [HTTP_SDO.domainIncludes, SDO.domainIncludes, RDFS.domain], + "range": [HTTP_SDO.rangeIncludes, SDO.rangeIncludes, RDFS.range], + "exact_mappings": [OWL.sameAs, HTTP_SDO.sameAs], + ClassDefinition.__name__: [RDFS.Class, OWL.Class, SKOS.Concept], + SlotDefinition.__name__: [ + RDF.Property, + OWL.ObjectProperty, + OWL.DatatypeProperty, + OWL.AnnotationProperty, + ], +} + + +@dataclass +class RdfsImportEngine(ImportEngine): + """ + An ImportEngine that takes RDFS and converts it to a LinkML schema + """ + #: View over the LinkML metamodel + metamodel: SchemaView = field(init=False) + #: Mapping from field names in this RDF schema (e.g. `price`) to IRIs (e.g. `http://schema.org/price`) + mappings: Dict[str, URIRef] = field(default_factory=dict) + #: User-defined mapping from LinkML metamodel slots (such as `domain_of`) to RDFS IRIs (such as http://schema.org/domainIncludes) + initial_metamodel_mappings: Dict[str, Union[URIRef, List[URIRef]]] = field(default_factory=dict) + #: Combined mapping from LinkML metamodel slots to RDFS IRIs + metamodel_mappings: Dict[str, List[URIRef]] = field(default_factory=lambda: defaultdict(list)) + #: Reverse of `metamodel_mappings`, but supports multiple terms mapping to the same IRI + reverse_metamodel_mappings: Dict[URIRef, List[str]] = field(default_factory=lambda: defaultdict(list)) + #: The names of LinkML ClassDefinition slots + classdef_slots: set[str] = field(init=False) + #: The names of LinkML SlotDefinition slots + slotdef_slots: set[str] = field(init=False) + #: Every prefix seen in the graph + seen_prefixes: set[str] = field(default_factory=set) + #: The counts of each prefix, used to infer the default prefix + prefix_counts: Counter[str] = field(default_factory=Counter) + + def __post_init__(self): + sv = package_schemaview("linkml_runtime.linkml_model.meta") + self.metamodel = sv + + # Populate the combined metamodel mappings + for k, vs in DEFAULT_METAMODEL_MAPPINGS.items(): + self.metamodel_mappings[k].extend(vs) + for v in vs: + self.reverse_metamodel_mappings[v].append(k) + if self.initial_metamodel_mappings: + for k, vs in self.initial_metamodel_mappings.items(): + if not isinstance(vs, list): + vs = [vs] + self.metamodel_mappings[k].extend(vs) + for v in vs: + self.reverse_metamodel_mappings[URIRef(v)].append(k) + logging.info(f"Adding mapping {k} -> {v}") + + # LinkML fields have some built-in mappings to other ontologies, such as https://w3id.org/linkml/Any -> AnyValue + for e in sv.all_elements().values(): + mappings = [] + for ms in sv.get_mappings(e.name, expand=True).values(): + for m in ms: + uri = URIRef(m) + mappings.append(uri) + self.reverse_metamodel_mappings[uri].append(e.name) + self.metamodel_mappings[e.name] = mappings + self.classdef_slots = {s.name for s in sv.class_induced_slots(ClassDefinition.class_name)} + self.slotdef_slots = {s.name for s in sv.class_induced_slots(SlotDefinition.class_name)} + + def convert( + self, + file: Union[str, Path, TextIO], + name: Optional[str] = None, + format: Optional[str] = "turtle", + default_prefix: Optional[str] = None, + model_uri: Optional[str] = None, + identifier: Optional[str] = None, + **kwargs: Any, + ) -> SchemaDefinition: + """ + Converts an OWL schema-style ontology + """ + g = Graph(bind_namespaces="none") + g.parse(file, format=format) + sb = SchemaBuilder() + sb.add_defaults() + schema = sb.schema + for k, v in g.namespaces(): + if str(v) == "https://schema.org/": + # Normalise schema.org to HTTP + v = "http://schema.org/" + if k == "schema" and str(v) != "http://schema.org/": + continue + sb.add_prefix(k, v, replace_if_present=True) + if default_prefix is not None and isinstance(schema.prefixes, dict): + schema.default_prefix = default_prefix + if model_uri is not None and default_prefix not in schema.prefixes: + sb.add_prefix(default_prefix, model_uri, replace_if_present=True) + prefix = schema.prefixes[default_prefix] + if isinstance(prefix, Prefix): + schema.id = prefix.prefix_reference + cls_slots = defaultdict(list) + + for slot in self.generate_rdfs_properties(g, cls_slots): + if slot.name in sb.schema.slots: + logging.warning(f"Slot '{slot.name}' already exists in schema; skipping duplicate.") + else: + sb.add_slot(slot) + for cls in self.process_rdfs_classes(g, cls_slots): + sb.add_class(cls) + + if identifier is not None and isinstance(schema.slots, dict) and isinstance(schema.classes, dict): + id_slot = SlotDefinition(identifier, identifier=True, range="uriorcurie") + schema.slots[identifier] = id_slot + for c in schema.classes.values(): + if isinstance(c, ClassDefinition) and isinstance(c.slots, list): + if not c.is_a and not c.mixins: + if identifier not in c.slots: + c.slots.append(identifier) + + # Remove prefixes that aren't used + if isinstance(schema.imports, list): + for imp in schema.imports: + prefix, _suffix = imp.split(":", 1) + self.seen_prefixes.add(prefix) + schema.prefixes = {key: value for key, value in schema.prefixes.items() if key in self.seen_prefixes} + self.infer_metadata(schema, name, default_prefix, model_uri) + self.fix_missing(schema) + self._normalize_slot_ranges(schema) + return schema + + def infer_metadata( + self, + schema: SchemaDefinition, + name: Optional[str] = None, + default_prefix: Optional[str] = None, + model_uri: Optional[str] = None, + ): + top_count = self.prefix_counts.most_common(1) + if len(top_count) == 0: + raise ValueError("No prefixes found in the graph") + inferred_prefix = top_count[0][0] + + schema.name = name or inferred_prefix + schema.default_prefix = default_prefix or inferred_prefix + prefix_uri = None + if isinstance(schema.prefixes, Mapping): + prefix_uri = schema.prefixes.get(inferred_prefix) + elif isinstance(schema.prefixes, JsonObj): + prefix_uri = schema.prefixes._get(inferred_prefix) + if isinstance(prefix_uri, Prefix): + schema.id = model_uri or prefix_uri.prefix_reference + + def fix_missing(self, schema: SchemaDefinition) -> None: + """ + For some properties we have a `subproperty_of` that references a slot that doesn't exist. + This removes such links. + For example with `schema:name`, we have a `subPropertyOf` that references `rdfs:label`, which is from + the RDFS metamodel that we don't currently import. + """ + if not isinstance(schema.slots, dict): + raise ValueError("SchemaBuilder schema must have slots as a dict") + slot_names: set[str] = set(schema.slots.keys()) + for slot in schema.slots.values(): + if not isinstance(slot, SlotDefinition): + raise ValueError(f"Slot {slot} is not a SlotDefinition") + if slot.subproperty_of is not None and slot.subproperty_of not in slot_names: + logging.warning(f"Slot {slot.name} has subproperty_of {slot.subproperty_of}, but that slot is missing") + slot.subproperty_of = None + + def track_uri(self, uri: str, g: Graph) -> None: + """ + Updates the set of prefixes seen in the graph + """ + prefix, _namespace, _name = g.namespace_manager.compute_qname(uri) + self.seen_prefixes.add(prefix) + self.prefix_counts.update([prefix]) + + def process_rdfs_classes( + self, + g: Graph, + cls_slots: Dict[str, List[str]], + ) -> Iterable[ClassDefinition]: + """ + Converts the RDFS classes in the graph to LinkML SlotDefinitions + """ + rdfs_classes: List[URIRef] = [] + + for rdfs_class_metaclass in self._rdfs_metamodel_iri(ClassDefinition.__name__): + for s in g.subjects(RDF.type, rdfs_class_metaclass): + if isinstance(s, URIRef): + rdfs_classes.append(s) + + # implicit classes + for metap in [RDFS.subClassOf]: + for s, _, o in g.triples((None, metap, None)): + if isinstance(s, URIRef): + rdfs_classes.append(s) + if isinstance(o, URIRef): + rdfs_classes.append(o) + + for s in set(rdfs_classes): + self.track_uri(s, g) + cn = self.iri_to_name(s) + init_dict = self._dict_for_subject(g, s, "class") + c = ClassDefinition(cn, **init_dict) + c.slots = cls_slots.get(cn, []) + c.class_uri = str(s.n3(g.namespace_manager)) + yield c + + def generate_rdfs_properties( + self, + g: Graph, + cls_slots: Dict[str, List[str]] + ) -> Iterable[SlotDefinition]: + """ + Converts the RDFS properties in the graph to LinkML SlotDefinitions + """ + # All property IDs + props: set[URIRef] = set() + + # Add explicit properties, ie those with a RDF.type mapping + for rdfs_property_metaclass in self._rdfs_metamodel_iri(SlotDefinition.__name__): + for p in g.subjects(RDF.type, rdfs_property_metaclass): + if isinstance(p, URIRef): + props.add(p) + + # Add implicit properties, ie those that are the domain or range of a property + for metap in ( + self.metamodel_mappings["domain_of"] + + self.metamodel_mappings["rangeIncludes"] + ): + for p, _, _o in g.triples((None, metap, None)): + if isinstance(p, URIRef): + props.add(p) + + for p in props: + self.track_uri(p, g) + sn = self.iri_to_name(p) + #: kwargs for SlotDefinition + init_dict = self._dict_for_subject(g, p, "slot") + + # Special case for domains and ranges: add them directly as class slots + if "domain_of" in init_dict: + for x in init_dict["domain_of"]: + cls_slots[x].append(sn) + del init_dict["domain_of"] + if "range" in init_dict: + range = init_dict["range"] + # Handle a range of multiple types + if isinstance(range, list): + init_dict["any_of"] = [{"range": x} for x in init_dict["rangeIncludes"]] + del init_dict["range"] + slot = SlotDefinition(sn, **init_dict) + slot.slot_uri = str(p.n3(g.namespace_manager)) + yield slot + + def _dict_for_subject(self, g: Graph, s: URIRef, subject_type: typing.Literal["slot", "class"]) -> Dict[str, Any]: + """ + Looks up triples for a subject and converts to dict using linkml keys. + + :param g: RDFS graph + :param s: property URI in that graph + :return: Dictionary mapping linkml metamodel keys to values + """ + init_dict = {} + # Each RDFS predicate/object pair corresponds to a LinkML key value pair for the slot + for pp, obj in g.predicate_objects(s): + if pp == RDF.type: + continue + metaslot_name = self._element_from_iri(pp) + logging.debug(f"Mapping {pp} -> {metaslot_name}") + # Filter out slots that don't belong in a class definition + if subject_type == "class" and metaslot_name not in self.classdef_slots: + continue + # Filter out slots that don't belong in a slot definition + if subject_type == "slot" and metaslot_name not in self.slotdef_slots: + continue + if metaslot_name is None: + logging.warning(f"Not mapping {pp}") + continue + if metaslot_name == "name": + metaslot_name = "title" + metaslot = self.metamodel.get_slot(metaslot_name) + v = self._object_to_value(obj, metaslot=metaslot) + metaslot_name_safe = underscore(metaslot_name) + if not metaslot or metaslot.multivalued: + if metaslot_name_safe not in init_dict: + init_dict[metaslot_name_safe] = [] + init_dict[metaslot_name_safe].append(v) + else: + init_dict[metaslot_name_safe] = v + return init_dict + + def _rdfs_metamodel_iri(self, name: str) -> List[URIRef]: + return self.metamodel_mappings.get(name, []) + + def _element_from_iri(self, iri: URIRef) -> Optional[str]: + r = self.reverse_metamodel_mappings.get(iri, []) + if len(r) > 0: + if len(r) > 1: + logging.debug(f"Multiple mappings for {iri}: {r}") + return r[0] + + def _object_to_value(self, obj: Any, metaslot: SlotDefinition) -> Any: + if isinstance(obj, URIRef): + if metaslot.range == "uriorcurie" or metaslot.range == "uri": + return str(obj) + return self.iri_to_name(obj) + if isinstance(obj, Literal): + return obj.value + return obj + + def iri_to_name(self, v: URIRef) -> str: + n = self._as_name(v) + if n != v: + self.mappings[n] = v + return n + + def _as_name(self, v: URIRef) -> str: + v_str = str(v) + for sep in ["#", "/", ":"]: + if sep in v_str: + return v_str.split(sep)[-1] + return v_str + + def _normalize_slot_ranges(self, schema: SchemaDefinition) -> None: + """ + Normalize slot ranges to valid LinkML scalars where needed. + Currently supports remapping RDF types like 'langString'. + """ + RDF_DATATYPE_MAP = { + "langString": "string", + "Text": "string", + "Thing": "string", + "landingPage": "string", + "Boolean": "boolean", + "Number": "integer", + "URL": "uri", + } + + for slot in schema.slots.values(): + if slot.range in RDF_DATATYPE_MAP: + warnings.warn( + f"Slot '{slot.name}' has unsupported range '{slot.range}'; mapping to '{RDF_DATATYPE_MAP[slot.range]}'." + ) + slot.range = RDF_DATATYPE_MAP[slot.range] diff --git a/schema_automator/importers/tabular_import_engine.py b/schema_automator/importers/tabular_import_engine.py new file mode 100644 index 0000000..4c6dfc9 --- /dev/null +++ b/schema_automator/importers/tabular_import_engine.py @@ -0,0 +1,57 @@ +import logging + +from dataclasses import dataclass +from tempfile import NamedTemporaryFile +from typing import List + +from linkml_runtime.linkml_model.meta import SchemaDefinition +from schemasheets.schemamaker import SchemaMaker + +from schema_automator.importers.import_engine import ImportEngine +import pandas as pd + + +@dataclass +class TableImportEngine(ImportEngine): + """ + An ImportEngine that imports tabular data via schemasheets + + """ + element_type: str = None + parent: str = None + columns: List[str] = None + + def convert(self, file: str) -> SchemaDefinition: + """ + Converts one or more JSON files into a Schema + + :param files: + :param kwargs: + :return: + """ + df = pd.read_csv(file, sep='\t') + self.import_from_dataframe(df) + + def import_from_dataframe(self, df: pd.DataFrame): + """ + Imports a dataframe into a schema + + :param df: + :return: + """ + tf = NamedTemporaryFile(delete=False) + if not self.columns: + raise ValueError("Must specify columns") + logging.info(f"Using columns: {self.columns}") + ix = 1 + line = pd.DataFrame(dict(zip(df.head(), self.columns)), index=[ix]) + df = pd.concat([df.iloc[:ix-1], line, df.iloc[ix-1:]]).reset_index(drop=True) + if self.parent: + df.insert(0, + column="parent", + value=[f">{self.element_type}"] + [self.parent] * (len(df) - 1)) + df.to_csv(tf.name, sep='\t', index=False) + #print(open(tf.name, 'r').read()) + #element_map = dict(zip(df.head(), self.columns)) + sm = SchemaMaker() + return sm.create_schema([tf.name]) diff --git a/schema_automator/metamodels/cadsr.py b/schema_automator/metamodels/cadsr.py new file mode 100644 index 0000000..a115d4e --- /dev/null +++ b/schema_automator/metamodels/cadsr.py @@ -0,0 +1,2708 @@ +# Auto generated from cadsr.yaml by pythongen.py version: 0.0.1 +# Generation date: 2024-02-24T19:17:52 +# Schema: cadsr +# +# id: https://example.org/cadsr +# description: +# license: https://creativecommons.org/publicdomain/zero/1.0/ + +import dataclasses +import re +from jsonasobj2 import JsonObj, as_dict +from typing import Optional, List, Union, Dict, ClassVar, Any +from dataclasses import dataclass +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue, PvFormulaOptions + +from linkml_runtime.utils.slot import Slot +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 String + +metamodel_version = "1.7.0" +version = None + +# Overwrite dataclasses _init_fn to add **kwargs in __init__ +dataclasses._init_fn = dataclasses_init_fn_with_kwargs + +# Namespaces +CADSR = CurieNamespace('cadsr', 'https://example.org/cadsr') +LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') +DEFAULT_ = CADSR + + +# Types + +# Class references + + + +@dataclass +class DataElementContainer(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementContainer"] + class_class_curie: ClassVar[str] = "cadsr:DataElementContainer" + class_name: ClassVar[str] = "DataElementContainer" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementContainer + + DataElement: Optional[Union[dict, "DataElement"]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.DataElement is not None and not isinstance(self.DataElement, DataElement): + self.DataElement = DataElement(**as_dict(self.DataElement)) + + super().__post_init__(**kwargs) + + +@dataclass +class ClassificationScheme(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ClassificationScheme"] + class_class_curie: ClassVar[str] = "cadsr:ClassificationScheme" + class_name: ClassVar[str] = "ClassificationScheme" + class_model_uri: ClassVar[URIRef] = CADSR.ClassificationScheme + + publicId: Optional[str] = None + version: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + ClassificationSchemeItems: Optional[Union[Union[dict, "ClassificationSchemeItem"], List[Union[dict, "ClassificationSchemeItem"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if not isinstance(self.ClassificationSchemeItems, list): + self.ClassificationSchemeItems = [self.ClassificationSchemeItems] if self.ClassificationSchemeItems is not None else [] + self.ClassificationSchemeItems = [v if isinstance(v, ClassificationSchemeItem) else ClassificationSchemeItem(**as_dict(v)) for v in self.ClassificationSchemeItems] + + super().__post_init__(**kwargs) + + +@dataclass +class Property(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["Property"] + class_class_curie: ClassVar[str] = "cadsr:Property" + class_name: ClassVar[str] = "Property" + class_model_uri: ClassVar[URIRef] = CADSR.Property + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + Concepts: Optional[Union[Union[dict, "Concept"], List[Union[dict, "Concept"]]]] = empty_list() + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if not isinstance(self.Concepts, list): + self.Concepts = [self.Concepts] if self.Concepts is not None else [] + self.Concepts = [v if isinstance(v, Concept) else Concept(**as_dict(v)) for v in self.Concepts] + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementpublicIdGETResponse(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementpublicIdGETResponse"] + class_class_curie: ClassVar[str] = "cadsr:DataElementpublicIdGETResponse" + class_name: ClassVar[str] = "DataElementpublicId_GET_response" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementpublicIdGETResponse + + DataElement: Optional[Union[dict, "DataElement"]] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.DataElement is not None and not isinstance(self.DataElement, DataElement): + self.DataElement = DataElement(**as_dict(self.DataElement)) + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementgetCRDCListGETResponse(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementgetCRDCListGETResponse"] + class_class_curie: ClassVar[str] = "cadsr:DataElementgetCRDCListGETResponse" + class_name: ClassVar[str] = "DataElementgetCRDCList_GET_response" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementgetCRDCListGETResponse + + CRDCDataElements: Optional[Union[Union[dict, "CRDCDataElement"], List[Union[dict, "CRDCDataElement"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if not isinstance(self.CRDCDataElements, list): + self.CRDCDataElements = [self.CRDCDataElements] if self.CRDCDataElements is not None else [] + self.CRDCDataElements = [v if isinstance(v, CRDCDataElement) else CRDCDataElement(**as_dict(v)) for v in self.CRDCDataElements] + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementqueryContextGETResponse(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementqueryContextGETResponse"] + class_class_curie: ClassVar[str] = "cadsr:DataElementqueryContextGETResponse" + class_name: ClassVar[str] = "DataElementqueryContext_GET_response" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementqueryContextGETResponse + + numRecords: Optional[str] = None + DataElementQueryResults: Optional[Union[Union[dict, "DataElementQuery"], List[Union[dict, "DataElementQuery"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.numRecords is not None and not isinstance(self.numRecords, str): + self.numRecords = str(self.numRecords) + + if not isinstance(self.DataElementQueryResults, list): + self.DataElementQueryResults = [self.DataElementQueryResults] if self.DataElementQueryResults is not None else [] + self.DataElementQueryResults = [v if isinstance(v, DataElementQuery) else DataElementQuery(**as_dict(v)) for v in self.DataElementQueryResults] + + super().__post_init__(**kwargs) + + +@dataclass +class AlternateName(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["AlternateName"] + class_class_curie: ClassVar[str] = "cadsr:AlternateName" + class_name: ClassVar[str] = "AlternateName" + class_model_uri: ClassVar[URIRef] = CADSR.AlternateName + + name: Optional[str] = None + type: Optional[str] = None + context: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + if self.type is not None and not isinstance(self.type, str): + self.type = str(self.type) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + super().__post_init__(**kwargs) + + +@dataclass +class CRDCDataElement(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["CRDCDataElement"] + class_class_curie: ClassVar[str] = "cadsr:CRDCDataElement" + class_name: ClassVar[str] = "CRDCDataElement" + class_model_uri: ClassVar[URIRef] = CADSR.CRDCDataElement + + CDE_Public_ID: Optional[str] = None + Version: Optional[str] = None + CRDC_Name: Optional[str] = None + CRD_Domain: Optional[str] = None + Example: Optional[str] = None + VD_Type: Optional[str] = None + Coding_Instruction: Optional[str] = None + Instructions: Optional[str] = None + CRDC_Definition: Optional[str] = None + CDE_Long_Name: Optional[str] = None + Registration_Status: Optional[str] = None + Workflow_Status: Optional[str] = None + Owned_By: Optional[str] = None + Used_By: Optional[str] = None + Deep_Link: Optional[str] = None + permissibleValues: Optional[Union[Union[dict, "PermissibleValue"], List[Union[dict, "PermissibleValue"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.CDE_Public_ID is not None and not isinstance(self.CDE_Public_ID, str): + self.CDE_Public_ID = str(self.CDE_Public_ID) + + if self.Version is not None and not isinstance(self.Version, str): + self.Version = str(self.Version) + + if self.CRDC_Name is not None and not isinstance(self.CRDC_Name, str): + self.CRDC_Name = str(self.CRDC_Name) + + if self.CRD_Domain is not None and not isinstance(self.CRD_Domain, str): + self.CRD_Domain = str(self.CRD_Domain) + + if self.Example is not None and not isinstance(self.Example, str): + self.Example = str(self.Example) + + if self.VD_Type is not None and not isinstance(self.VD_Type, str): + self.VD_Type = str(self.VD_Type) + + if self.Coding_Instruction is not None and not isinstance(self.Coding_Instruction, str): + self.Coding_Instruction = str(self.Coding_Instruction) + + if self.Instructions is not None and not isinstance(self.Instructions, str): + self.Instructions = str(self.Instructions) + + if self.CRDC_Definition is not None and not isinstance(self.CRDC_Definition, str): + self.CRDC_Definition = str(self.CRDC_Definition) + + if self.CDE_Long_Name is not None and not isinstance(self.CDE_Long_Name, str): + self.CDE_Long_Name = str(self.CDE_Long_Name) + + if self.Registration_Status is not None and not isinstance(self.Registration_Status, str): + self.Registration_Status = str(self.Registration_Status) + + if self.Workflow_Status is not None and not isinstance(self.Workflow_Status, str): + self.Workflow_Status = str(self.Workflow_Status) + + if self.Owned_By is not None and not isinstance(self.Owned_By, str): + self.Owned_By = str(self.Owned_By) + + if self.Used_By is not None and not isinstance(self.Used_By, str): + self.Used_By = str(self.Used_By) + + if self.Deep_Link is not None and not isinstance(self.Deep_Link, str): + self.Deep_Link = str(self.Deep_Link) + + if not isinstance(self.permissibleValues, list): + self.permissibleValues = [self.permissibleValues] if self.permissibleValues is not None else [] + self.permissibleValues = [v if isinstance(v, PermissibleValue) else PermissibleValue(**as_dict(v)) for v in self.permissibleValues] + + super().__post_init__(**kwargs) + + +@dataclass +class ConceptualDomain(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ConceptualDomain"] + class_class_curie: ClassVar[str] = "cadsr:ConceptualDomain" + class_name: ClassVar[str] = "ConceptualDomain" + class_model_uri: ClassVar[URIRef] = CADSR.ConceptualDomain + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class ClassificationSchemeItem(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ClassificationSchemeItem"] + class_class_curie: ClassVar[str] = "cadsr:ClassificationSchemeItem" + class_name: ClassVar[str] = "ClassificationSchemeItem" + class_model_uri: ClassVar[URIRef] = CADSR.ClassificationSchemeItem + + publicId: Optional[str] = None + version: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementqueryConceptGETResponse(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementqueryConceptGETResponse"] + class_class_curie: ClassVar[str] = "cadsr:DataElementqueryConceptGETResponse" + class_name: ClassVar[str] = "DataElementqueryConcept_GET_response" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementqueryConceptGETResponse + + numRecords: Optional[str] = None + DataElementQueryResults: Optional[Union[Union[dict, "DataElementQuery"], List[Union[dict, "DataElementQuery"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.numRecords is not None and not isinstance(self.numRecords, str): + self.numRecords = str(self.numRecords) + + if not isinstance(self.DataElementQueryResults, list): + self.DataElementQueryResults = [self.DataElementQueryResults] if self.DataElementQueryResults is not None else [] + self.DataElementQueryResults = [v if isinstance(v, DataElementQuery) else DataElementQuery(**as_dict(v)) for v in self.DataElementQueryResults] + + super().__post_init__(**kwargs) + + +@dataclass +class DataElement(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElement"] + class_class_curie: ClassVar[str] = "cadsr:DataElement" + class_name: ClassVar[str] = "DataElement" + class_model_uri: ClassVar[URIRef] = CADSR.DataElement + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + DataElementConcept: Optional[Union[dict, "DataElementConcept"]] = None + ValueDomain: Optional[Union[dict, "ValueDomain"]] = None + ClassificationSchemes: Optional[Union[Union[dict, ClassificationScheme], List[Union[dict, ClassificationScheme]]]] = empty_list() + AlternateNames: Optional[Union[Union[dict, AlternateName], List[Union[dict, AlternateName]]]] = empty_list() + ReferenceDocuments: Optional[Union[Union[dict, "ReferenceDocument"], List[Union[dict, "ReferenceDocument"]]]] = empty_list() + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if self.DataElementConcept is not None and not isinstance(self.DataElementConcept, DataElementConcept): + self.DataElementConcept = DataElementConcept(**as_dict(self.DataElementConcept)) + + if self.ValueDomain is not None and not isinstance(self.ValueDomain, ValueDomain): + self.ValueDomain = ValueDomain(**as_dict(self.ValueDomain)) + + if not isinstance(self.ClassificationSchemes, list): + self.ClassificationSchemes = [self.ClassificationSchemes] if self.ClassificationSchemes is not None else [] + self.ClassificationSchemes = [v if isinstance(v, ClassificationScheme) else ClassificationScheme(**as_dict(v)) for v in self.ClassificationSchemes] + + if not isinstance(self.AlternateNames, list): + self.AlternateNames = [self.AlternateNames] if self.AlternateNames is not None else [] + self.AlternateNames = [v if isinstance(v, AlternateName) else AlternateName(**as_dict(v)) for v in self.AlternateNames] + + if not isinstance(self.ReferenceDocuments, list): + self.ReferenceDocuments = [self.ReferenceDocuments] if self.ReferenceDocuments is not None else [] + self.ReferenceDocuments = [v if isinstance(v, ReferenceDocument) else ReferenceDocument(**as_dict(v)) for v in self.ReferenceDocuments] + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class ValueDomain(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ValueDomain"] + class_class_curie: ClassVar[str] = "cadsr:ValueDomain" + class_name: ClassVar[str] = "ValueDomain" + class_model_uri: ClassVar[URIRef] = CADSR.ValueDomain + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + type: Optional[str] = None + dataType: Optional[str] = None + unitOfMeasure: Optional[str] = None + characterSet: Optional[str] = None + minLength: Optional[str] = None + maxLength: Optional[str] = None + minValue: Optional[str] = None + maxValue: Optional[str] = None + decimalPlace: Optional[str] = None + format: Optional[str] = None + PermissibleValues: Optional[Union[Union[dict, "CDEPermissibleValue"], List[Union[dict, "CDEPermissibleValue"]]]] = empty_list() + ConceptualDomain: Optional[Union[dict, ConceptualDomain]] = None + RepresentationTerm: Optional[Union[dict, "RepresentationTerm"]] = None + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if self.type is not None and not isinstance(self.type, str): + self.type = str(self.type) + + if self.dataType is not None and not isinstance(self.dataType, str): + self.dataType = str(self.dataType) + + if self.unitOfMeasure is not None and not isinstance(self.unitOfMeasure, str): + self.unitOfMeasure = str(self.unitOfMeasure) + + if self.characterSet is not None and not isinstance(self.characterSet, str): + self.characterSet = str(self.characterSet) + + if self.minLength is not None and not isinstance(self.minLength, str): + self.minLength = str(self.minLength) + + if self.maxLength is not None and not isinstance(self.maxLength, str): + self.maxLength = str(self.maxLength) + + if self.minValue is not None and not isinstance(self.minValue, str): + self.minValue = str(self.minValue) + + if self.maxValue is not None and not isinstance(self.maxValue, str): + self.maxValue = str(self.maxValue) + + if self.decimalPlace is not None and not isinstance(self.decimalPlace, str): + self.decimalPlace = str(self.decimalPlace) + + if self.format is not None and not isinstance(self.format, str): + self.format = str(self.format) + + if not isinstance(self.PermissibleValues, list): + self.PermissibleValues = [self.PermissibleValues] if self.PermissibleValues is not None else [] + self.PermissibleValues = [v if isinstance(v, CDEPermissibleValue) else CDEPermissibleValue(**as_dict(v)) for v in self.PermissibleValues] + + if self.ConceptualDomain is not None and not isinstance(self.ConceptualDomain, ConceptualDomain): + self.ConceptualDomain = ConceptualDomain(**as_dict(self.ConceptualDomain)) + + if self.RepresentationTerm is not None and not isinstance(self.RepresentationTerm, RepresentationTerm): + self.RepresentationTerm = RepresentationTerm(**as_dict(self.RepresentationTerm)) + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class ObjectClass(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ObjectClass"] + class_class_curie: ClassVar[str] = "cadsr:ObjectClass" + class_name: ClassVar[str] = "ObjectClass" + class_model_uri: ClassVar[URIRef] = CADSR.ObjectClass + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + Concepts: Optional[Union[Union[dict, "Concept"], List[Union[dict, "Concept"]]]] = empty_list() + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if not isinstance(self.Concepts, list): + self.Concepts = [self.Concepts] if self.Concepts is not None else [] + self.Concepts = [v if isinstance(v, Concept) else Concept(**as_dict(v)) for v in self.Concepts] + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementqueryGETResponse(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementqueryGETResponse"] + class_class_curie: ClassVar[str] = "cadsr:DataElementqueryGETResponse" + class_name: ClassVar[str] = "DataElementquery_GET_response" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementqueryGETResponse + + numRecords: Optional[str] = None + DataElementQueryResults: Optional[Union[Union[dict, "DataElementQuery"], List[Union[dict, "DataElementQuery"]]]] = empty_list() + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.numRecords is not None and not isinstance(self.numRecords, str): + self.numRecords = str(self.numRecords) + + if not isinstance(self.DataElementQueryResults, list): + self.DataElementQueryResults = [self.DataElementQueryResults] if self.DataElementQueryResults is not None else [] + self.DataElementQueryResults = [v if isinstance(v, DataElementQuery) else DataElementQuery(**as_dict(v)) for v in self.DataElementQueryResults] + + super().__post_init__(**kwargs) + + +@dataclass +class Concept(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["Concept"] + class_class_curie: ClassVar[str] = "cadsr:Concept" + class_name: ClassVar[str] = "Concept" + class_model_uri: ClassVar[URIRef] = CADSR.Concept + + longName: Optional[str] = None + conceptCode: Optional[str] = None + definition: Optional[str] = None + evsSource: Optional[str] = None + primaryIndicator: Optional[str] = None + displayOrder: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.conceptCode is not None and not isinstance(self.conceptCode, str): + self.conceptCode = str(self.conceptCode) + + if self.definition is not None and not isinstance(self.definition, str): + self.definition = str(self.definition) + + if self.evsSource is not None and not isinstance(self.evsSource, str): + self.evsSource = str(self.evsSource) + + if self.primaryIndicator is not None and not isinstance(self.primaryIndicator, str): + self.primaryIndicator = str(self.primaryIndicator) + + if self.displayOrder is not None and not isinstance(self.displayOrder, str): + self.displayOrder = str(self.displayOrder) + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementConcept(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementConcept"] + class_class_curie: ClassVar[str] = "cadsr:DataElementConcept" + class_name: ClassVar[str] = "DataElementConcept" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementConcept + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + ObjectClass: Optional[Union[dict, ObjectClass]] = None + Property: Optional[Union[dict, Property]] = None + ConceptualDomain: Optional[Union[dict, ConceptualDomain]] = None + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if self.ObjectClass is not None and not isinstance(self.ObjectClass, ObjectClass): + self.ObjectClass = ObjectClass(**as_dict(self.ObjectClass)) + + if self.Property is not None and not isinstance(self.Property, Property): + self.Property = Property(**as_dict(self.Property)) + + if self.ConceptualDomain is not None and not isinstance(self.ConceptualDomain, ConceptualDomain): + self.ConceptualDomain = ConceptualDomain(**as_dict(self.ConceptualDomain)) + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class ValueMeaning(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ValueMeaning"] + class_class_curie: ClassVar[str] = "cadsr:ValueMeaning" + class_name: ClassVar[str] = "ValueMeaning" + class_model_uri: ClassVar[URIRef] = CADSR.ValueMeaning + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + longName: Optional[str] = None + preferredDefinition: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + Concepts: Optional[Union[Union[dict, Concept], List[Union[dict, Concept]]]] = empty_list() + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if not isinstance(self.Concepts, list): + self.Concepts = [self.Concepts] if self.Concepts is not None else [] + self.Concepts = [v if isinstance(v, Concept) else Concept(**as_dict(v)) for v in self.Concepts] + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class RepresentationTerm(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["RepresentationTerm"] + class_class_curie: ClassVar[str] = "cadsr:RepresentationTerm" + class_name: ClassVar[str] = "RepresentationTerm" + class_model_uri: ClassVar[URIRef] = CADSR.RepresentationTerm + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + context: Optional[str] = None + contextVersion: Optional[str] = None + Concepts: Optional[Union[Union[dict, Concept], List[Union[dict, Concept]]]] = empty_list() + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeDescription: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if not isinstance(self.Concepts, list): + self.Concepts = [self.Concepts] if self.Concepts is not None else [] + self.Concepts = [v if isinstance(v, Concept) else Concept(**as_dict(v)) for v in self.Concepts] + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeDescription is not None and not isinstance(self.changeDescription, str): + self.changeDescription = str(self.changeDescription) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class ReferenceDocument(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["ReferenceDocument"] + class_class_curie: ClassVar[str] = "cadsr:ReferenceDocument" + class_name: ClassVar[str] = "ReferenceDocument" + class_model_uri: ClassVar[URIRef] = CADSR.ReferenceDocument + + name: Optional[str] = None + type: Optional[str] = None + description: Optional[str] = None + url: Optional[str] = None + context: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.name is not None and not isinstance(self.name, str): + self.name = str(self.name) + + if self.type is not None and not isinstance(self.type, str): + self.type = str(self.type) + + if self.description is not None and not isinstance(self.description, str): + self.description = str(self.description) + + if self.url is not None and not isinstance(self.url, str): + self.url = str(self.url) + + if self.context is not None and not isinstance(self.context, str): + self.context = str(self.context) + + super().__post_init__(**kwargs) + + +@dataclass +class CDEPermissibleValue(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["CDEPermissibleValue"] + class_class_curie: ClassVar[str] = "cadsr:CDEPermissibleValue" + class_name: ClassVar[str] = "CDEPermissibleValue" + class_model_uri: ClassVar[URIRef] = CADSR.CDEPermissibleValue + + publicId: Optional[str] = None + value: Optional[str] = None + valueDescription: Optional[str] = None + ValueMeaning: Optional[Union[dict, ValueMeaning]] = None + origin: Optional[str] = None + id: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.value is not None and not isinstance(self.value, str): + self.value = str(self.value) + + if self.valueDescription is not None and not isinstance(self.valueDescription, str): + self.valueDescription = str(self.valueDescription) + + if self.ValueMeaning is not None and not isinstance(self.ValueMeaning, ValueMeaning): + self.ValueMeaning = ValueMeaning(**as_dict(self.ValueMeaning)) + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class DataElementQuery(YAMLRoot): + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["DataElementQuery"] + class_class_curie: ClassVar[str] = "cadsr:DataElementQuery" + class_name: ClassVar[str] = "DataElementQuery" + class_model_uri: ClassVar[URIRef] = CADSR.DataElementQuery + + publicId: Optional[str] = None + version: Optional[str] = None + preferredName: Optional[str] = None + preferredDefinition: Optional[str] = None + longName: Optional[str] = None + contextName: Optional[str] = None + contextVersion: Optional[str] = None + dataElementConceptPublicId: Optional[str] = None + dataElementConceptVersion: Optional[str] = None + valueDomainPublicId: Optional[str] = None + valueDomainVersion: Optional[str] = None + origin: Optional[str] = None + workflowStatus: Optional[str] = None + registrationStatus: Optional[str] = None + id: Optional[str] = None + latestVersionIndicator: Optional[str] = None + beginDate: Optional[str] = None + endDate: Optional[str] = None + createdBy: Optional[str] = None + dateCreated: Optional[str] = None + modifiedBy: Optional[str] = None + dateModified: Optional[str] = None + changeNote: Optional[str] = None + administrativeNotes: Optional[str] = None + unresolvedIssues: Optional[str] = None + deletedIndicator: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.publicId is not None and not isinstance(self.publicId, str): + self.publicId = str(self.publicId) + + if self.version is not None and not isinstance(self.version, str): + self.version = str(self.version) + + if self.preferredName is not None and not isinstance(self.preferredName, str): + self.preferredName = str(self.preferredName) + + if self.preferredDefinition is not None and not isinstance(self.preferredDefinition, str): + self.preferredDefinition = str(self.preferredDefinition) + + if self.longName is not None and not isinstance(self.longName, str): + self.longName = str(self.longName) + + if self.contextName is not None and not isinstance(self.contextName, str): + self.contextName = str(self.contextName) + + if self.contextVersion is not None and not isinstance(self.contextVersion, str): + self.contextVersion = str(self.contextVersion) + + if self.dataElementConceptPublicId is not None and not isinstance(self.dataElementConceptPublicId, str): + self.dataElementConceptPublicId = str(self.dataElementConceptPublicId) + + if self.dataElementConceptVersion is not None and not isinstance(self.dataElementConceptVersion, str): + self.dataElementConceptVersion = str(self.dataElementConceptVersion) + + if self.valueDomainPublicId is not None and not isinstance(self.valueDomainPublicId, str): + self.valueDomainPublicId = str(self.valueDomainPublicId) + + if self.valueDomainVersion is not None and not isinstance(self.valueDomainVersion, str): + self.valueDomainVersion = str(self.valueDomainVersion) + + if self.origin is not None and not isinstance(self.origin, str): + self.origin = str(self.origin) + + if self.workflowStatus is not None and not isinstance(self.workflowStatus, str): + self.workflowStatus = str(self.workflowStatus) + + if self.registrationStatus is not None and not isinstance(self.registrationStatus, str): + self.registrationStatus = str(self.registrationStatus) + + if self.id is not None and not isinstance(self.id, str): + self.id = str(self.id) + + if self.latestVersionIndicator is not None and not isinstance(self.latestVersionIndicator, str): + self.latestVersionIndicator = str(self.latestVersionIndicator) + + if self.beginDate is not None and not isinstance(self.beginDate, str): + self.beginDate = str(self.beginDate) + + if self.endDate is not None and not isinstance(self.endDate, str): + self.endDate = str(self.endDate) + + if self.createdBy is not None and not isinstance(self.createdBy, str): + self.createdBy = str(self.createdBy) + + if self.dateCreated is not None and not isinstance(self.dateCreated, str): + self.dateCreated = str(self.dateCreated) + + if self.modifiedBy is not None and not isinstance(self.modifiedBy, str): + self.modifiedBy = str(self.modifiedBy) + + if self.dateModified is not None and not isinstance(self.dateModified, str): + self.dateModified = str(self.dateModified) + + if self.changeNote is not None and not isinstance(self.changeNote, str): + self.changeNote = str(self.changeNote) + + if self.administrativeNotes is not None and not isinstance(self.administrativeNotes, str): + self.administrativeNotes = str(self.administrativeNotes) + + if self.unresolvedIssues is not None and not isinstance(self.unresolvedIssues, str): + self.unresolvedIssues = str(self.unresolvedIssues) + + if self.deletedIndicator is not None and not isinstance(self.deletedIndicator, str): + self.deletedIndicator = str(self.deletedIndicator) + + super().__post_init__(**kwargs) + + +@dataclass +class PermissibleValue(YAMLRoot): + """ + List of Permissible Values + """ + _inherited_slots: ClassVar[List[str]] = [] + + class_class_uri: ClassVar[URIRef] = CADSR["PermissibleValue"] + class_class_curie: ClassVar[str] = "cadsr:PermissibleValue" + class_name: ClassVar[str] = "permissibleValue" + class_model_uri: ClassVar[URIRef] = CADSR.PermissibleValue + + Permissible_Value: Optional[str] = None + VM_Long_Name: Optional[str] = None + VM_Public_ID: Optional[str] = None + Concept_Code: Optional[str] = None + VM_Description: Optional[str] = None + Begin_Date: Optional[str] = None + End_Date: Optional[str] = None + + def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): + if self.Permissible_Value is not None and not isinstance(self.Permissible_Value, str): + self.Permissible_Value = str(self.Permissible_Value) + + if self.VM_Long_Name is not None and not isinstance(self.VM_Long_Name, str): + self.VM_Long_Name = str(self.VM_Long_Name) + + if self.VM_Public_ID is not None and not isinstance(self.VM_Public_ID, str): + self.VM_Public_ID = str(self.VM_Public_ID) + + if self.Concept_Code is not None and not isinstance(self.Concept_Code, str): + self.Concept_Code = str(self.Concept_Code) + + if self.VM_Description is not None and not isinstance(self.VM_Description, str): + self.VM_Description = str(self.VM_Description) + + if self.Begin_Date is not None and not isinstance(self.Begin_Date, str): + self.Begin_Date = str(self.Begin_Date) + + if self.End_Date is not None and not isinstance(self.End_Date, str): + self.End_Date = str(self.End_Date) + + super().__post_init__(**kwargs) + + +# Enumerations + + +# Slots +class slots: + pass + +slots.publicId = Slot(uri=CADSR.publicId, name="publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.publicId, domain=None, range=Optional[str]) + +slots.version = Slot(uri=CADSR.version, name="version", curie=CADSR.curie('version'), + model_uri=CADSR.version, domain=None, range=Optional[str]) + +slots.longName = Slot(uri=CADSR.longName, name="longName", curie=CADSR.curie('longName'), + model_uri=CADSR.longName, domain=None, range=Optional[str]) + +slots.context = Slot(uri=CADSR.context, name="context", curie=CADSR.curie('context'), + model_uri=CADSR.context, domain=None, range=Optional[str]) + +slots.ClassificationSchemeItems = Slot(uri=CADSR.ClassificationSchemeItems, name="ClassificationSchemeItems", curie=CADSR.curie('ClassificationSchemeItems'), + model_uri=CADSR.ClassificationSchemeItems, domain=None, range=Optional[Union[Union[dict, ClassificationSchemeItem], List[Union[dict, ClassificationSchemeItem]]]]) + +slots.preferredName = Slot(uri=CADSR.preferredName, name="preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.preferredName, domain=None, range=Optional[str]) + +slots.preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.preferredDefinition, domain=None, range=Optional[str]) + +slots.contextVersion = Slot(uri=CADSR.contextVersion, name="contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.contextVersion, domain=None, range=Optional[str]) + +slots.Concepts = Slot(uri=CADSR.Concepts, name="Concepts", curie=CADSR.curie('Concepts'), + model_uri=CADSR.Concepts, domain=None, range=Optional[Union[Union[dict, Concept], List[Union[dict, Concept]]]]) + +slots.origin = Slot(uri=CADSR.origin, name="origin", curie=CADSR.curie('origin'), + model_uri=CADSR.origin, domain=None, range=Optional[str]) + +slots.workflowStatus = Slot(uri=CADSR.workflowStatus, name="workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.workflowStatus, domain=None, range=Optional[str]) + +slots.registrationStatus = Slot(uri=CADSR.registrationStatus, name="registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.registrationStatus, domain=None, range=Optional[str]) + +slots.id = Slot(uri=CADSR.id, name="id", curie=CADSR.curie('id'), + model_uri=CADSR.id, domain=None, range=Optional[str]) + +slots.latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.latestVersionIndicator, domain=None, range=Optional[str]) + +slots.beginDate = Slot(uri=CADSR.beginDate, name="beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.beginDate, domain=None, range=Optional[str]) + +slots.endDate = Slot(uri=CADSR.endDate, name="endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.endDate, domain=None, range=Optional[str]) + +slots.createdBy = Slot(uri=CADSR.createdBy, name="createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.createdBy, domain=None, range=Optional[str]) + +slots.dateCreated = Slot(uri=CADSR.dateCreated, name="dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.dateCreated, domain=None, range=Optional[str]) + +slots.modifiedBy = Slot(uri=CADSR.modifiedBy, name="modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.modifiedBy, domain=None, range=Optional[str]) + +slots.dateModified = Slot(uri=CADSR.dateModified, name="dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.dateModified, domain=None, range=Optional[str]) + +slots.changeDescription = Slot(uri=CADSR.changeDescription, name="changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.changeDescription, domain=None, range=Optional[str]) + +slots.administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.administrativeNotes, domain=None, range=Optional[str]) + +slots.unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.unresolvedIssues, domain=None, range=Optional[str]) + +slots.deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.deletedIndicator, domain=None, range=Optional[str]) + +slots.DataElement = Slot(uri=CADSR.DataElement, name="DataElement", curie=CADSR.curie('DataElement'), + model_uri=CADSR.DataElement, domain=None, range=Optional[Union[dict, DataElement]]) + +slots.CRDCDataElements = Slot(uri=CADSR.CRDCDataElements, name="CRDCDataElements", curie=CADSR.curie('CRDCDataElements'), + model_uri=CADSR.CRDCDataElements, domain=None, range=Optional[Union[Union[dict, CRDCDataElement], List[Union[dict, CRDCDataElement]]]]) + +slots.numRecords = Slot(uri=CADSR.numRecords, name="numRecords", curie=CADSR.curie('numRecords'), + model_uri=CADSR.numRecords, domain=None, range=Optional[str]) + +slots.DataElementQueryResults = Slot(uri=CADSR.DataElementQueryResults, name="DataElementQueryResults", curie=CADSR.curie('DataElementQueryResults'), + model_uri=CADSR.DataElementQueryResults, domain=None, range=Optional[Union[Union[dict, DataElementQuery], List[Union[dict, DataElementQuery]]]]) + +slots.name = Slot(uri=CADSR.name, name="name", curie=CADSR.curie('name'), + model_uri=CADSR.name, domain=None, range=Optional[str]) + +slots.type = Slot(uri=CADSR.type, name="type", curie=CADSR.curie('type'), + model_uri=CADSR.type, domain=None, range=Optional[str]) + +slots.CDE_Public_ID = Slot(uri=CADSR.CDE_Public_ID, name="CDE Public ID", curie=CADSR.curie('CDE_Public_ID'), + model_uri=CADSR.CDE_Public_ID, domain=None, range=Optional[str]) + +slots.Version = Slot(uri=CADSR.Version, name="Version", curie=CADSR.curie('Version'), + model_uri=CADSR.Version, domain=None, range=Optional[str]) + +slots.CRDC_Name = Slot(uri=CADSR.CRDC_Name, name="CRDC Name", curie=CADSR.curie('CRDC_Name'), + model_uri=CADSR.CRDC_Name, domain=None, range=Optional[str]) + +slots.CRD_Domain = Slot(uri=CADSR.CRD_Domain, name="CRD Domain", curie=CADSR.curie('CRD_Domain'), + model_uri=CADSR.CRD_Domain, domain=None, range=Optional[str]) + +slots.Example = Slot(uri=CADSR.Example, name="Example", curie=CADSR.curie('Example'), + model_uri=CADSR.Example, domain=None, range=Optional[str]) + +slots.VD_Type = Slot(uri=CADSR.VD_Type, name="VD Type", curie=CADSR.curie('VD_Type'), + model_uri=CADSR.VD_Type, domain=None, range=Optional[str]) + +slots.Coding_Instruction = Slot(uri=CADSR.Coding_Instruction, name="Coding Instruction", curie=CADSR.curie('Coding_Instruction'), + model_uri=CADSR.Coding_Instruction, domain=None, range=Optional[str]) + +slots.Instructions = Slot(uri=CADSR.Instructions, name="Instructions", curie=CADSR.curie('Instructions'), + model_uri=CADSR.Instructions, domain=None, range=Optional[str]) + +slots.CRDC_Definition = Slot(uri=CADSR.CRDC_Definition, name="CRDC Definition", curie=CADSR.curie('CRDC_Definition'), + model_uri=CADSR.CRDC_Definition, domain=None, range=Optional[str]) + +slots.CDE_Long_Name = Slot(uri=CADSR.CDE_Long_Name, name="CDE Long Name", curie=CADSR.curie('CDE_Long_Name'), + model_uri=CADSR.CDE_Long_Name, domain=None, range=Optional[str]) + +slots.Registration_Status = Slot(uri=CADSR.Registration_Status, name="Registration Status", curie=CADSR.curie('Registration_Status'), + model_uri=CADSR.Registration_Status, domain=None, range=Optional[str]) + +slots.Workflow_Status = Slot(uri=CADSR.Workflow_Status, name="Workflow Status", curie=CADSR.curie('Workflow_Status'), + model_uri=CADSR.Workflow_Status, domain=None, range=Optional[str]) + +slots.Owned_By = Slot(uri=CADSR.Owned_By, name="Owned By", curie=CADSR.curie('Owned_By'), + model_uri=CADSR.Owned_By, domain=None, range=Optional[str]) + +slots.Used_By = Slot(uri=CADSR.Used_By, name="Used By", curie=CADSR.curie('Used_By'), + model_uri=CADSR.Used_By, domain=None, range=Optional[str]) + +slots.Deep_Link = Slot(uri=CADSR.Deep_Link, name="Deep Link", curie=CADSR.curie('Deep_Link'), + model_uri=CADSR.Deep_Link, domain=None, range=Optional[str]) + +slots.permissibleValues = Slot(uri=CADSR.permissibleValues, name="permissibleValues", curie=CADSR.curie('permissibleValues'), + model_uri=CADSR.permissibleValues, domain=None, range=Optional[Union[Union[dict, PermissibleValue], List[Union[dict, PermissibleValue]]]]) + +slots.DataElementConcept = Slot(uri=CADSR.DataElementConcept, name="DataElementConcept", curie=CADSR.curie('DataElementConcept'), + model_uri=CADSR.DataElementConcept, domain=None, range=Optional[Union[dict, DataElementConcept]]) + +slots.ValueDomain = Slot(uri=CADSR.ValueDomain, name="ValueDomain", curie=CADSR.curie('ValueDomain'), + model_uri=CADSR.ValueDomain, domain=None, range=Optional[Union[dict, ValueDomain]]) + +slots.ClassificationSchemes = Slot(uri=CADSR.ClassificationSchemes, name="ClassificationSchemes", curie=CADSR.curie('ClassificationSchemes'), + model_uri=CADSR.ClassificationSchemes, domain=None, range=Optional[Union[Union[dict, ClassificationScheme], List[Union[dict, ClassificationScheme]]]]) + +slots.AlternateNames = Slot(uri=CADSR.AlternateNames, name="AlternateNames", curie=CADSR.curie('AlternateNames'), + model_uri=CADSR.AlternateNames, domain=None, range=Optional[Union[Union[dict, AlternateName], List[Union[dict, AlternateName]]]]) + +slots.ReferenceDocuments = Slot(uri=CADSR.ReferenceDocuments, name="ReferenceDocuments", curie=CADSR.curie('ReferenceDocuments'), + model_uri=CADSR.ReferenceDocuments, domain=None, range=Optional[Union[Union[dict, ReferenceDocument], List[Union[dict, ReferenceDocument]]]]) + +slots.dataType = Slot(uri=CADSR.dataType, name="dataType", curie=CADSR.curie('dataType'), + model_uri=CADSR.dataType, domain=None, range=Optional[str]) + +slots.unitOfMeasure = Slot(uri=CADSR.unitOfMeasure, name="unitOfMeasure", curie=CADSR.curie('unitOfMeasure'), + model_uri=CADSR.unitOfMeasure, domain=None, range=Optional[str]) + +slots.characterSet = Slot(uri=CADSR.characterSet, name="characterSet", curie=CADSR.curie('characterSet'), + model_uri=CADSR.characterSet, domain=None, range=Optional[str]) + +slots.minLength = Slot(uri=CADSR.minLength, name="minLength", curie=CADSR.curie('minLength'), + model_uri=CADSR.minLength, domain=None, range=Optional[str]) + +slots.maxLength = Slot(uri=CADSR.maxLength, name="maxLength", curie=CADSR.curie('maxLength'), + model_uri=CADSR.maxLength, domain=None, range=Optional[str]) + +slots.minValue = Slot(uri=CADSR.minValue, name="minValue", curie=CADSR.curie('minValue'), + model_uri=CADSR.minValue, domain=None, range=Optional[str]) + +slots.maxValue = Slot(uri=CADSR.maxValue, name="maxValue", curie=CADSR.curie('maxValue'), + model_uri=CADSR.maxValue, domain=None, range=Optional[str]) + +slots.decimalPlace = Slot(uri=CADSR.decimalPlace, name="decimalPlace", curie=CADSR.curie('decimalPlace'), + model_uri=CADSR.decimalPlace, domain=None, range=Optional[str]) + +slots.format = Slot(uri=CADSR.format, name="format", curie=CADSR.curie('format'), + model_uri=CADSR.format, domain=None, range=Optional[str]) + +slots.PermissibleValues = Slot(uri=CADSR.PermissibleValues, name="PermissibleValues", curie=CADSR.curie('PermissibleValues'), + model_uri=CADSR.PermissibleValues, domain=None, range=Optional[Union[Union[dict, CDEPermissibleValue], List[Union[dict, CDEPermissibleValue]]]]) + +slots.ConceptualDomain = Slot(uri=CADSR.ConceptualDomain, name="ConceptualDomain", curie=CADSR.curie('ConceptualDomain'), + model_uri=CADSR.ConceptualDomain, domain=None, range=Optional[Union[dict, ConceptualDomain]]) + +slots.RepresentationTerm = Slot(uri=CADSR.RepresentationTerm, name="RepresentationTerm", curie=CADSR.curie('RepresentationTerm'), + model_uri=CADSR.RepresentationTerm, domain=None, range=Optional[Union[dict, RepresentationTerm]]) + +slots.conceptCode = Slot(uri=CADSR.conceptCode, name="conceptCode", curie=CADSR.curie('conceptCode'), + model_uri=CADSR.conceptCode, domain=None, range=Optional[str]) + +slots.definition = Slot(uri=CADSR.definition, name="definition", curie=CADSR.curie('definition'), + model_uri=CADSR.definition, domain=None, range=Optional[str]) + +slots.evsSource = Slot(uri=CADSR.evsSource, name="evsSource", curie=CADSR.curie('evsSource'), + model_uri=CADSR.evsSource, domain=None, range=Optional[str]) + +slots.primaryIndicator = Slot(uri=CADSR.primaryIndicator, name="primaryIndicator", curie=CADSR.curie('primaryIndicator'), + model_uri=CADSR.primaryIndicator, domain=None, range=Optional[str]) + +slots.displayOrder = Slot(uri=CADSR.displayOrder, name="displayOrder", curie=CADSR.curie('displayOrder'), + model_uri=CADSR.displayOrder, domain=None, range=Optional[str]) + +slots.ObjectClass = Slot(uri=CADSR.ObjectClass, name="ObjectClass", curie=CADSR.curie('ObjectClass'), + model_uri=CADSR.ObjectClass, domain=None, range=Optional[Union[dict, ObjectClass]]) + +slots.Property = Slot(uri=CADSR.Property, name="Property", curie=CADSR.curie('Property'), + model_uri=CADSR.Property, domain=None, range=Optional[Union[dict, Property]]) + +slots.description = Slot(uri=CADSR.description, name="description", curie=CADSR.curie('description'), + model_uri=CADSR.description, domain=None, range=Optional[str]) + +slots.url = Slot(uri=CADSR.url, name="url", curie=CADSR.curie('url'), + model_uri=CADSR.url, domain=None, range=Optional[str]) + +slots.value = Slot(uri=CADSR.value, name="value", curie=CADSR.curie('value'), + model_uri=CADSR.value, domain=None, range=Optional[str]) + +slots.valueDescription = Slot(uri=CADSR.valueDescription, name="valueDescription", curie=CADSR.curie('valueDescription'), + model_uri=CADSR.valueDescription, domain=None, range=Optional[str]) + +slots.ValueMeaning = Slot(uri=CADSR.ValueMeaning, name="ValueMeaning", curie=CADSR.curie('ValueMeaning'), + model_uri=CADSR.ValueMeaning, domain=None, range=Optional[Union[dict, ValueMeaning]]) + +slots.contextName = Slot(uri=CADSR.contextName, name="contextName", curie=CADSR.curie('contextName'), + model_uri=CADSR.contextName, domain=None, range=Optional[str]) + +slots.dataElementConceptPublicId = Slot(uri=CADSR.dataElementConceptPublicId, name="dataElementConceptPublicId", curie=CADSR.curie('dataElementConceptPublicId'), + model_uri=CADSR.dataElementConceptPublicId, domain=None, range=Optional[str]) + +slots.dataElementConceptVersion = Slot(uri=CADSR.dataElementConceptVersion, name="dataElementConceptVersion", curie=CADSR.curie('dataElementConceptVersion'), + model_uri=CADSR.dataElementConceptVersion, domain=None, range=Optional[str]) + +slots.valueDomainPublicId = Slot(uri=CADSR.valueDomainPublicId, name="valueDomainPublicId", curie=CADSR.curie('valueDomainPublicId'), + model_uri=CADSR.valueDomainPublicId, domain=None, range=Optional[str]) + +slots.valueDomainVersion = Slot(uri=CADSR.valueDomainVersion, name="valueDomainVersion", curie=CADSR.curie('valueDomainVersion'), + model_uri=CADSR.valueDomainVersion, domain=None, range=Optional[str]) + +slots.changeNote = Slot(uri=CADSR.changeNote, name="changeNote", curie=CADSR.curie('changeNote'), + model_uri=CADSR.changeNote, domain=None, range=Optional[str]) + +slots.Permissible_Value = Slot(uri=CADSR.Permissible_Value, name="Permissible Value", curie=CADSR.curie('Permissible_Value'), + model_uri=CADSR.Permissible_Value, domain=None, range=Optional[str]) + +slots.VM_Long_Name = Slot(uri=CADSR.VM_Long_Name, name="VM Long Name", curie=CADSR.curie('VM_Long_Name'), + model_uri=CADSR.VM_Long_Name, domain=None, range=Optional[str]) + +slots.VM_Public_ID = Slot(uri=CADSR.VM_Public_ID, name="VM Public ID", curie=CADSR.curie('VM_Public_ID'), + model_uri=CADSR.VM_Public_ID, domain=None, range=Optional[str]) + +slots.Concept_Code = Slot(uri=CADSR.Concept_Code, name="Concept Code", curie=CADSR.curie('Concept_Code'), + model_uri=CADSR.Concept_Code, domain=None, range=Optional[str]) + +slots.VM_Description = Slot(uri=CADSR.VM_Description, name="VM Description", curie=CADSR.curie('VM_Description'), + model_uri=CADSR.VM_Description, domain=None, range=Optional[str]) + +slots.Begin_Date = Slot(uri=CADSR.Begin_Date, name="Begin Date", curie=CADSR.curie('Begin_Date'), + model_uri=CADSR.Begin_Date, domain=None, range=Optional[str]) + +slots.End_Date = Slot(uri=CADSR.End_Date, name="End Date", curie=CADSR.curie('End_Date'), + model_uri=CADSR.End_Date, domain=None, range=Optional[str]) + +slots.ClassificationScheme_publicId = Slot(uri=CADSR.publicId, name="ClassificationScheme_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.ClassificationScheme_publicId, domain=ClassificationScheme, range=Optional[str]) + +slots.ClassificationScheme_version = Slot(uri=CADSR.version, name="ClassificationScheme_version", curie=CADSR.curie('version'), + model_uri=CADSR.ClassificationScheme_version, domain=ClassificationScheme, range=Optional[str]) + +slots.ClassificationScheme_longName = Slot(uri=CADSR.longName, name="ClassificationScheme_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.ClassificationScheme_longName, domain=ClassificationScheme, range=Optional[str]) + +slots.ClassificationScheme_context = Slot(uri=CADSR.context, name="ClassificationScheme_context", curie=CADSR.curie('context'), + model_uri=CADSR.ClassificationScheme_context, domain=ClassificationScheme, range=Optional[str]) + +slots.ClassificationScheme_ClassificationSchemeItems = Slot(uri=CADSR.ClassificationSchemeItems, name="ClassificationScheme_ClassificationSchemeItems", curie=CADSR.curie('ClassificationSchemeItems'), + model_uri=CADSR.ClassificationScheme_ClassificationSchemeItems, domain=ClassificationScheme, range=Optional[Union[Union[dict, "ClassificationSchemeItem"], List[Union[dict, "ClassificationSchemeItem"]]]]) + +slots.Property_publicId = Slot(uri=CADSR.publicId, name="Property_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.Property_publicId, domain=Property, range=Optional[str]) + +slots.Property_version = Slot(uri=CADSR.version, name="Property_version", curie=CADSR.curie('version'), + model_uri=CADSR.Property_version, domain=Property, range=Optional[str]) + +slots.Property_preferredName = Slot(uri=CADSR.preferredName, name="Property_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.Property_preferredName, domain=Property, range=Optional[str]) + +slots.Property_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="Property_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.Property_preferredDefinition, domain=Property, range=Optional[str]) + +slots.Property_longName = Slot(uri=CADSR.longName, name="Property_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.Property_longName, domain=Property, range=Optional[str]) + +slots.Property_context = Slot(uri=CADSR.context, name="Property_context", curie=CADSR.curie('context'), + model_uri=CADSR.Property_context, domain=Property, range=Optional[str]) + +slots.Property_contextVersion = Slot(uri=CADSR.contextVersion, name="Property_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.Property_contextVersion, domain=Property, range=Optional[str]) + +slots.Property_Concepts = Slot(uri=CADSR.Concepts, name="Property_Concepts", curie=CADSR.curie('Concepts'), + model_uri=CADSR.Property_Concepts, domain=Property, range=Optional[Union[Union[dict, "Concept"], List[Union[dict, "Concept"]]]]) + +slots.Property_origin = Slot(uri=CADSR.origin, name="Property_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.Property_origin, domain=Property, range=Optional[str]) + +slots.Property_workflowStatus = Slot(uri=CADSR.workflowStatus, name="Property_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.Property_workflowStatus, domain=Property, range=Optional[str]) + +slots.Property_registrationStatus = Slot(uri=CADSR.registrationStatus, name="Property_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.Property_registrationStatus, domain=Property, range=Optional[str]) + +slots.Property_id = Slot(uri=CADSR.id, name="Property_id", curie=CADSR.curie('id'), + model_uri=CADSR.Property_id, domain=Property, range=Optional[str]) + +slots.Property_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="Property_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.Property_latestVersionIndicator, domain=Property, range=Optional[str]) + +slots.Property_beginDate = Slot(uri=CADSR.beginDate, name="Property_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.Property_beginDate, domain=Property, range=Optional[str]) + +slots.Property_endDate = Slot(uri=CADSR.endDate, name="Property_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.Property_endDate, domain=Property, range=Optional[str]) + +slots.Property_createdBy = Slot(uri=CADSR.createdBy, name="Property_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.Property_createdBy, domain=Property, range=Optional[str]) + +slots.Property_dateCreated = Slot(uri=CADSR.dateCreated, name="Property_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.Property_dateCreated, domain=Property, range=Optional[str]) + +slots.Property_modifiedBy = Slot(uri=CADSR.modifiedBy, name="Property_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.Property_modifiedBy, domain=Property, range=Optional[str]) + +slots.Property_dateModified = Slot(uri=CADSR.dateModified, name="Property_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.Property_dateModified, domain=Property, range=Optional[str]) + +slots.Property_changeDescription = Slot(uri=CADSR.changeDescription, name="Property_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.Property_changeDescription, domain=Property, range=Optional[str]) + +slots.Property_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="Property_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.Property_administrativeNotes, domain=Property, range=Optional[str]) + +slots.Property_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="Property_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.Property_unresolvedIssues, domain=Property, range=Optional[str]) + +slots.Property_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="Property_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.Property_deletedIndicator, domain=Property, range=Optional[str]) + +slots.DataElementpublicId_GET_response_DataElement = Slot(uri=CADSR.DataElement, name="DataElementpublicId_GET_response_DataElement", curie=CADSR.curie('DataElement'), + model_uri=CADSR.DataElementpublicId_GET_response_DataElement, domain=DataElementpublicIdGETResponse, range=Optional[Union[dict, "DataElement"]]) + +slots.DataElementgetCRDCList_GET_response_CRDCDataElements = Slot(uri=CADSR.CRDCDataElements, name="DataElementgetCRDCList_GET_response_CRDCDataElements", curie=CADSR.curie('CRDCDataElements'), + model_uri=CADSR.DataElementgetCRDCList_GET_response_CRDCDataElements, domain=DataElementgetCRDCListGETResponse, range=Optional[Union[Union[dict, "CRDCDataElement"], List[Union[dict, "CRDCDataElement"]]]]) + +slots.DataElementqueryContext_GET_response_numRecords = Slot(uri=CADSR.numRecords, name="DataElementqueryContext_GET_response_numRecords", curie=CADSR.curie('numRecords'), + model_uri=CADSR.DataElementqueryContext_GET_response_numRecords, domain=DataElementqueryContextGETResponse, range=Optional[str]) + +slots.DataElementqueryContext_GET_response_DataElementQueryResults = Slot(uri=CADSR.DataElementQueryResults, name="DataElementqueryContext_GET_response_DataElementQueryResults", curie=CADSR.curie('DataElementQueryResults'), + model_uri=CADSR.DataElementqueryContext_GET_response_DataElementQueryResults, domain=DataElementqueryContextGETResponse, range=Optional[Union[Union[dict, "DataElementQuery"], List[Union[dict, "DataElementQuery"]]]]) + +slots.AlternateName_type = Slot(uri=CADSR.type, name="AlternateName_type", curie=CADSR.curie('type'), + model_uri=CADSR.AlternateName_type, domain=AlternateName, range=Optional[str]) + +slots.AlternateName_context = Slot(uri=CADSR.context, name="AlternateName_context", curie=CADSR.curie('context'), + model_uri=CADSR.AlternateName_context, domain=AlternateName, range=Optional[str]) + +slots.CRDCDataElement_CDE_Public_ID = Slot(uri=CADSR.CDE_Public_ID, name="CRDCDataElement_CDE Public ID", curie=CADSR.curie('CDE_Public_ID'), + model_uri=CADSR.CRDCDataElement_CDE_Public_ID, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Version = Slot(uri=CADSR.Version, name="CRDCDataElement_Version", curie=CADSR.curie('Version'), + model_uri=CADSR.CRDCDataElement_Version, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_CRDC_Name = Slot(uri=CADSR.CRDC_Name, name="CRDCDataElement_CRDC Name", curie=CADSR.curie('CRDC_Name'), + model_uri=CADSR.CRDCDataElement_CRDC_Name, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_CRD_Domain = Slot(uri=CADSR.CRD_Domain, name="CRDCDataElement_CRD Domain", curie=CADSR.curie('CRD_Domain'), + model_uri=CADSR.CRDCDataElement_CRD_Domain, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Example = Slot(uri=CADSR.Example, name="CRDCDataElement_Example", curie=CADSR.curie('Example'), + model_uri=CADSR.CRDCDataElement_Example, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_VD_Type = Slot(uri=CADSR.VD_Type, name="CRDCDataElement_VD Type", curie=CADSR.curie('VD_Type'), + model_uri=CADSR.CRDCDataElement_VD_Type, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Coding_Instruction = Slot(uri=CADSR.Coding_Instruction, name="CRDCDataElement_Coding Instruction", curie=CADSR.curie('Coding_Instruction'), + model_uri=CADSR.CRDCDataElement_Coding_Instruction, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Instructions = Slot(uri=CADSR.Instructions, name="CRDCDataElement_Instructions", curie=CADSR.curie('Instructions'), + model_uri=CADSR.CRDCDataElement_Instructions, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_CRDC_Definition = Slot(uri=CADSR.CRDC_Definition, name="CRDCDataElement_CRDC Definition", curie=CADSR.curie('CRDC_Definition'), + model_uri=CADSR.CRDCDataElement_CRDC_Definition, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_CDE_Long_Name = Slot(uri=CADSR.CDE_Long_Name, name="CRDCDataElement_CDE Long Name", curie=CADSR.curie('CDE_Long_Name'), + model_uri=CADSR.CRDCDataElement_CDE_Long_Name, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Registration_Status = Slot(uri=CADSR.Registration_Status, name="CRDCDataElement_Registration Status", curie=CADSR.curie('Registration_Status'), + model_uri=CADSR.CRDCDataElement_Registration_Status, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Workflow_Status = Slot(uri=CADSR.Workflow_Status, name="CRDCDataElement_Workflow Status", curie=CADSR.curie('Workflow_Status'), + model_uri=CADSR.CRDCDataElement_Workflow_Status, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Owned_By = Slot(uri=CADSR.Owned_By, name="CRDCDataElement_Owned By", curie=CADSR.curie('Owned_By'), + model_uri=CADSR.CRDCDataElement_Owned_By, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Used_By = Slot(uri=CADSR.Used_By, name="CRDCDataElement_Used By", curie=CADSR.curie('Used_By'), + model_uri=CADSR.CRDCDataElement_Used_By, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_Deep_Link = Slot(uri=CADSR.Deep_Link, name="CRDCDataElement_Deep Link", curie=CADSR.curie('Deep_Link'), + model_uri=CADSR.CRDCDataElement_Deep_Link, domain=CRDCDataElement, range=Optional[str]) + +slots.CRDCDataElement_permissibleValues = Slot(uri=CADSR.permissibleValues, name="CRDCDataElement_permissibleValues", curie=CADSR.curie('permissibleValues'), + model_uri=CADSR.CRDCDataElement_permissibleValues, domain=CRDCDataElement, range=Optional[Union[Union[dict, "PermissibleValue"], List[Union[dict, "PermissibleValue"]]]]) + +slots.ConceptualDomain_publicId = Slot(uri=CADSR.publicId, name="ConceptualDomain_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.ConceptualDomain_publicId, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_version = Slot(uri=CADSR.version, name="ConceptualDomain_version", curie=CADSR.curie('version'), + model_uri=CADSR.ConceptualDomain_version, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_preferredName = Slot(uri=CADSR.preferredName, name="ConceptualDomain_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.ConceptualDomain_preferredName, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="ConceptualDomain_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.ConceptualDomain_preferredDefinition, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_longName = Slot(uri=CADSR.longName, name="ConceptualDomain_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.ConceptualDomain_longName, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_context = Slot(uri=CADSR.context, name="ConceptualDomain_context", curie=CADSR.curie('context'), + model_uri=CADSR.ConceptualDomain_context, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_contextVersion = Slot(uri=CADSR.contextVersion, name="ConceptualDomain_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.ConceptualDomain_contextVersion, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_origin = Slot(uri=CADSR.origin, name="ConceptualDomain_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.ConceptualDomain_origin, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_workflowStatus = Slot(uri=CADSR.workflowStatus, name="ConceptualDomain_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.ConceptualDomain_workflowStatus, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_registrationStatus = Slot(uri=CADSR.registrationStatus, name="ConceptualDomain_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.ConceptualDomain_registrationStatus, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_id = Slot(uri=CADSR.id, name="ConceptualDomain_id", curie=CADSR.curie('id'), + model_uri=CADSR.ConceptualDomain_id, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="ConceptualDomain_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.ConceptualDomain_latestVersionIndicator, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_beginDate = Slot(uri=CADSR.beginDate, name="ConceptualDomain_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.ConceptualDomain_beginDate, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_endDate = Slot(uri=CADSR.endDate, name="ConceptualDomain_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.ConceptualDomain_endDate, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_createdBy = Slot(uri=CADSR.createdBy, name="ConceptualDomain_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.ConceptualDomain_createdBy, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_dateCreated = Slot(uri=CADSR.dateCreated, name="ConceptualDomain_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.ConceptualDomain_dateCreated, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_modifiedBy = Slot(uri=CADSR.modifiedBy, name="ConceptualDomain_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.ConceptualDomain_modifiedBy, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_dateModified = Slot(uri=CADSR.dateModified, name="ConceptualDomain_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.ConceptualDomain_dateModified, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_changeDescription = Slot(uri=CADSR.changeDescription, name="ConceptualDomain_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.ConceptualDomain_changeDescription, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="ConceptualDomain_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.ConceptualDomain_administrativeNotes, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="ConceptualDomain_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.ConceptualDomain_unresolvedIssues, domain=ConceptualDomain, range=Optional[str]) + +slots.ConceptualDomain_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="ConceptualDomain_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.ConceptualDomain_deletedIndicator, domain=ConceptualDomain, range=Optional[str]) + +slots.ClassificationSchemeItem_publicId = Slot(uri=CADSR.publicId, name="ClassificationSchemeItem_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.ClassificationSchemeItem_publicId, domain=ClassificationSchemeItem, range=Optional[str]) + +slots.ClassificationSchemeItem_version = Slot(uri=CADSR.version, name="ClassificationSchemeItem_version", curie=CADSR.curie('version'), + model_uri=CADSR.ClassificationSchemeItem_version, domain=ClassificationSchemeItem, range=Optional[str]) + +slots.ClassificationSchemeItem_longName = Slot(uri=CADSR.longName, name="ClassificationSchemeItem_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.ClassificationSchemeItem_longName, domain=ClassificationSchemeItem, range=Optional[str]) + +slots.ClassificationSchemeItem_context = Slot(uri=CADSR.context, name="ClassificationSchemeItem_context", curie=CADSR.curie('context'), + model_uri=CADSR.ClassificationSchemeItem_context, domain=ClassificationSchemeItem, range=Optional[str]) + +slots.DataElementqueryConcept_GET_response_numRecords = Slot(uri=CADSR.numRecords, name="DataElementqueryConcept_GET_response_numRecords", curie=CADSR.curie('numRecords'), + model_uri=CADSR.DataElementqueryConcept_GET_response_numRecords, domain=DataElementqueryConceptGETResponse, range=Optional[str]) + +slots.DataElementqueryConcept_GET_response_DataElementQueryResults = Slot(uri=CADSR.DataElementQueryResults, name="DataElementqueryConcept_GET_response_DataElementQueryResults", curie=CADSR.curie('DataElementQueryResults'), + model_uri=CADSR.DataElementqueryConcept_GET_response_DataElementQueryResults, domain=DataElementqueryConceptGETResponse, range=Optional[Union[Union[dict, "DataElementQuery"], List[Union[dict, "DataElementQuery"]]]]) + +slots.DataElement_publicId = Slot(uri=CADSR.publicId, name="DataElement_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.DataElement_publicId, domain=DataElement, range=Optional[str]) + +slots.DataElement_version = Slot(uri=CADSR.version, name="DataElement_version", curie=CADSR.curie('version'), + model_uri=CADSR.DataElement_version, domain=DataElement, range=Optional[str]) + +slots.DataElement_preferredName = Slot(uri=CADSR.preferredName, name="DataElement_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.DataElement_preferredName, domain=DataElement, range=Optional[str]) + +slots.DataElement_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="DataElement_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.DataElement_preferredDefinition, domain=DataElement, range=Optional[str]) + +slots.DataElement_longName = Slot(uri=CADSR.longName, name="DataElement_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.DataElement_longName, domain=DataElement, range=Optional[str]) + +slots.DataElement_context = Slot(uri=CADSR.context, name="DataElement_context", curie=CADSR.curie('context'), + model_uri=CADSR.DataElement_context, domain=DataElement, range=Optional[str]) + +slots.DataElement_contextVersion = Slot(uri=CADSR.contextVersion, name="DataElement_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.DataElement_contextVersion, domain=DataElement, range=Optional[str]) + +slots.DataElement_DataElementConcept = Slot(uri=CADSR.DataElementConcept, name="DataElement_DataElementConcept", curie=CADSR.curie('DataElementConcept'), + model_uri=CADSR.DataElement_DataElementConcept, domain=DataElement, range=Optional[Union[dict, "DataElementConcept"]]) + +slots.DataElement_ValueDomain = Slot(uri=CADSR.ValueDomain, name="DataElement_ValueDomain", curie=CADSR.curie('ValueDomain'), + model_uri=CADSR.DataElement_ValueDomain, domain=DataElement, range=Optional[Union[dict, "ValueDomain"]]) + +slots.DataElement_ClassificationSchemes = Slot(uri=CADSR.ClassificationSchemes, name="DataElement_ClassificationSchemes", curie=CADSR.curie('ClassificationSchemes'), + model_uri=CADSR.DataElement_ClassificationSchemes, domain=DataElement, range=Optional[Union[Union[dict, ClassificationScheme], List[Union[dict, ClassificationScheme]]]]) + +slots.DataElement_AlternateNames = Slot(uri=CADSR.AlternateNames, name="DataElement_AlternateNames", curie=CADSR.curie('AlternateNames'), + model_uri=CADSR.DataElement_AlternateNames, domain=DataElement, range=Optional[Union[Union[dict, AlternateName], List[Union[dict, AlternateName]]]]) + +slots.DataElement_ReferenceDocuments = Slot(uri=CADSR.ReferenceDocuments, name="DataElement_ReferenceDocuments", curie=CADSR.curie('ReferenceDocuments'), + model_uri=CADSR.DataElement_ReferenceDocuments, domain=DataElement, range=Optional[Union[Union[dict, "ReferenceDocument"], List[Union[dict, "ReferenceDocument"]]]]) + +slots.DataElement_origin = Slot(uri=CADSR.origin, name="DataElement_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.DataElement_origin, domain=DataElement, range=Optional[str]) + +slots.DataElement_workflowStatus = Slot(uri=CADSR.workflowStatus, name="DataElement_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.DataElement_workflowStatus, domain=DataElement, range=Optional[str]) + +slots.DataElement_registrationStatus = Slot(uri=CADSR.registrationStatus, name="DataElement_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.DataElement_registrationStatus, domain=DataElement, range=Optional[str]) + +slots.DataElement_id = Slot(uri=CADSR.id, name="DataElement_id", curie=CADSR.curie('id'), + model_uri=CADSR.DataElement_id, domain=DataElement, range=Optional[str]) + +slots.DataElement_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="DataElement_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.DataElement_latestVersionIndicator, domain=DataElement, range=Optional[str]) + +slots.DataElement_beginDate = Slot(uri=CADSR.beginDate, name="DataElement_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.DataElement_beginDate, domain=DataElement, range=Optional[str]) + +slots.DataElement_endDate = Slot(uri=CADSR.endDate, name="DataElement_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.DataElement_endDate, domain=DataElement, range=Optional[str]) + +slots.DataElement_createdBy = Slot(uri=CADSR.createdBy, name="DataElement_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.DataElement_createdBy, domain=DataElement, range=Optional[str]) + +slots.DataElement_dateCreated = Slot(uri=CADSR.dateCreated, name="DataElement_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.DataElement_dateCreated, domain=DataElement, range=Optional[str]) + +slots.DataElement_modifiedBy = Slot(uri=CADSR.modifiedBy, name="DataElement_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.DataElement_modifiedBy, domain=DataElement, range=Optional[str]) + +slots.DataElement_dateModified = Slot(uri=CADSR.dateModified, name="DataElement_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.DataElement_dateModified, domain=DataElement, range=Optional[str]) + +slots.DataElement_changeDescription = Slot(uri=CADSR.changeDescription, name="DataElement_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.DataElement_changeDescription, domain=DataElement, range=Optional[str]) + +slots.DataElement_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="DataElement_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.DataElement_administrativeNotes, domain=DataElement, range=Optional[str]) + +slots.DataElement_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="DataElement_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.DataElement_unresolvedIssues, domain=DataElement, range=Optional[str]) + +slots.DataElement_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="DataElement_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.DataElement_deletedIndicator, domain=DataElement, range=Optional[str]) + +slots.ValueDomain_publicId = Slot(uri=CADSR.publicId, name="ValueDomain_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.ValueDomain_publicId, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_version = Slot(uri=CADSR.version, name="ValueDomain_version", curie=CADSR.curie('version'), + model_uri=CADSR.ValueDomain_version, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_preferredName = Slot(uri=CADSR.preferredName, name="ValueDomain_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.ValueDomain_preferredName, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="ValueDomain_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.ValueDomain_preferredDefinition, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_longName = Slot(uri=CADSR.longName, name="ValueDomain_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.ValueDomain_longName, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_context = Slot(uri=CADSR.context, name="ValueDomain_context", curie=CADSR.curie('context'), + model_uri=CADSR.ValueDomain_context, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_contextVersion = Slot(uri=CADSR.contextVersion, name="ValueDomain_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.ValueDomain_contextVersion, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_type = Slot(uri=CADSR.type, name="ValueDomain_type", curie=CADSR.curie('type'), + model_uri=CADSR.ValueDomain_type, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_dataType = Slot(uri=CADSR.dataType, name="ValueDomain_dataType", curie=CADSR.curie('dataType'), + model_uri=CADSR.ValueDomain_dataType, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_unitOfMeasure = Slot(uri=CADSR.unitOfMeasure, name="ValueDomain_unitOfMeasure", curie=CADSR.curie('unitOfMeasure'), + model_uri=CADSR.ValueDomain_unitOfMeasure, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_characterSet = Slot(uri=CADSR.characterSet, name="ValueDomain_characterSet", curie=CADSR.curie('characterSet'), + model_uri=CADSR.ValueDomain_characterSet, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_minLength = Slot(uri=CADSR.minLength, name="ValueDomain_minLength", curie=CADSR.curie('minLength'), + model_uri=CADSR.ValueDomain_minLength, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_maxLength = Slot(uri=CADSR.maxLength, name="ValueDomain_maxLength", curie=CADSR.curie('maxLength'), + model_uri=CADSR.ValueDomain_maxLength, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_minValue = Slot(uri=CADSR.minValue, name="ValueDomain_minValue", curie=CADSR.curie('minValue'), + model_uri=CADSR.ValueDomain_minValue, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_maxValue = Slot(uri=CADSR.maxValue, name="ValueDomain_maxValue", curie=CADSR.curie('maxValue'), + model_uri=CADSR.ValueDomain_maxValue, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_decimalPlace = Slot(uri=CADSR.decimalPlace, name="ValueDomain_decimalPlace", curie=CADSR.curie('decimalPlace'), + model_uri=CADSR.ValueDomain_decimalPlace, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_format = Slot(uri=CADSR.format, name="ValueDomain_format", curie=CADSR.curie('format'), + model_uri=CADSR.ValueDomain_format, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_PermissibleValues = Slot(uri=CADSR.PermissibleValues, name="ValueDomain_PermissibleValues", curie=CADSR.curie('PermissibleValues'), + model_uri=CADSR.ValueDomain_PermissibleValues, domain=ValueDomain, range=Optional[Union[Union[dict, "CDEPermissibleValue"], List[Union[dict, "CDEPermissibleValue"]]]]) + +slots.ValueDomain_ConceptualDomain = Slot(uri=CADSR.ConceptualDomain, name="ValueDomain_ConceptualDomain", curie=CADSR.curie('ConceptualDomain'), + model_uri=CADSR.ValueDomain_ConceptualDomain, domain=ValueDomain, range=Optional[Union[dict, ConceptualDomain]]) + +slots.ValueDomain_RepresentationTerm = Slot(uri=CADSR.RepresentationTerm, name="ValueDomain_RepresentationTerm", curie=CADSR.curie('RepresentationTerm'), + model_uri=CADSR.ValueDomain_RepresentationTerm, domain=ValueDomain, range=Optional[Union[dict, "RepresentationTerm"]]) + +slots.ValueDomain_origin = Slot(uri=CADSR.origin, name="ValueDomain_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.ValueDomain_origin, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_workflowStatus = Slot(uri=CADSR.workflowStatus, name="ValueDomain_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.ValueDomain_workflowStatus, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_registrationStatus = Slot(uri=CADSR.registrationStatus, name="ValueDomain_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.ValueDomain_registrationStatus, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_id = Slot(uri=CADSR.id, name="ValueDomain_id", curie=CADSR.curie('id'), + model_uri=CADSR.ValueDomain_id, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="ValueDomain_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.ValueDomain_latestVersionIndicator, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_beginDate = Slot(uri=CADSR.beginDate, name="ValueDomain_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.ValueDomain_beginDate, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_endDate = Slot(uri=CADSR.endDate, name="ValueDomain_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.ValueDomain_endDate, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_createdBy = Slot(uri=CADSR.createdBy, name="ValueDomain_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.ValueDomain_createdBy, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_dateCreated = Slot(uri=CADSR.dateCreated, name="ValueDomain_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.ValueDomain_dateCreated, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_modifiedBy = Slot(uri=CADSR.modifiedBy, name="ValueDomain_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.ValueDomain_modifiedBy, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_dateModified = Slot(uri=CADSR.dateModified, name="ValueDomain_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.ValueDomain_dateModified, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_changeDescription = Slot(uri=CADSR.changeDescription, name="ValueDomain_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.ValueDomain_changeDescription, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="ValueDomain_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.ValueDomain_administrativeNotes, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="ValueDomain_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.ValueDomain_unresolvedIssues, domain=ValueDomain, range=Optional[str]) + +slots.ValueDomain_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="ValueDomain_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.ValueDomain_deletedIndicator, domain=ValueDomain, range=Optional[str]) + +slots.ObjectClass_publicId = Slot(uri=CADSR.publicId, name="ObjectClass_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.ObjectClass_publicId, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_version = Slot(uri=CADSR.version, name="ObjectClass_version", curie=CADSR.curie('version'), + model_uri=CADSR.ObjectClass_version, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_preferredName = Slot(uri=CADSR.preferredName, name="ObjectClass_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.ObjectClass_preferredName, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="ObjectClass_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.ObjectClass_preferredDefinition, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_longName = Slot(uri=CADSR.longName, name="ObjectClass_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.ObjectClass_longName, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_context = Slot(uri=CADSR.context, name="ObjectClass_context", curie=CADSR.curie('context'), + model_uri=CADSR.ObjectClass_context, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_contextVersion = Slot(uri=CADSR.contextVersion, name="ObjectClass_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.ObjectClass_contextVersion, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_Concepts = Slot(uri=CADSR.Concepts, name="ObjectClass_Concepts", curie=CADSR.curie('Concepts'), + model_uri=CADSR.ObjectClass_Concepts, domain=ObjectClass, range=Optional[Union[Union[dict, "Concept"], List[Union[dict, "Concept"]]]]) + +slots.ObjectClass_origin = Slot(uri=CADSR.origin, name="ObjectClass_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.ObjectClass_origin, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_workflowStatus = Slot(uri=CADSR.workflowStatus, name="ObjectClass_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.ObjectClass_workflowStatus, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_registrationStatus = Slot(uri=CADSR.registrationStatus, name="ObjectClass_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.ObjectClass_registrationStatus, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_id = Slot(uri=CADSR.id, name="ObjectClass_id", curie=CADSR.curie('id'), + model_uri=CADSR.ObjectClass_id, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="ObjectClass_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.ObjectClass_latestVersionIndicator, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_beginDate = Slot(uri=CADSR.beginDate, name="ObjectClass_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.ObjectClass_beginDate, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_endDate = Slot(uri=CADSR.endDate, name="ObjectClass_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.ObjectClass_endDate, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_createdBy = Slot(uri=CADSR.createdBy, name="ObjectClass_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.ObjectClass_createdBy, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_dateCreated = Slot(uri=CADSR.dateCreated, name="ObjectClass_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.ObjectClass_dateCreated, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_modifiedBy = Slot(uri=CADSR.modifiedBy, name="ObjectClass_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.ObjectClass_modifiedBy, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_dateModified = Slot(uri=CADSR.dateModified, name="ObjectClass_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.ObjectClass_dateModified, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_changeDescription = Slot(uri=CADSR.changeDescription, name="ObjectClass_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.ObjectClass_changeDescription, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="ObjectClass_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.ObjectClass_administrativeNotes, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="ObjectClass_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.ObjectClass_unresolvedIssues, domain=ObjectClass, range=Optional[str]) + +slots.ObjectClass_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="ObjectClass_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.ObjectClass_deletedIndicator, domain=ObjectClass, range=Optional[str]) + +slots.DataElementquery_GET_response_numRecords = Slot(uri=CADSR.numRecords, name="DataElementquery_GET_response_numRecords", curie=CADSR.curie('numRecords'), + model_uri=CADSR.DataElementquery_GET_response_numRecords, domain=DataElementqueryGETResponse, range=Optional[str]) + +slots.DataElementquery_GET_response_DataElementQueryResults = Slot(uri=CADSR.DataElementQueryResults, name="DataElementquery_GET_response_DataElementQueryResults", curie=CADSR.curie('DataElementQueryResults'), + model_uri=CADSR.DataElementquery_GET_response_DataElementQueryResults, domain=DataElementqueryGETResponse, range=Optional[Union[Union[dict, "DataElementQuery"], List[Union[dict, "DataElementQuery"]]]]) + +slots.Concept_longName = Slot(uri=CADSR.longName, name="Concept_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.Concept_longName, domain=Concept, range=Optional[str]) + +slots.Concept_conceptCode = Slot(uri=CADSR.conceptCode, name="Concept_conceptCode", curie=CADSR.curie('conceptCode'), + model_uri=CADSR.Concept_conceptCode, domain=Concept, range=Optional[str]) + +slots.Concept_definition = Slot(uri=CADSR.definition, name="Concept_definition", curie=CADSR.curie('definition'), + model_uri=CADSR.Concept_definition, domain=Concept, range=Optional[str]) + +slots.Concept_evsSource = Slot(uri=CADSR.evsSource, name="Concept_evsSource", curie=CADSR.curie('evsSource'), + model_uri=CADSR.Concept_evsSource, domain=Concept, range=Optional[str]) + +slots.Concept_primaryIndicator = Slot(uri=CADSR.primaryIndicator, name="Concept_primaryIndicator", curie=CADSR.curie('primaryIndicator'), + model_uri=CADSR.Concept_primaryIndicator, domain=Concept, range=Optional[str]) + +slots.Concept_displayOrder = Slot(uri=CADSR.displayOrder, name="Concept_displayOrder", curie=CADSR.curie('displayOrder'), + model_uri=CADSR.Concept_displayOrder, domain=Concept, range=Optional[str]) + +slots.DataElementConcept_publicId = Slot(uri=CADSR.publicId, name="DataElementConcept_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.DataElementConcept_publicId, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_version = Slot(uri=CADSR.version, name="DataElementConcept_version", curie=CADSR.curie('version'), + model_uri=CADSR.DataElementConcept_version, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_preferredName = Slot(uri=CADSR.preferredName, name="DataElementConcept_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.DataElementConcept_preferredName, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="DataElementConcept_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.DataElementConcept_preferredDefinition, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_longName = Slot(uri=CADSR.longName, name="DataElementConcept_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.DataElementConcept_longName, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_context = Slot(uri=CADSR.context, name="DataElementConcept_context", curie=CADSR.curie('context'), + model_uri=CADSR.DataElementConcept_context, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_contextVersion = Slot(uri=CADSR.contextVersion, name="DataElementConcept_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.DataElementConcept_contextVersion, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_ObjectClass = Slot(uri=CADSR.ObjectClass, name="DataElementConcept_ObjectClass", curie=CADSR.curie('ObjectClass'), + model_uri=CADSR.DataElementConcept_ObjectClass, domain=DataElementConcept, range=Optional[Union[dict, ObjectClass]]) + +slots.DataElementConcept_Property = Slot(uri=CADSR.Property, name="DataElementConcept_Property", curie=CADSR.curie('Property'), + model_uri=CADSR.DataElementConcept_Property, domain=DataElementConcept, range=Optional[Union[dict, Property]]) + +slots.DataElementConcept_ConceptualDomain = Slot(uri=CADSR.ConceptualDomain, name="DataElementConcept_ConceptualDomain", curie=CADSR.curie('ConceptualDomain'), + model_uri=CADSR.DataElementConcept_ConceptualDomain, domain=DataElementConcept, range=Optional[Union[dict, ConceptualDomain]]) + +slots.DataElementConcept_origin = Slot(uri=CADSR.origin, name="DataElementConcept_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.DataElementConcept_origin, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_workflowStatus = Slot(uri=CADSR.workflowStatus, name="DataElementConcept_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.DataElementConcept_workflowStatus, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_registrationStatus = Slot(uri=CADSR.registrationStatus, name="DataElementConcept_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.DataElementConcept_registrationStatus, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_id = Slot(uri=CADSR.id, name="DataElementConcept_id", curie=CADSR.curie('id'), + model_uri=CADSR.DataElementConcept_id, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="DataElementConcept_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.DataElementConcept_latestVersionIndicator, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_beginDate = Slot(uri=CADSR.beginDate, name="DataElementConcept_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.DataElementConcept_beginDate, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_endDate = Slot(uri=CADSR.endDate, name="DataElementConcept_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.DataElementConcept_endDate, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_createdBy = Slot(uri=CADSR.createdBy, name="DataElementConcept_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.DataElementConcept_createdBy, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_dateCreated = Slot(uri=CADSR.dateCreated, name="DataElementConcept_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.DataElementConcept_dateCreated, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_modifiedBy = Slot(uri=CADSR.modifiedBy, name="DataElementConcept_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.DataElementConcept_modifiedBy, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_dateModified = Slot(uri=CADSR.dateModified, name="DataElementConcept_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.DataElementConcept_dateModified, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_changeDescription = Slot(uri=CADSR.changeDescription, name="DataElementConcept_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.DataElementConcept_changeDescription, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="DataElementConcept_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.DataElementConcept_administrativeNotes, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="DataElementConcept_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.DataElementConcept_unresolvedIssues, domain=DataElementConcept, range=Optional[str]) + +slots.DataElementConcept_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="DataElementConcept_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.DataElementConcept_deletedIndicator, domain=DataElementConcept, range=Optional[str]) + +slots.ValueMeaning_publicId = Slot(uri=CADSR.publicId, name="ValueMeaning_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.ValueMeaning_publicId, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_version = Slot(uri=CADSR.version, name="ValueMeaning_version", curie=CADSR.curie('version'), + model_uri=CADSR.ValueMeaning_version, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_preferredName = Slot(uri=CADSR.preferredName, name="ValueMeaning_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.ValueMeaning_preferredName, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_longName = Slot(uri=CADSR.longName, name="ValueMeaning_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.ValueMeaning_longName, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="ValueMeaning_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.ValueMeaning_preferredDefinition, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_context = Slot(uri=CADSR.context, name="ValueMeaning_context", curie=CADSR.curie('context'), + model_uri=CADSR.ValueMeaning_context, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_contextVersion = Slot(uri=CADSR.contextVersion, name="ValueMeaning_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.ValueMeaning_contextVersion, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_Concepts = Slot(uri=CADSR.Concepts, name="ValueMeaning_Concepts", curie=CADSR.curie('Concepts'), + model_uri=CADSR.ValueMeaning_Concepts, domain=ValueMeaning, range=Optional[Union[Union[dict, Concept], List[Union[dict, Concept]]]]) + +slots.ValueMeaning_origin = Slot(uri=CADSR.origin, name="ValueMeaning_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.ValueMeaning_origin, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_workflowStatus = Slot(uri=CADSR.workflowStatus, name="ValueMeaning_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.ValueMeaning_workflowStatus, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_registrationStatus = Slot(uri=CADSR.registrationStatus, name="ValueMeaning_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.ValueMeaning_registrationStatus, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_id = Slot(uri=CADSR.id, name="ValueMeaning_id", curie=CADSR.curie('id'), + model_uri=CADSR.ValueMeaning_id, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="ValueMeaning_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.ValueMeaning_latestVersionIndicator, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_beginDate = Slot(uri=CADSR.beginDate, name="ValueMeaning_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.ValueMeaning_beginDate, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_endDate = Slot(uri=CADSR.endDate, name="ValueMeaning_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.ValueMeaning_endDate, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_createdBy = Slot(uri=CADSR.createdBy, name="ValueMeaning_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.ValueMeaning_createdBy, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_dateCreated = Slot(uri=CADSR.dateCreated, name="ValueMeaning_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.ValueMeaning_dateCreated, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_modifiedBy = Slot(uri=CADSR.modifiedBy, name="ValueMeaning_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.ValueMeaning_modifiedBy, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_dateModified = Slot(uri=CADSR.dateModified, name="ValueMeaning_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.ValueMeaning_dateModified, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_changeDescription = Slot(uri=CADSR.changeDescription, name="ValueMeaning_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.ValueMeaning_changeDescription, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="ValueMeaning_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.ValueMeaning_administrativeNotes, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="ValueMeaning_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.ValueMeaning_unresolvedIssues, domain=ValueMeaning, range=Optional[str]) + +slots.ValueMeaning_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="ValueMeaning_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.ValueMeaning_deletedIndicator, domain=ValueMeaning, range=Optional[str]) + +slots.RepresentationTerm_publicId = Slot(uri=CADSR.publicId, name="RepresentationTerm_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.RepresentationTerm_publicId, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_version = Slot(uri=CADSR.version, name="RepresentationTerm_version", curie=CADSR.curie('version'), + model_uri=CADSR.RepresentationTerm_version, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_preferredName = Slot(uri=CADSR.preferredName, name="RepresentationTerm_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.RepresentationTerm_preferredName, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="RepresentationTerm_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.RepresentationTerm_preferredDefinition, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_longName = Slot(uri=CADSR.longName, name="RepresentationTerm_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.RepresentationTerm_longName, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_context = Slot(uri=CADSR.context, name="RepresentationTerm_context", curie=CADSR.curie('context'), + model_uri=CADSR.RepresentationTerm_context, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_contextVersion = Slot(uri=CADSR.contextVersion, name="RepresentationTerm_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.RepresentationTerm_contextVersion, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_Concepts = Slot(uri=CADSR.Concepts, name="RepresentationTerm_Concepts", curie=CADSR.curie('Concepts'), + model_uri=CADSR.RepresentationTerm_Concepts, domain=RepresentationTerm, range=Optional[Union[Union[dict, Concept], List[Union[dict, Concept]]]]) + +slots.RepresentationTerm_origin = Slot(uri=CADSR.origin, name="RepresentationTerm_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.RepresentationTerm_origin, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_workflowStatus = Slot(uri=CADSR.workflowStatus, name="RepresentationTerm_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.RepresentationTerm_workflowStatus, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_registrationStatus = Slot(uri=CADSR.registrationStatus, name="RepresentationTerm_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.RepresentationTerm_registrationStatus, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_id = Slot(uri=CADSR.id, name="RepresentationTerm_id", curie=CADSR.curie('id'), + model_uri=CADSR.RepresentationTerm_id, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="RepresentationTerm_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.RepresentationTerm_latestVersionIndicator, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_beginDate = Slot(uri=CADSR.beginDate, name="RepresentationTerm_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.RepresentationTerm_beginDate, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_endDate = Slot(uri=CADSR.endDate, name="RepresentationTerm_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.RepresentationTerm_endDate, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_createdBy = Slot(uri=CADSR.createdBy, name="RepresentationTerm_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.RepresentationTerm_createdBy, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_dateCreated = Slot(uri=CADSR.dateCreated, name="RepresentationTerm_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.RepresentationTerm_dateCreated, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_modifiedBy = Slot(uri=CADSR.modifiedBy, name="RepresentationTerm_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.RepresentationTerm_modifiedBy, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_dateModified = Slot(uri=CADSR.dateModified, name="RepresentationTerm_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.RepresentationTerm_dateModified, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_changeDescription = Slot(uri=CADSR.changeDescription, name="RepresentationTerm_changeDescription", curie=CADSR.curie('changeDescription'), + model_uri=CADSR.RepresentationTerm_changeDescription, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="RepresentationTerm_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.RepresentationTerm_administrativeNotes, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="RepresentationTerm_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.RepresentationTerm_unresolvedIssues, domain=RepresentationTerm, range=Optional[str]) + +slots.RepresentationTerm_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="RepresentationTerm_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.RepresentationTerm_deletedIndicator, domain=RepresentationTerm, range=Optional[str]) + +slots.ReferenceDocument_type = Slot(uri=CADSR.type, name="ReferenceDocument_type", curie=CADSR.curie('type'), + model_uri=CADSR.ReferenceDocument_type, domain=ReferenceDocument, range=Optional[str]) + +slots.ReferenceDocument_description = Slot(uri=CADSR.description, name="ReferenceDocument_description", curie=CADSR.curie('description'), + model_uri=CADSR.ReferenceDocument_description, domain=ReferenceDocument, range=Optional[str]) + +slots.ReferenceDocument_url = Slot(uri=CADSR.url, name="ReferenceDocument_url", curie=CADSR.curie('url'), + model_uri=CADSR.ReferenceDocument_url, domain=ReferenceDocument, range=Optional[str]) + +slots.ReferenceDocument_context = Slot(uri=CADSR.context, name="ReferenceDocument_context", curie=CADSR.curie('context'), + model_uri=CADSR.ReferenceDocument_context, domain=ReferenceDocument, range=Optional[str]) + +slots.CDEPermissibleValue_publicId = Slot(uri=CADSR.publicId, name="CDEPermissibleValue_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.CDEPermissibleValue_publicId, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_value = Slot(uri=CADSR.value, name="CDEPermissibleValue_value", curie=CADSR.curie('value'), + model_uri=CADSR.CDEPermissibleValue_value, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_valueDescription = Slot(uri=CADSR.valueDescription, name="CDEPermissibleValue_valueDescription", curie=CADSR.curie('valueDescription'), + model_uri=CADSR.CDEPermissibleValue_valueDescription, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_ValueMeaning = Slot(uri=CADSR.ValueMeaning, name="CDEPermissibleValue_ValueMeaning", curie=CADSR.curie('ValueMeaning'), + model_uri=CADSR.CDEPermissibleValue_ValueMeaning, domain=CDEPermissibleValue, range=Optional[Union[dict, ValueMeaning]]) + +slots.CDEPermissibleValue_origin = Slot(uri=CADSR.origin, name="CDEPermissibleValue_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.CDEPermissibleValue_origin, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_id = Slot(uri=CADSR.id, name="CDEPermissibleValue_id", curie=CADSR.curie('id'), + model_uri=CADSR.CDEPermissibleValue_id, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_beginDate = Slot(uri=CADSR.beginDate, name="CDEPermissibleValue_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.CDEPermissibleValue_beginDate, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_endDate = Slot(uri=CADSR.endDate, name="CDEPermissibleValue_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.CDEPermissibleValue_endDate, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_createdBy = Slot(uri=CADSR.createdBy, name="CDEPermissibleValue_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.CDEPermissibleValue_createdBy, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_dateCreated = Slot(uri=CADSR.dateCreated, name="CDEPermissibleValue_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.CDEPermissibleValue_dateCreated, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_modifiedBy = Slot(uri=CADSR.modifiedBy, name="CDEPermissibleValue_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.CDEPermissibleValue_modifiedBy, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_dateModified = Slot(uri=CADSR.dateModified, name="CDEPermissibleValue_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.CDEPermissibleValue_dateModified, domain=CDEPermissibleValue, range=Optional[str]) + +slots.CDEPermissibleValue_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="CDEPermissibleValue_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.CDEPermissibleValue_deletedIndicator, domain=CDEPermissibleValue, range=Optional[str]) + +slots.DataElementQuery_publicId = Slot(uri=CADSR.publicId, name="DataElementQuery_publicId", curie=CADSR.curie('publicId'), + model_uri=CADSR.DataElementQuery_publicId, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_version = Slot(uri=CADSR.version, name="DataElementQuery_version", curie=CADSR.curie('version'), + model_uri=CADSR.DataElementQuery_version, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_preferredName = Slot(uri=CADSR.preferredName, name="DataElementQuery_preferredName", curie=CADSR.curie('preferredName'), + model_uri=CADSR.DataElementQuery_preferredName, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_preferredDefinition = Slot(uri=CADSR.preferredDefinition, name="DataElementQuery_preferredDefinition", curie=CADSR.curie('preferredDefinition'), + model_uri=CADSR.DataElementQuery_preferredDefinition, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_longName = Slot(uri=CADSR.longName, name="DataElementQuery_longName", curie=CADSR.curie('longName'), + model_uri=CADSR.DataElementQuery_longName, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_contextName = Slot(uri=CADSR.contextName, name="DataElementQuery_contextName", curie=CADSR.curie('contextName'), + model_uri=CADSR.DataElementQuery_contextName, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_contextVersion = Slot(uri=CADSR.contextVersion, name="DataElementQuery_contextVersion", curie=CADSR.curie('contextVersion'), + model_uri=CADSR.DataElementQuery_contextVersion, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_dataElementConceptPublicId = Slot(uri=CADSR.dataElementConceptPublicId, name="DataElementQuery_dataElementConceptPublicId", curie=CADSR.curie('dataElementConceptPublicId'), + model_uri=CADSR.DataElementQuery_dataElementConceptPublicId, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_dataElementConceptVersion = Slot(uri=CADSR.dataElementConceptVersion, name="DataElementQuery_dataElementConceptVersion", curie=CADSR.curie('dataElementConceptVersion'), + model_uri=CADSR.DataElementQuery_dataElementConceptVersion, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_valueDomainPublicId = Slot(uri=CADSR.valueDomainPublicId, name="DataElementQuery_valueDomainPublicId", curie=CADSR.curie('valueDomainPublicId'), + model_uri=CADSR.DataElementQuery_valueDomainPublicId, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_valueDomainVersion = Slot(uri=CADSR.valueDomainVersion, name="DataElementQuery_valueDomainVersion", curie=CADSR.curie('valueDomainVersion'), + model_uri=CADSR.DataElementQuery_valueDomainVersion, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_origin = Slot(uri=CADSR.origin, name="DataElementQuery_origin", curie=CADSR.curie('origin'), + model_uri=CADSR.DataElementQuery_origin, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_workflowStatus = Slot(uri=CADSR.workflowStatus, name="DataElementQuery_workflowStatus", curie=CADSR.curie('workflowStatus'), + model_uri=CADSR.DataElementQuery_workflowStatus, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_registrationStatus = Slot(uri=CADSR.registrationStatus, name="DataElementQuery_registrationStatus", curie=CADSR.curie('registrationStatus'), + model_uri=CADSR.DataElementQuery_registrationStatus, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_id = Slot(uri=CADSR.id, name="DataElementQuery_id", curie=CADSR.curie('id'), + model_uri=CADSR.DataElementQuery_id, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_latestVersionIndicator = Slot(uri=CADSR.latestVersionIndicator, name="DataElementQuery_latestVersionIndicator", curie=CADSR.curie('latestVersionIndicator'), + model_uri=CADSR.DataElementQuery_latestVersionIndicator, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_beginDate = Slot(uri=CADSR.beginDate, name="DataElementQuery_beginDate", curie=CADSR.curie('beginDate'), + model_uri=CADSR.DataElementQuery_beginDate, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_endDate = Slot(uri=CADSR.endDate, name="DataElementQuery_endDate", curie=CADSR.curie('endDate'), + model_uri=CADSR.DataElementQuery_endDate, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_createdBy = Slot(uri=CADSR.createdBy, name="DataElementQuery_createdBy", curie=CADSR.curie('createdBy'), + model_uri=CADSR.DataElementQuery_createdBy, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_dateCreated = Slot(uri=CADSR.dateCreated, name="DataElementQuery_dateCreated", curie=CADSR.curie('dateCreated'), + model_uri=CADSR.DataElementQuery_dateCreated, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_modifiedBy = Slot(uri=CADSR.modifiedBy, name="DataElementQuery_modifiedBy", curie=CADSR.curie('modifiedBy'), + model_uri=CADSR.DataElementQuery_modifiedBy, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_dateModified = Slot(uri=CADSR.dateModified, name="DataElementQuery_dateModified", curie=CADSR.curie('dateModified'), + model_uri=CADSR.DataElementQuery_dateModified, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_changeNote = Slot(uri=CADSR.changeNote, name="DataElementQuery_changeNote", curie=CADSR.curie('changeNote'), + model_uri=CADSR.DataElementQuery_changeNote, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_administrativeNotes = Slot(uri=CADSR.administrativeNotes, name="DataElementQuery_administrativeNotes", curie=CADSR.curie('administrativeNotes'), + model_uri=CADSR.DataElementQuery_administrativeNotes, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_unresolvedIssues = Slot(uri=CADSR.unresolvedIssues, name="DataElementQuery_unresolvedIssues", curie=CADSR.curie('unresolvedIssues'), + model_uri=CADSR.DataElementQuery_unresolvedIssues, domain=DataElementQuery, range=Optional[str]) + +slots.DataElementQuery_deletedIndicator = Slot(uri=CADSR.deletedIndicator, name="DataElementQuery_deletedIndicator", curie=CADSR.curie('deletedIndicator'), + model_uri=CADSR.DataElementQuery_deletedIndicator, domain=DataElementQuery, range=Optional[str]) + +slots.permissibleValue_Permissible_Value = Slot(uri=CADSR.Permissible_Value, name="permissibleValue_Permissible Value", curie=CADSR.curie('Permissible_Value'), + model_uri=CADSR.permissibleValue_Permissible_Value, domain=PermissibleValue, range=Optional[str]) + +slots.permissibleValue_VM_Long_Name = Slot(uri=CADSR.VM_Long_Name, name="permissibleValue_VM Long Name", curie=CADSR.curie('VM_Long_Name'), + model_uri=CADSR.permissibleValue_VM_Long_Name, domain=PermissibleValue, range=Optional[str]) + +slots.permissibleValue_VM_Public_ID = Slot(uri=CADSR.VM_Public_ID, name="permissibleValue_VM Public ID", curie=CADSR.curie('VM_Public_ID'), + model_uri=CADSR.permissibleValue_VM_Public_ID, domain=PermissibleValue, range=Optional[str]) + +slots.permissibleValue_Concept_Code = Slot(uri=CADSR.Concept_Code, name="permissibleValue_Concept Code", curie=CADSR.curie('Concept_Code'), + model_uri=CADSR.permissibleValue_Concept_Code, domain=PermissibleValue, range=Optional[str]) + +slots.permissibleValue_VM_Description = Slot(uri=CADSR.VM_Description, name="permissibleValue_VM Description", curie=CADSR.curie('VM_Description'), + model_uri=CADSR.permissibleValue_VM_Description, domain=PermissibleValue, range=Optional[str]) + +slots.permissibleValue_Begin_Date = Slot(uri=CADSR.Begin_Date, name="permissibleValue_Begin Date", curie=CADSR.curie('Begin_Date'), + model_uri=CADSR.permissibleValue_Begin_Date, domain=PermissibleValue, range=Optional[str]) + +slots.permissibleValue_End_Date = Slot(uri=CADSR.End_Date, name="permissibleValue_End Date", curie=CADSR.curie('End_Date'), + model_uri=CADSR.permissibleValue_End_Date, domain=PermissibleValue, range=Optional[str]) diff --git a/schema_automator/metamodels/cadsr.yaml b/schema_automator/metamodels/cadsr.yaml new file mode 100644 index 0000000..74b6241 --- /dev/null +++ b/schema_automator/metamodels/cadsr.yaml @@ -0,0 +1,1361 @@ +name: cadsr +id: https://example.org/cadsr +imports: +- linkml:types +prefixes: + cadsr: https://example.org/cadsr + linkml: https://w3id.org/linkml/ +default_prefix: cadsr +slots: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + range: string ## usually a number encoded as string? + # identifier: true ## TODO - try this + comments: + - note this can appear at different levels + version: + description: The unique version identifier of the Administered Item. + required: false + longName: + description: A 255 character limit name for an item in the registry. + context: {} + ClassificationSchemeItems: + multivalued: true + range: ClassificationSchemeItem + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. Referred to as Short Name. + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + contextVersion: + description: The unique version identifier of the Administered Item. + Concepts: + multivalued: true + range: Concept + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of an + Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was modified + changeDescription: + description: The description of what has changed in the Administered Item since + the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the registry, + thought the physical record still exists. + DataElement: + range: DataElement + required: false + CRDCDataElements: + multivalued: true + range: CRDCDataElement + required: false + numRecords: + required: false + DataElementQueryResults: + multivalued: true + range: DataElementQuery + required: false + name: {} + type: {} + CDE Public ID: + description: The unique identifier for an Administered Item within a Registration + Authority. + Version: + description: The unique version identifier of the Administered Item. + CRDC Name: + description: CRDC Name + CRD Domain: + description: CRDC Domain + Example: + description: CRDC Example + VD Type: + description: Value Domain type + Coding Instruction: + description: CRDC Coding Instructions + Instructions: + description: CRDC Instructions + CRDC Definition: + description: CRD Definition + CDE Long Name: + description: A 255 character limit name for an item in the registry. + Registration Status: + description: A designation of the status in the registration life-cycle of an + Administered Item. + Workflow Status: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + Owned By: + description: Who owns the Data Element + Used By: + description: Who is using the Data Element + Deep Link: {} + permissibleValues: + multivalued: true + range: permissibleValue + DataElementConcept: + range: DataElementConcept + required: false + ValueDomain: + range: ValueDomain + required: false + ClassificationSchemes: + multivalued: true + range: ClassificationScheme + required: false + AlternateNames: + multivalued: true + range: AlternateName + required: false + ReferenceDocuments: + multivalued: true + range: ReferenceDocument + required: false + dataType: + required: false + unitOfMeasure: + required: false + characterSet: + required: false + minLength: + required: false + maxLength: + required: false + minValue: + required: false + maxValue: + required: false + decimalPlace: + required: false + format: + required: false + PermissibleValues: + multivalued: true + range: CDEPermissibleValue + required: false + ConceptualDomain: + range: ConceptualDomain + required: false + RepresentationTerm: + range: RepresentationTerm + required: false + conceptCode: {} + definition: {} + evsSource: + description: The name of the EVS concept code that was the source for the concept + identifier. + primaryIndicator: {} + displayOrder: {} + ObjectClass: + range: ObjectClass + required: false + Property: + range: Property + required: false + description: {} + url: {} + value: + description: A representation of a Value Meaning in a specific Value Domain the + actual Value. + required: false + valueDescription: + description: The text of the most desirable meaning for Value + required: false + ValueMeaning: + range: ValueMeaning + required: false + contextName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + dataElementConceptPublicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + dataElementConceptVersion: + description: The unique version identifier of the Administered Item. + valueDomainPublicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + valueDomainVersion: + description: The unique version identifier of the Administered Item. + changeNote: + description: The description of what has changed in the Administered Item since + the prior version of the Administered Item. + Permissible Value: + description: A representation of a Value Meaning in a specific Value Domain the + actual Value. + VM Long Name: + description: A 255 character limit name for an item in the registry. + VM Public ID: + description: The unique identifier for an Administered Item within a Registration + Authority. + Concept Code: {} + VM Description: + description: The text of the most desirable meaning for the Administered Item. + Begin Date: + description: The particular day, month and year this item became allowed. + End Date: + description: The day, month and year this item becomes no longer allowed. +classes: + DataElementContainer: + slots: + - DataElement + ClassificationScheme: + slots: + - publicId + - version + - longName + - context + - ClassificationSchemeItems + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + required: false + longName: + required: false + context: + required: false + ClassificationSchemeItems: + multivalued: true + range: ClassificationSchemeItem + Property: + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - Concepts + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + longName: + description: A 255 character limit name for an item in the registry. + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + contextVersion: {} + Concepts: + multivalued: true + range: Concept + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + DataElementpublicId_GET_response: + slots: + - DataElement + slot_usage: + DataElement: + range: DataElement + required: false + DataElementgetCRDCList_GET_response: + slots: + - CRDCDataElements + slot_usage: + CRDCDataElements: + multivalued: true + range: CRDCDataElement + required: false + DataElementqueryContext_GET_response: + slots: + - numRecords + - DataElementQueryResults + slot_usage: + numRecords: + required: false + DataElementQueryResults: + multivalued: true + range: DataElementQuery + required: false + AlternateName: + slots: + - name + - type + - context + slot_usage: + type: + required: false + context: + required: false + CRDCDataElement: + slots: + - CDE Public ID + - Version + - CRDC Name + - CRD Domain + - Example + - VD Type + - Coding Instruction + - Instructions + - CRDC Definition + - CDE Long Name + - Registration Status + - Workflow Status + - Owned By + - Used By + - Deep Link + - permissibleValues + slot_usage: + CDE Public ID: + description: The unique identifier for an Administered Item within a Registration + Authority. + Version: + description: The unique version identifier of the Administered Item. + CRDC Name: + description: CRDC Name + CRD Domain: + description: CRDC Domain + Example: + description: CRDC Example + VD Type: + description: Value Domain type + Coding Instruction: + description: CRDC Coding Instructions + Instructions: + description: CRDC Instructions + CRDC Definition: + description: CRD Definition + CDE Long Name: + description: A 255 character limit name for an item in the registry. + Registration Status: + description: A designation of the status in the registration life-cycle of + an Administered Item. + Workflow Status: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + Owned By: + description: Who owns the Data Element + Used By: + description: Who is using the Data Element + Deep Link: {} + permissibleValues: + multivalued: true + range: permissibleValue + ConceptualDomain: + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + longName: + description: A 255 character limit name for an item in the registry. + examples: + - value: ASSESS + - value: TX + - value: ANAT_SITES + - value: AE_RESULTS + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + contextVersion: {} + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + ClassificationSchemeItem: + slots: + - publicId + - version + - longName + - context + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + required: false + longName: + required: false + context: + required: false + DataElementqueryConcept_GET_response: + slots: + - numRecords + - DataElementQueryResults + slot_usage: + numRecords: + required: false + DataElementQueryResults: + multivalued: true + range: DataElementQuery + required: false + DataElement: + description: An element representing a specific metadata element. + Corresponds to *slot* in LinkML + exact_mappings: + - linkml:SlotDefinition + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - DataElementConcept + - ValueDomain + - ClassificationSchemes + - AlternateNames + - ReferenceDocuments + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + examples: + - value: Completion Status + - value: Specimen Type + - value: Date of Collection + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + longName: + description: The long name of the data element. Maybe be a semi-human readable code, + may be a non-semantic number. Not guaranteed to be unique + examples: + - value: AE_OUTCOME_CD + - value: 2854464v1.0:2854442v1.0 + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + contextVersion: {} + DataElementConcept: + range: DataElementConcept + required: false + description: The long name of the data element concept. Like the parent DataElement, + Maybe be a semi-human readable code, may be a non-semantic number. Not guaranteed to be unique, + in fact we should see reuse of the same DEC across DEs + examples: + - value: TX_COHORT_STDY + - value: 2867629v1.0:2423441v1.0 + - value: PERSON_ID + ValueDomain: + range: ValueDomain + required: false + ClassificationSchemes: + multivalued: true + range: ClassificationScheme + required: false + AlternateNames: + multivalued: true + range: AlternateName + required: false + ReferenceDocuments: + multivalued: true + range: ReferenceDocument + required: false + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + ValueDomain: + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - type + - dataType + - unitOfMeasure + - characterSet + - minLength + - maxLength + - minValue + - maxValue + - decimalPlace + - format + - PermissibleValues + - ConceptualDomain + - RepresentationTerm + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + required: false + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + required: false + longName: + description: A 255 character limit name for an item in the registry. + required: false + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + required: false + contextVersion: + required: false + type: + required: false + dataType: + required: false + unitOfMeasure: + required: false + characterSet: + required: false + minLength: + required: false + maxLength: + required: false + minValue: + required: false + maxValue: + required: false + decimalPlace: + required: false + format: + required: false + PermissibleValues: + multivalued: true + range: CDEPermissibleValue + required: false + ConceptualDomain: + range: ConceptualDomain + required: false + RepresentationTerm: + range: RepresentationTerm + required: false + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + ObjectClass: + aliases: + - OC + description: Class or class expression used to annotated a DataElementConcept (DEC). + OCs may correspond to a single NCIT concept, or they may be a composition. E.g. + DEC.OC.ln=C41136:C52673 (Dental Professional Practice) may correspond to + C52673 'Professional Practice' (primary) and C41136 'Dental' (secondary) + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - Concepts + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + longName: + description: The long name of the ObjectClass. This is typically the NCIT code, + or composition of codes + examples: + - value: C16960 + description: example value for DataElementConcept.ObjectClass + - value: C41136:C52673 + description: example value for DataElementConcept.ObjectClass + - value: Adverse Event + description: example value for DataElementConcept.ObjectClass + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + contextVersion: {} + Concepts: + multivalued: true + range: Concept + description: Concepts from NCIT that annotate the ObjectClass + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + DataElementquery_GET_response: + slots: + - numRecords + - DataElementQueryResults + slot_usage: + numRecords: + required: false + DataElementQueryResults: + multivalued: true + range: DataElementQuery + required: false + Concept: + slots: + - longName + - conceptCode + - definition + - evsSource + - primaryIndicator + - displayOrder + slot_usage: + longName: + description: name of the concept. Note that in other contexts, longName may be an identifier, + but in Concepts it is the label (always from NCIT). + examples: + - value: "No" + - value: "Increase" + - value: "Nucleic Acid Amplification Test" + conceptCode: + examples: + - value: C20055 + definition: {} + evsSource: + description: The name of the EVS concept code that was the source for the + concept identifier. + primaryIndicator: {} + displayOrder: {} + DataElementConcept: + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - ObjectClass + - Property + - ConceptualDomain + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + required: false + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + required: false + longName: + description: A 255 character limit name for an item in the registry. + required: false + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + required: false + contextVersion: + required: false + ObjectClass: + range: ObjectClass + required: false + Property: + range: Property + required: false + ConceptualDomain: + range: ConceptualDomain + required: false + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + ValueMeaning: + slots: + - publicId + - version + - preferredName + - longName + - preferredDefinition + - context + - contextVersion + - Concepts + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: human-readable name of the PV + required: false + examples: + - value: "No" + - value: "Not Applicable" + - value: "Absent" + - value: "Liver" + longName: + description: A 255 character limit name for an item in the registry. + required: false + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + required: false + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + required: false + contextVersion: + required: false + Concepts: + multivalued: true + range: Concept + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + RepresentationTerm: + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - context + - contextVersion + - Concepts + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeDescription + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + longName: + description: A 255 character limit name for an item in the registry. + context: + description: An associated gov.nih.nci.cadsr.domain.Context object + contextVersion: {} + Concepts: + multivalued: true + range: Concept + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeDescription: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + ReferenceDocument: + slots: + - name + - type + - description + - url + - context + slot_usage: + type: {} + description: {} + url: {} + context: {} + CDEPermissibleValue: + slots: + - publicId + - value + - valueDescription + - ValueMeaning + - origin + - id + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for a Permissible Value + required: false + value: + description: A representation of a Value Meaning in a specific Value Domain + the actual Value. + required: false + valueDescription: + description: The text of the most desirable meaning for Value + required: false + ValueMeaning: + range: ValueMeaning + required: false + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + id: + description: The 36 character caDSR database identifier. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + DataElementQuery: + slots: + - publicId + - version + - preferredName + - preferredDefinition + - longName + - contextName + - contextVersion + - dataElementConceptPublicId + - dataElementConceptVersion + - valueDomainPublicId + - valueDomainVersion + - origin + - workflowStatus + - registrationStatus + - id + - latestVersionIndicator + - beginDate + - endDate + - createdBy + - dateCreated + - modifiedBy + - dateModified + - changeNote + - administrativeNotes + - unresolvedIssues + - deletedIndicator + slot_usage: + publicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + required: false + version: + description: The unique version identifier of the Administered Item. + required: false + preferredName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. Referred to as Short Name. + preferredDefinition: + description: The text of the most desirable meaning for the Administered Item. + longName: + description: A 255 character limit name for an item in the registry. + contextName: + description: A 30 character limit name by which an Administered Item is designated + within a specific Context. + contextVersion: + description: The unique version identifier of the Administered Item. + dataElementConceptPublicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + dataElementConceptVersion: + description: The unique version identifier of the Administered Item. + valueDomainPublicId: + description: The unique identifier for an Administered Item within a Registration + Authority. + valueDomainVersion: + description: The unique version identifier of the Administered Item. + origin: + description: The source (document, project, discipline or model) for the Administered + Item. + workflowStatus: + description: A name of a designation of the status in the administrative life-cycle + of a Context Owner for handling new administered items. + registrationStatus: + description: A designation of the status in the registration life-cycle of + an Administered Item. + id: + description: The 36 character caDSR database identifier. + latestVersionIndicator: + description: The present form of an Administered Item. + beginDate: + description: The particular day, month and year this item became allowed. + endDate: + description: The day, month and year this item becomes no longer allowed. + createdBy: + description: This is a description of createdBy. + dateCreated: + description: The date the Administered Item was created. + modifiedBy: + description: Username of the person who modified the record + dateModified: + description: Date on which the record was modified; last date the object was + modified + changeNote: + description: The description of what has changed in the Administered Item + since the prior version of the Administered Item. + administrativeNotes: {} + unresolvedIssues: + description: Any problem that remains unresolved regarding proper documentation + of the Administered Item. + deletedIndicator: + description: An indicator that characterizes the item as eliminated from the + registry, thought the physical record still exists. + permissibleValue: + description: List of Permissible Values + slots: + - Permissible Value + - VM Long Name + - VM Public ID + - Concept Code + - VM Description + - Begin Date + - End Date + slot_usage: + Permissible Value: + description: A representation of a Value Meaning in a specific Value Domain + the actual Value. + VM Long Name: + description: A 255 character limit name for an item in the registry. + VM Public ID: + description: The unique identifier for an Administered Item within a Registration + Authority. + Concept Code: {} + VM Description: + description: The text of the most desirable meaning for the Administered Item. + Begin Date: + description: The particular day, month and year this item became allowed. + End Date: + description: The day, month and year this item becomes no longer allowed. + diff --git a/schema_automator/metamodels/dosdp/dosdp_linkml.yaml b/schema_automator/metamodels/dosdp/dosdp_linkml.yaml index a4029a3..f703bd4 100644 --- a/schema_automator/metamodels/dosdp/dosdp_linkml.yaml +++ b/schema_automator/metamodels/dosdp/dosdp_linkml.yaml @@ -14,6 +14,7 @@ default_prefix: dosdp classes: Pattern: + tree_root: true slots: - pattern_name - pattern_iri @@ -43,7 +44,7 @@ classes: - disjointWith - name - comment - - definition + - def - namespace - exact_synonym - narrow_synonym @@ -116,7 +117,7 @@ classes: inlined: true range: VarDeclaration list_vars: - description: A dictionary of variables refering to lists of owl classes. Key + description: A dictionary of variables referring to lists of owl classes. Key = variable name, value = variable range of items in list specified as a valid OWL data-type. data_vars: @@ -149,7 +150,7 @@ classes: range: PrintfAnnotationObo comment: range: PrintfAnnotationObo - definition: + def: range: PrintfAnnotationObo namespace: range: PrintfAnnotationObo @@ -521,7 +522,7 @@ slots: description: 'A dictionary of OWL annotation properties key : label; value : short form id' list_vars: - description: A dictionary of variables refering to lists of owl classes. Key = + description: A dictionary of variables referring to lists of owl classes. Key = variable name, value = variable range of items in list specified as a valid OWL data-type. data_vars: @@ -551,7 +552,7 @@ slots: range: PrintfAnnotationObo comment: range: PrintfAnnotationObo - definition: + def: range: PrintfAnnotationObo namespace: range: PrintfAnnotationObo diff --git a/schema_automator/utils/schemautils.py b/schema_automator/utils/schemautils.py index 12d018d..7b01ca1 100644 --- a/schema_automator/utils/schemautils.py +++ b/schema_automator/utils/schemautils.py @@ -1,5 +1,6 @@ import copy import logging +from pathlib import Path from typing import Union, Optional from deprecated.classic import deprecated @@ -10,7 +11,7 @@ from linkml_runtime.utils.schema_as_dict import schema_as_dict -def write_schema(schema: Union[dict, SchemaDefinition], output: Optional[str] = None): +def write_schema(schema: Union[dict, SchemaDefinition], output: Optional[Union[Path, str]] = None): """ Convenience method for writing a schema to stdout or to a file @@ -24,7 +25,7 @@ def write_schema(schema: Union[dict, SchemaDefinition], output: Optional[str] = sdict = schema ys = yaml.safe_dump(sdict, sort_keys=False) if output: - with open(output, 'w', encoding='UTF-8') as stream: + with open(str(output), 'w', encoding='UTF-8') as stream: stream.write(ys) else: print(ys) @@ -78,4 +79,4 @@ def merge_schemas(schemas, nomerge_enums_for=[]): schema['enums'][n] = x else: None # TODO - return schema \ No newline at end of file + return schema diff --git a/tests/resources/BioMRLs-table.html b/tests/resources/BioMRLs-table.html new file mode 100644 index 0000000..fa5f8ee --- /dev/null +++ b/tests/resources/BioMRLs-table.html @@ -0,0 +1,438 @@ + + + + Bioindustrial manufacturing readiness levels (BioMRLs) as a shared framework for measuring and communicating the maturity of bioproduct manufacturing processes | Oxford Academic + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + Skip to Main Content + + + + + + + +
+
Table 2.

Bioindustrial Manufacturing Readiness Levels (BioMRLs)

BioMRLSummary description of BioMRL1-10
BioMRL1:Basic manufacturing implications identified Prior to physical research and development efforts, a study of manufacturing capacity is performed. Criteria include identification and investigation of global trends in the industrial base, manufacturing science, material availability, supply chain, and metrology. 
BioMRL2:Manufacturing concepts identified Key manufacturing concepts have been identified, including broad-based studies that address analysis of material and process approaches, material effects and availability, potential supply chains, needed workforce skillsets, potential future investments, etc. Manufacturing scale and quality requirements for potential markets are identified and analyzed. An understanding of manufacturing feasibility and risk is emerging. 
BioMRL3:Manufacturing subsystems or components Components of the biomanufacturing process have been proven in a laboratory environment. This includes genetic engineering efforts needed to create strains capable of producing the desired products in titers that support the transition to pilot-scale production (typically in excess of 1 g/L). Methods for the purification and analysis of the product of interest are also required but can rely on lab-scale equipment that is not suitable for larger-scale DSP. 
BioMRL4: Independent validation and verification of proof-of-concept The proof-of-concept system has been demonstrated in a strain suitable for commercial-scale manufacturing and has been independently reproduced/validated/verified. Additionally, an initial assessment of the manufacturability is complete, including preliminary techno-economic analysis (TEA) and life-cycle analysis (LCA). This assessment should include plans for the scale-up production (SUP) and downstream processing (DSP) needed to produce sufficient quantities to allow testing and evaluation by downstream stakeholders. These plans incorporate production-relevant environments. Product quality risks and mitigation plans are documented. 
BioMRL5: Demonstration of prototype unit operations in a production relevant environment Identification of enabling/critical unit operations is complete. Prototype materials, tooling, and test equipment, as well as personnel skills, have been demonstrated empirically for unit operations in a production-relevant environment. Scale-up production and downstream processing have been performed at suitable scales to deliver sufficient quantities of end-product to downstream stakeholders for testing and evaluation. The TEA has been further refined to assess projected manufacturing costs. A risk management plan to mitigate technical and economic risks is integrated with the manufacturing strategy. 
BioMRL6: Demonstration of a prototype system or subsystem in a production relevant environment Manufacturing processes have been selected for the end-to-end manufacturing pipeline, even if engineering and/or design variables still need to be optimized. Prototype manufacturing processes and technologies, materials, tooling, and test equipment, as well as personnel skills, have been demonstrated on systems and/or subsystems in a production-relevant environment. The TEA is refined based on system performance and is expanded to include inventory control, production scheduling, plant maintenance, and production quality attributes (PQAs). Long-lead and key supply chain elements have been identified, and supply chain risk mitigation strategies exist. 
BioMRL7: Demonstration of systems or subsystems in a production representative environment Detailed system design is complete. Manufacturing processes and procedures have been demonstrated in a production representative environment. Sufficient quantities of product have been made to test packaging and distribution systems. Unit cost reduction strategies, such as statistical process controls (SPCs), are underway in a production representative environment. Quality assurance of supply chains is in place, and procurement schedules for long-lead elements are established. The manufacturing process is sufficient to support low-level commercial manufacturing. 
BioMRL8:Manufacturing line demonstrated, ready for low-rate initial production (LRIP) This maturity level is associated with manufacturing readiness for entry into LRIP. The detailed system design is complete and sufficiently stable to enter LRIP. All materials, manpower, tooling, test equipment, and facilities are proven on the manufacturing line and are available to meet the planned low-rate production schedule. STE/SIE has been validated in accordance with plans. Manufacturing and quality processes and procedures have been proven and are ready for LRIP. Known technical and business risks pose no significant challenges for LRIP. The cost model and yield and rate analyses have been updated with manufacturing line results. Supplier qualification testing and first article inspections have been completed. The industrial base has been assessed and shows that industrial capability is established to support LRIP. 
BioMRL9:Low rate production demonstrated; Capability in place to begin full rate production (FRP) Manufacturing has successfully achieved LRIP and is ready to enter FRP. All systems engineering/design requirements have been met such that there are minimal system changes. Major system design features are stable and have been proven in operational tests and evaluations. Materials, parts, manpower, tooling, test equipment, and facilities are available to meet planned rate production schedules. STE/SIE validation is maintained and re-validated as necessary. Manufacturing process capability is at an appropriate quality level to meet customer tolerances. LRIP cost targets have been met. The cost model has been updated for FRP and reflects the impact of continuous improvement. 
BioMRL10:FRP demonstrated and lean production practices in place Engineering/design changes are few and generally limited to continuous improvement changes or obsolescence issues. System, components, and items are in FRP and meet all engineering, performance, quality, and reliability requirements. Manufacturing process capability is at the appropriate quality level. All materials, tooling, inspection and test equipment, facilities, and manpower are in place and have met FRP requirements. Process infrastructure and analytical equipment validation are maintained and re-validated as necessary. Rate production unit costs meet goals, and funding is sufficient for production at the required rates. Continuous process improvements based on risks identified during FRP are ongoing. 
BioMRLSummary description of BioMRL1-10
BioMRL1:Basic manufacturing implications identified Prior to physical research and development efforts, a study of manufacturing capacity is performed. Criteria include identification and investigation of global trends in the industrial base, manufacturing science, material availability, supply chain, and metrology. 
BioMRL2:Manufacturing concepts identified Key manufacturing concepts have been identified, including broad-based studies that address analysis of material and process approaches, material effects and availability, potential supply chains, needed workforce skillsets, potential future investments, etc. Manufacturing scale and quality requirements for potential markets are identified and analyzed. An understanding of manufacturing feasibility and risk is emerging. 
BioMRL3:Manufacturing subsystems or components Components of the biomanufacturing process have been proven in a laboratory environment. This includes genetic engineering efforts needed to create strains capable of producing the desired products in titers that support the transition to pilot-scale production (typically in excess of 1 g/L). Methods for the purification and analysis of the product of interest are also required but can rely on lab-scale equipment that is not suitable for larger-scale DSP. 
BioMRL4: Independent validation and verification of proof-of-concept The proof-of-concept system has been demonstrated in a strain suitable for commercial-scale manufacturing and has been independently reproduced/validated/verified. Additionally, an initial assessment of the manufacturability is complete, including preliminary techno-economic analysis (TEA) and life-cycle analysis (LCA). This assessment should include plans for the scale-up production (SUP) and downstream processing (DSP) needed to produce sufficient quantities to allow testing and evaluation by downstream stakeholders. These plans incorporate production-relevant environments. Product quality risks and mitigation plans are documented. 
BioMRL5: Demonstration of prototype unit operations in a production relevant environment Identification of enabling/critical unit operations is complete. Prototype materials, tooling, and test equipment, as well as personnel skills, have been demonstrated empirically for unit operations in a production-relevant environment. Scale-up production and downstream processing have been performed at suitable scales to deliver sufficient quantities of end-product to downstream stakeholders for testing and evaluation. The TEA has been further refined to assess projected manufacturing costs. A risk management plan to mitigate technical and economic risks is integrated with the manufacturing strategy. 
BioMRL6: Demonstration of a prototype system or subsystem in a production relevant environment Manufacturing processes have been selected for the end-to-end manufacturing pipeline, even if engineering and/or design variables still need to be optimized. Prototype manufacturing processes and technologies, materials, tooling, and test equipment, as well as personnel skills, have been demonstrated on systems and/or subsystems in a production-relevant environment. The TEA is refined based on system performance and is expanded to include inventory control, production scheduling, plant maintenance, and production quality attributes (PQAs). Long-lead and key supply chain elements have been identified, and supply chain risk mitigation strategies exist. 
BioMRL7: Demonstration of systems or subsystems in a production representative environment Detailed system design is complete. Manufacturing processes and procedures have been demonstrated in a production representative environment. Sufficient quantities of product have been made to test packaging and distribution systems. Unit cost reduction strategies, such as statistical process controls (SPCs), are underway in a production representative environment. Quality assurance of supply chains is in place, and procurement schedules for long-lead elements are established. The manufacturing process is sufficient to support low-level commercial manufacturing. 
BioMRL8:Manufacturing line demonstrated, ready for low-rate initial production (LRIP) This maturity level is associated with manufacturing readiness for entry into LRIP. The detailed system design is complete and sufficiently stable to enter LRIP. All materials, manpower, tooling, test equipment, and facilities are proven on the manufacturing line and are available to meet the planned low-rate production schedule. STE/SIE has been validated in accordance with plans. Manufacturing and quality processes and procedures have been proven and are ready for LRIP. Known technical and business risks pose no significant challenges for LRIP. The cost model and yield and rate analyses have been updated with manufacturing line results. Supplier qualification testing and first article inspections have been completed. The industrial base has been assessed and shows that industrial capability is established to support LRIP. 
BioMRL9:Low rate production demonstrated; Capability in place to begin full rate production (FRP) Manufacturing has successfully achieved LRIP and is ready to enter FRP. All systems engineering/design requirements have been met such that there are minimal system changes. Major system design features are stable and have been proven in operational tests and evaluations. Materials, parts, manpower, tooling, test equipment, and facilities are available to meet planned rate production schedules. STE/SIE validation is maintained and re-validated as necessary. Manufacturing process capability is at an appropriate quality level to meet customer tolerances. LRIP cost targets have been met. The cost model has been updated for FRP and reflects the impact of continuous improvement. 
BioMRL10:FRP demonstrated and lean production practices in place Engineering/design changes are few and generally limited to continuous improvement changes or obsolescence issues. System, components, and items are in FRP and meet all engineering, performance, quality, and reliability requirements. Manufacturing process capability is at the appropriate quality level. All materials, tooling, inspection and test equipment, facilities, and manpower are in place and have met FRP requirements. Process infrastructure and analytical equipment validation are maintained and re-validated as necessary. Rate production unit costs meet goals, and funding is sufficient for production at the required rates. Continuous process improvements based on risks identified during FRP are ongoing. 
Table 2.

Bioindustrial Manufacturing Readiness Levels (BioMRLs)

BioMRLSummary description of BioMRL1-10
BioMRL1:Basic manufacturing implications identified Prior to physical research and development efforts, a study of manufacturing capacity is performed. Criteria include identification and investigation of global trends in the industrial base, manufacturing science, material availability, supply chain, and metrology. 
BioMRL2:Manufacturing concepts identified Key manufacturing concepts have been identified, including broad-based studies that address analysis of material and process approaches, material effects and availability, potential supply chains, needed workforce skillsets, potential future investments, etc. Manufacturing scale and quality requirements for potential markets are identified and analyzed. An understanding of manufacturing feasibility and risk is emerging. 
BioMRL3:Manufacturing subsystems or components Components of the biomanufacturing process have been proven in a laboratory environment. This includes genetic engineering efforts needed to create strains capable of producing the desired products in titers that support the transition to pilot-scale production (typically in excess of 1 g/L). Methods for the purification and analysis of the product of interest are also required but can rely on lab-scale equipment that is not suitable for larger-scale DSP. 
BioMRL4: Independent validation and verification of proof-of-concept The proof-of-concept system has been demonstrated in a strain suitable for commercial-scale manufacturing and has been independently reproduced/validated/verified. Additionally, an initial assessment of the manufacturability is complete, including preliminary techno-economic analysis (TEA) and life-cycle analysis (LCA). This assessment should include plans for the scale-up production (SUP) and downstream processing (DSP) needed to produce sufficient quantities to allow testing and evaluation by downstream stakeholders. These plans incorporate production-relevant environments. Product quality risks and mitigation plans are documented. 
BioMRL5: Demonstration of prototype unit operations in a production relevant environment Identification of enabling/critical unit operations is complete. Prototype materials, tooling, and test equipment, as well as personnel skills, have been demonstrated empirically for unit operations in a production-relevant environment. Scale-up production and downstream processing have been performed at suitable scales to deliver sufficient quantities of end-product to downstream stakeholders for testing and evaluation. The TEA has been further refined to assess projected manufacturing costs. A risk management plan to mitigate technical and economic risks is integrated with the manufacturing strategy. 
BioMRL6: Demonstration of a prototype system or subsystem in a production relevant environment Manufacturing processes have been selected for the end-to-end manufacturing pipeline, even if engineering and/or design variables still need to be optimized. Prototype manufacturing processes and technologies, materials, tooling, and test equipment, as well as personnel skills, have been demonstrated on systems and/or subsystems in a production-relevant environment. The TEA is refined based on system performance and is expanded to include inventory control, production scheduling, plant maintenance, and production quality attributes (PQAs). Long-lead and key supply chain elements have been identified, and supply chain risk mitigation strategies exist. 
BioMRL7: Demonstration of systems or subsystems in a production representative environment Detailed system design is complete. Manufacturing processes and procedures have been demonstrated in a production representative environment. Sufficient quantities of product have been made to test packaging and distribution systems. Unit cost reduction strategies, such as statistical process controls (SPCs), are underway in a production representative environment. Quality assurance of supply chains is in place, and procurement schedules for long-lead elements are established. The manufacturing process is sufficient to support low-level commercial manufacturing. 
BioMRL8:Manufacturing line demonstrated, ready for low-rate initial production (LRIP) This maturity level is associated with manufacturing readiness for entry into LRIP. The detailed system design is complete and sufficiently stable to enter LRIP. All materials, manpower, tooling, test equipment, and facilities are proven on the manufacturing line and are available to meet the planned low-rate production schedule. STE/SIE has been validated in accordance with plans. Manufacturing and quality processes and procedures have been proven and are ready for LRIP. Known technical and business risks pose no significant challenges for LRIP. The cost model and yield and rate analyses have been updated with manufacturing line results. Supplier qualification testing and first article inspections have been completed. The industrial base has been assessed and shows that industrial capability is established to support LRIP. 
BioMRL9:Low rate production demonstrated; Capability in place to begin full rate production (FRP) Manufacturing has successfully achieved LRIP and is ready to enter FRP. All systems engineering/design requirements have been met such that there are minimal system changes. Major system design features are stable and have been proven in operational tests and evaluations. Materials, parts, manpower, tooling, test equipment, and facilities are available to meet planned rate production schedules. STE/SIE validation is maintained and re-validated as necessary. Manufacturing process capability is at an appropriate quality level to meet customer tolerances. LRIP cost targets have been met. The cost model has been updated for FRP and reflects the impact of continuous improvement. 
BioMRL10:FRP demonstrated and lean production practices in place Engineering/design changes are few and generally limited to continuous improvement changes or obsolescence issues. System, components, and items are in FRP and meet all engineering, performance, quality, and reliability requirements. Manufacturing process capability is at the appropriate quality level. All materials, tooling, inspection and test equipment, facilities, and manpower are in place and have met FRP requirements. Process infrastructure and analytical equipment validation are maintained and re-validated as necessary. Rate production unit costs meet goals, and funding is sufficient for production at the required rates. Continuous process improvements based on risks identified during FRP are ongoing. 
BioMRLSummary description of BioMRL1-10
BioMRL1:Basic manufacturing implications identified Prior to physical research and development efforts, a study of manufacturing capacity is performed. Criteria include identification and investigation of global trends in the industrial base, manufacturing science, material availability, supply chain, and metrology. 
BioMRL2:Manufacturing concepts identified Key manufacturing concepts have been identified, including broad-based studies that address analysis of material and process approaches, material effects and availability, potential supply chains, needed workforce skillsets, potential future investments, etc. Manufacturing scale and quality requirements for potential markets are identified and analyzed. An understanding of manufacturing feasibility and risk is emerging. 
BioMRL3:Manufacturing subsystems or components Components of the biomanufacturing process have been proven in a laboratory environment. This includes genetic engineering efforts needed to create strains capable of producing the desired products in titers that support the transition to pilot-scale production (typically in excess of 1 g/L). Methods for the purification and analysis of the product of interest are also required but can rely on lab-scale equipment that is not suitable for larger-scale DSP. 
BioMRL4: Independent validation and verification of proof-of-concept The proof-of-concept system has been demonstrated in a strain suitable for commercial-scale manufacturing and has been independently reproduced/validated/verified. Additionally, an initial assessment of the manufacturability is complete, including preliminary techno-economic analysis (TEA) and life-cycle analysis (LCA). This assessment should include plans for the scale-up production (SUP) and downstream processing (DSP) needed to produce sufficient quantities to allow testing and evaluation by downstream stakeholders. These plans incorporate production-relevant environments. Product quality risks and mitigation plans are documented. 
BioMRL5: Demonstration of prototype unit operations in a production relevant environment Identification of enabling/critical unit operations is complete. Prototype materials, tooling, and test equipment, as well as personnel skills, have been demonstrated empirically for unit operations in a production-relevant environment. Scale-up production and downstream processing have been performed at suitable scales to deliver sufficient quantities of end-product to downstream stakeholders for testing and evaluation. The TEA has been further refined to assess projected manufacturing costs. A risk management plan to mitigate technical and economic risks is integrated with the manufacturing strategy. 
BioMRL6: Demonstration of a prototype system or subsystem in a production relevant environment Manufacturing processes have been selected for the end-to-end manufacturing pipeline, even if engineering and/or design variables still need to be optimized. Prototype manufacturing processes and technologies, materials, tooling, and test equipment, as well as personnel skills, have been demonstrated on systems and/or subsystems in a production-relevant environment. The TEA is refined based on system performance and is expanded to include inventory control, production scheduling, plant maintenance, and production quality attributes (PQAs). Long-lead and key supply chain elements have been identified, and supply chain risk mitigation strategies exist. 
BioMRL7: Demonstration of systems or subsystems in a production representative environment Detailed system design is complete. Manufacturing processes and procedures have been demonstrated in a production representative environment. Sufficient quantities of product have been made to test packaging and distribution systems. Unit cost reduction strategies, such as statistical process controls (SPCs), are underway in a production representative environment. Quality assurance of supply chains is in place, and procurement schedules for long-lead elements are established. The manufacturing process is sufficient to support low-level commercial manufacturing. 
BioMRL8:Manufacturing line demonstrated, ready for low-rate initial production (LRIP) This maturity level is associated with manufacturing readiness for entry into LRIP. The detailed system design is complete and sufficiently stable to enter LRIP. All materials, manpower, tooling, test equipment, and facilities are proven on the manufacturing line and are available to meet the planned low-rate production schedule. STE/SIE has been validated in accordance with plans. Manufacturing and quality processes and procedures have been proven and are ready for LRIP. Known technical and business risks pose no significant challenges for LRIP. The cost model and yield and rate analyses have been updated with manufacturing line results. Supplier qualification testing and first article inspections have been completed. The industrial base has been assessed and shows that industrial capability is established to support LRIP. 
BioMRL9:Low rate production demonstrated; Capability in place to begin full rate production (FRP) Manufacturing has successfully achieved LRIP and is ready to enter FRP. All systems engineering/design requirements have been met such that there are minimal system changes. Major system design features are stable and have been proven in operational tests and evaluations. Materials, parts, manpower, tooling, test equipment, and facilities are available to meet planned rate production schedules. STE/SIE validation is maintained and re-validated as necessary. Manufacturing process capability is at an appropriate quality level to meet customer tolerances. LRIP cost targets have been met. The cost model has been updated for FRP and reflects the impact of continuous improvement. 
BioMRL10:FRP demonstrated and lean production practices in place Engineering/design changes are few and generally limited to continuous improvement changes or obsolescence issues. System, components, and items are in FRP and meet all engineering, performance, quality, and reliability requirements. Manufacturing process capability is at the appropriate quality level. All materials, tooling, inspection and test equipment, facilities, and manpower are in place and have met FRP requirements. Process infrastructure and analytical equipment validation are maintained and re-validated as necessary. Rate production unit costs meet goals, and funding is sufficient for production at the required rates. Continuous process improvements based on risks identified during FRP are ongoing. 
+
+ + + + +
+
+
+ Close +
+ + + + +
+
+
This Feature Is Available To Subscribers Only
+

Sign In or Create an Account

+
+ Close +
+ +
+

This PDF is available to Subscribers Only

+ View Article Abstract & Purchase Options +
+

For full access to this pdf, sign in to an existing account, or purchase an annual subscription.

+
+ Close +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +
+ + + + + + +
\ No newline at end of file diff --git a/tests/resources/C2M2_datapackage.json b/tests/resources/C2M2_datapackage.json index bac869b..79db41c 100644 --- a/tests/resources/C2M2_datapackage.json +++ b/tests/resources/C2M2_datapackage.json @@ -88,6 +88,7 @@ "description": "A filename with no prepended PATH information", "type": "string", "constraints": { + "required": true, "pattern": "^[^\/\\:]+$" } }, @@ -258,7 +259,7 @@ "format": "any" }, { - "name": "assay_type", + "name": "sample_prep_method", "description": "An OBI CV term ID (from the 'planned process' branch of the vocabulary, excluding the 'assay' subtree) describing the preparation method that produced this biosample", "type": "string" }, @@ -286,9 +287,9 @@ } }, { - "fields": "assay_type", + "fields": "sample_prep_method", "reference": { - "resource": "assay_type", + "resource": "sample_prep_method", "fields": "id" } }, @@ -384,9 +385,7 @@ "cfde_subject_sex:0", "cfde_subject_sex:1", "cfde_subject_sex:2", - "cfde_subject_sex:3", - "cfde_subject_sex:4", - "cfde_subject_sex:5" + "cfde_subject_sex:3" ] }, { @@ -2483,7 +2482,9 @@ "cfde_subject_race:1", "cfde_subject_race:2", "cfde_subject_race:3", - "cfde_subject_race:4" + "cfde_subject_race:4", + "cfde_subject_race:5", + "cfde_subject_race:6" ] } ], @@ -2597,7 +2598,7 @@ "skipInitialSpace": true, "header": true }, - "description": "List of Ontology for Biomedical Investigations (OBI) CV terms used to describe types of experiment that generate C2M2 biosamples or results stored in C2M2 files", + "description": "List of Ontology for Biomedical Investigations (OBI) CV terms used to describe types of experiment that generate results stored in C2M2 files", "schema": { "fields": [ { @@ -3264,6 +3265,53 @@ ] } }, + { + "profile": "tabular-data-resource", + "name": "sample_prep_method", + "title": "sample_prep_method", + "path": "sample_prep_method.tsv", + "dialect": { + "delimiter": "\t", + "doubleQuote": false, + "lineTerminator": "\n", + "skipInitialSpace": true, + "header": true + }, + "description": "List of Ontology for Biomedical Investigations (OBI) CV terms used to describe types of preparation methods that produce C2M2 biosamples", + "schema": { + "fields": [ + { + "name": "id", + "description": "An OBI CV term", + "type": "string", + "constraints": { + "required": true, + "unique": true + } + }, + { + "name": "name", + "description": "A short, human-readable, machine-read-friendly label for this OBI term", + "type": "string", + "constraints": { + "required": true + } + }, + { + "name": "description", + "description": "A human-readable description of this OBI term", + "type": "string" + }, + { + "name": "synonyms", + "description": "A list of synonyms for this term as identified by the OBI metadata", + "type": "array" + } + ], + "missingValues": [ "" ], + "primaryKey": "id" + } + }, { "profile": "tabular-data-resource", "name": "id_namespace", diff --git a/tests/resources/cadsr-cde-12137353.json b/tests/resources/cadsr-cde-12137353.json new file mode 100644 index 0000000..127dd66 --- /dev/null +++ b/tests/resources/cadsr-cde-12137353.json @@ -0,0 +1,4603 @@ +{ + "DataElement": { + "publicId": "12137353", + "version": "1", + "preferredName": "Imaging Technology DICOM Modality Type", + "preferredDefinition": "A system of categories for representing a specific manner, characteristic, pattern of a data acquisition device used in an imaging event whether physical or electronic.", + "longName": "12137352v1.00:2896062v2.00", + "context": "CRDC", + "contextVersion": "1", + "DataElementConcept": { + "publicId": "12137352", + "version": "1", + "preferredName": "Imaging Technology Modality", + "preferredDefinition": "Any of a number of technologies that permits the visualization and acquisition of images into a physical or electronic record.:A specific manner, characteristic, pattern of application or the employment of, any therapeutic agent or method of treatment, especially involving the physical treatment of a condition.", + "longName": "12137351v1.00:2430878v1.00", + "context": "NCIP", + "contextVersion": "1", + "ObjectClass": { + "publicId": "12137351", + "version": "1", + "preferredName": "Imaging Technology", + "preferredDefinition": "Any of a number of technologies that permits the visualization and acquisition of images into a physical or electronic record.", + "longName": "C18843", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Imaging Technology", + "conceptCode": "C18843", + "definition": "Any of a number of technologies that permits the visualization and acquisition of images into a physical or electronic record.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "EFB98235-243C-22F3-E053-731AD00AC1E7", + "latestVersionIndicator": "Yes", + "beginDate": "2022-12-13", + "endDate": null, + "createdBy": "JKNABLE", + "dateCreated": "2022-12-13", + "modifiedBy": "JKNABLE", + "dateModified": "2022-12-13", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "Property": { + "publicId": "2430878", + "version": "1", + "preferredName": "Modality", + "preferredDefinition": "A specific manner, characteristic, pattern of application or the employment of, any therapeutic agent or method of treatment, especially involving the physical treatment of a condition.", + "longName": "C41147", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Modality", + "conceptCode": "C41147", + "definition": "A specific manner, characteristic, pattern of application or the employment of, any therapeutic agent or method of treatment, especially involving the physical treatment of a condition.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "05D87511-7D85-1EF7-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-11-18", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2005-11-18", + "modifiedBy": "ONEDATA", + "dateModified": "2005-11-18", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ConceptualDomain": { + "publicId": "2233241", + "version": "1", + "preferredName": "Medical Imaging", + "preferredDefinition": "Events, people, materials and activities uniquely defined by medical imaging. ", + "longName": "MEDICAL IMAGING", + "context": "CIP", + "contextVersion": "2.31", + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "F96173D7-A9B4-3CBB-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-06-12", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2005-06-12", + "modifiedBy": "SBREXT", + "dateModified": "2006-09-13", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "EFB98235-243D-22F3-E053-731AD00AC1E7", + "latestVersionIndicator": "Yes", + "beginDate": "2022-12-13", + "endDate": null, + "createdBy": "JKNABLE", + "dateCreated": "2022-12-13", + "modifiedBy": "JKNABLE", + "dateModified": "2023-02-06", + "changeDescription": "4/30/09 created per VCDE Equipment CDE set small group to include \"image\" as a qualifier in the OC.", + "administrativeNotes": "2/6/23 released per Smita/DSS. jk", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ValueDomain": { + "publicId": "2896062", + "version": "2", + "preferredName": "DICOM Modality Type", + "preferredDefinition": "The kind of imaging equipment used to complete an imaging event whether physical or electronic. [Manually-curated]_A comprehensive set of standards for communications between medical imaging devices, including handling, storing and transmitting information in medical imaging. It includes a file format definition and a network communication protocol._A specific manner, characteristic, pattern of application or the employment of, any therapeutic agent or method of treatment, especially involving the physical treatment of a condition.", + "longName": "DICOM_MODALITY_TP", + "context": "NCIP", + "contextVersion": "1", + "type": "Enumerated", + "dataType": "CHARACTER", + "minLength": null, + "maxLength": "16", + "minValue": null, + "maxValue": null, + "decimalPlace": null, + "PermissibleValues": [ + { + "value": "OP", + "valueDescription": "Ophthalmic Photography", + "ValueMeaning": { + "publicId": "2582151", + "version": "1", + "preferredName": "Ophthalmic Photography", + "longName": "2582151v1.00", + "preferredDefinition": "Photography used to study and document structures and disorders of the eye.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ophthalmic Photography", + "conceptCode": "C190559", + "definition": "Photography used to study and document structures and disorders of the eye.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF4-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F759-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "OT", + "valueDescription": "Other", + "ValueMeaning": { + "publicId": "2559653", + "version": "1", + "preferredName": "Other", + "longName": "2559653", + "preferredDefinition": "Different than the one(s) previously specified or mentioned.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Other", + "conceptCode": "C17649", + "definition": "Different than the one(s) previously specified or mentioned.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-B612-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2002-02-13", + "endDate": null, + "createdBy": "SBR", + "dateCreated": "2002-02-13", + "modifiedBy": "GDEEN", + "dateModified": "2023-12-28", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F75A-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "PR", + "valueDescription": "Presentation State", + "ValueMeaning": { + "publicId": "2582144", + "version": "1", + "preferredName": "Presentation State", + "longName": "2582144v1.00", + "preferredDefinition": "An independent DICOM SOP Instance that contains information on how a particular image should be displayed. The Presentation State may contain label information (types of Label and Positions), windowing values, zoom value, scrolling (panning) values, rotations or any other visual display element that is defined within the DICOM standard.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "DICOM Presentation State", + "conceptCode": "C190587", + "definition": "An independent DICOM SOP Instance that contains information on how a particular image should be displayed. The Presentation State may contain label information (types of Label and Positions), windowing values, zoom value, scrolling (panning) values, rotations or any other visual display element that is defined within the DICOM standard.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DED-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F75B-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "PT", + "valueDescription": "PET scan", + "ValueMeaning": { + "publicId": "2581621", + "version": "1", + "preferredName": "PET scan", + "longName": "2581621", + "preferredDefinition": "A technique for measuring the gamma radiation produced by collisions of electrons and positrons (anti-electrons) within living tissue. In positron emission tomography (PET), a subject is given a dose of a positron-emitting radionuclide attached to a metabolically active substance (for example, 2-fluoro-2-deoxy-D-glucose (FDG), which is similar to a naturally occurring sugar, glucose, with the addition of a radioactive fluorine atom). When living tissue containing the positron emitter is bombarded by electrons, gamma radiation produced by collisions of electrons and positrons is detected by a scanner, revealing in fine detail the tissue location of the metabolically-active substance administered.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Positron Emission Tomography", + "conceptCode": "C17007", + "definition": "A technique for measuring the gamma radiation produced by collisions of electrons and positrons (anti-electrons) within living tissue. In positron emission tomography (PET), a subject is given a dose of a positron-emitting radionuclide attached to a metabolically active substance (for example, 2-fluoro-2-deoxy-D-glucose (FDG), which is similar to a naturally occurring sugar, glucose, with the addition of a radioactive fluorine atom). When living tissue containing the positron emitter is bombarded by electrons, gamma radiation produced by collisions of electrons and positrons is detected by a scanner, revealing in fine detail the tissue location of the metabolically-active substance administered.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0BE2-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2004-08-19", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2004-08-19", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F75C-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "PX", + "valueDescription": "Panoramic X-Ray", + "ValueMeaning": { + "publicId": "2582140", + "version": "1", + "preferredName": "Panoramic X-Ray", + "longName": "2582140v1.00", + "preferredDefinition": "A panoramic or wide-view x-ray of the upper and lower jaw and teeth.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Orthopantomogram", + "conceptCode": "C150663", + "definition": "A panoramic or wide-view x-ray of the upper and lower jaw and teeth.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE9-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F75D-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RF", + "valueDescription": "Radio Fluoroscopy", + "ValueMeaning": { + "publicId": "2582130", + "version": "1", + "preferredName": "Radio Fluoroscopy", + "longName": "2582130v1.00", + "preferredDefinition": "Examination of the tissues and deep structures of the body by x-ray, using the fluoroscope, a device that produces an image when x-rays strike a fluorescent screen.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Fluoroscopy", + "conceptCode": "C16588", + "definition": "Examination of the tissues and deep structures of the body by x-ray, using the fluoroscope, a device that produces an image when x-rays strike a fluorescent screen.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DDF-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F75E-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RG", + "valueDescription": "Radiographic imaging", + "ValueMeaning": { + "publicId": "2582126", + "version": "1", + "preferredName": "Radiographic imaging", + "longName": "2582126v1.00", + "preferredDefinition": "A radiographic procedure using the emission of x-rays to form an image of the structure penetrated by the radiation.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "X-Ray Imaging", + "conceptCode": "C38101", + "definition": "A radiographic procedure using the emission of x-rays to form an image of the structure penetrated by the radiation.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DDB-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F75F-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RTDOSE", + "valueDescription": "Radiotherapy Dose", + "ValueMeaning": { + "publicId": "2582133", + "version": "1", + "preferredName": "Radiotherapy Dose", + "longName": "2582133v1.00", + "preferredDefinition": "The amount of radiation administered during a therapy session.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Radiation Dose", + "conceptCode": "C190594", + "definition": "The amount of radiation administered during a therapy session.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE2-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F760-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RTIMAGE", + "valueDescription": "Radiotherapy Image", + "ValueMeaning": { + "publicId": "2582132", + "version": "1", + "preferredName": "Radiotherapy Image", + "longName": "2582132v1.00", + "preferredDefinition": "An image produced on a radiosensitive surface by x-ray radiation that has penetrated and passed through a structure.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Radiograph", + "conceptCode": "C60727", + "definition": "An image produced on a radiosensitive surface by x-ray radiation that has penetrated and passed through a structure.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE1-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED7178B3-F761-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RTPLAN", + "valueDescription": "Radiotherapy Plan", + "ValueMeaning": { + "publicId": "2582135", + "version": "1", + "preferredName": "Radiotherapy Plan", + "longName": "2582135v1.00", + "preferredDefinition": "The design for radiation therapy.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Radiotherapy Plan", + "conceptCode": "C190595", + "definition": "The design for radiation therapy.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE4-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F762-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RTRECORD", + "valueDescription": "RT Treatment Record", + "ValueMeaning": { + "publicId": "2582136", + "version": "1", + "preferredName": "RT Treatment Record", + "longName": "2582136v1.00", + "preferredDefinition": "A record generated from radiation therapy.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Radiation Therapy Record", + "conceptCode": "C190604", + "definition": "A record generated from radiation therapy.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE5-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F763-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "RTSTRUCT", + "valueDescription": "Radiotherapy Structure Set", + "ValueMeaning": { + "publicId": "2582134", + "version": "1", + "preferredName": "Radiotherapy Structure Set", + "longName": "2582134v1.00", + "preferredDefinition": "An object of the DICOM standard used for the transfer of patient structures and related data defined on CT scanners, virtual simulation workstations, treatment planning systems and similar devices.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Radiotherapy Structure Set", + "conceptCode": "C190605", + "definition": "An object of the DICOM standard used for the transfer of patient structures and related data defined on CT scanners, virtual simulation workstations, treatment planning systems and similar devices.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE3-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F764-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "SM", + "valueDescription": "Slide Microscopy", + "ValueMeaning": { + "publicId": "2582142", + "version": "1", + "preferredName": "Slide Microscopy", + "longName": "2582142v1.00", + "preferredDefinition": "Microscopy that uses a sample affixed to a slide.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Slide Microscopy", + "conceptCode": "C190609", + "definition": "Microscopy that uses a sample affixed to a slide.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DEB-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F765-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "SMR", + "valueDescription": "Stereometric Relationship", + "ValueMeaning": { + "publicId": "2582152", + "version": "1", + "preferredName": "Stereometric Relationship", + "longName": "2582152v1.00", + "preferredDefinition": "Pairs of images that may be viewed together in stereo.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Stereometric Image Relationship", + "conceptCode": "C190610", + "definition": "Pairs of images that may be viewed together in stereo.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF5-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F766-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "SR", + "valueDescription": "SR Document", + "ValueMeaning": { + "publicId": "2582149", + "version": "1", + "preferredName": "SR Document", + "longName": "2582149v1.00", + "preferredDefinition": "A document type consisting of a document header and a document body.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Structured Report Document", + "conceptCode": "C190611", + "definition": "A document type consisting of a document header and a document body.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF2-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F767-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "ST", + "valueDescription": "Single-photon emission computed", + "ValueMeaning": { + "publicId": "2582127", + "version": "1", + "preferredName": "Single-photon emission computed", + "longName": "2582127v1.00", + "preferredDefinition": "A type of tomography in which gamma photon-emitting radionuclides are administered to the patient and then detected by one or more gamma cameras rotated around the patient. From the series of two-dimensional images produced, a three-dimensional image can be created by computer reconstruction.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Single Photon Emission Computed Tomography", + "conceptCode": "C17203", + "definition": "A type of tomography in which gamma photon-emitting radionuclides are administered to the patient and then detected by one or more gamma cameras rotated around the patient. From the series of two-dimensional images produced, a three-dimensional image can be created by computer reconstruction.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DDC-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F768-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "TG", + "valueDescription": "Thermography tomography", + "ValueMeaning": { + "publicId": "2582128", + "version": "1", + "preferredName": "Thermal Tomography", + "longName": "2582128v1.00", + "preferredDefinition": "Computed tomography that describes temperature details across a surface.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Thermal Tomography", + "conceptCode": "C190616", + "definition": "Computed tomography that describes temperature details across a surface.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DDD-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F769-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "BI", + "valueDescription": "Biomagnetic imaging", + "ValueMeaning": { + "publicId": "2582121", + "version": "1", + "preferredName": "Biomagnetic Imaging", + "longName": "2582121v1.00", + "preferredDefinition": "An imaging technique that use non-invasive measurements to map biologically-generated magnetic fields.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Biomagnetic Imaging", + "conceptCode": "C190517", + "definition": "An imaging technique that use non-invasive measurements to map biologically-generated magnetic fields.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DD6-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F76A-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "AS", + "valueDescription": "Angioscopy", + "ValueMeaning": { + "publicId": "2582158", + "version": "1", + "preferredName": "Angioscopy", + "longName": "2582158v1.00", + "preferredDefinition": "The use of an angioscope to view the interior of a blood vessel.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Angioscopy", + "conceptCode": "C190510", + "definition": "The use of an angioscope to view the interior of a blood vessel.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DFB-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F76B-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "AU", + "valueDescription": "Audio", + "ValueMeaning": { + "publicId": "2582145", + "version": "1", + "preferredName": "Audio", + "longName": "2582145v1.00", + "preferredDefinition": "The process of recording sound to a storage device.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Audio Acquisition", + "conceptCode": "C190513", + "definition": "The process of recording sound to a storage device.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DEE-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F76C-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "CD", + "valueDescription": "Color flow Doppler", + "ValueMeaning": { + "publicId": "2582122", + "version": "1", + "preferredName": "Color flow Doppler", + "longName": "2582122v1.00", + "preferredDefinition": "The use of pulsed ultrasound to visualize blood flow through blood vessels. Flow direction and speed are shown in differing colors.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Color Flow Doppler Ultrasound Imaging", + "conceptCode": "C190518", + "definition": "The use of pulsed ultrasound to visualize blood flow through blood vessels. Flow direction and speed are shown in differing colors.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DD7-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-03", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F76D-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "CF", + "valueDescription": "Cinefluorography (retired)", + "ValueMeaning": { + "publicId": "2582155", + "version": "1", + "preferredName": "Cinefluorography (retired)", + "longName": "2582155", + "preferredDefinition": "Cinefluorography (retired)", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RETIRED ARCHIVED", + "registrationStatus": "Retired", + "id": "2509CE88-0DF8-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": "2022-11-16", + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-16", + "changeDescription": null, + "administrativeNotes": "11/16/22 Retired per CRDC DSS. Per latest DICOM PS3.16 2022c, CF modality replaced by RF, DCM, Radiofluoroscopy. mr;", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F76E-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-16", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-17", + "deletedIndicator": "No" + }, + { + "value": "CP", + "valueDescription": "Culposcopy", + "ValueMeaning": { + "publicId": "2582160", + "version": "1", + "preferredName": "Culposcopy", + "longName": "2582160v1.00", + "preferredDefinition": "Endoscopic examination of the uterine cervix and vagina.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Colposcopy", + "conceptCode": "C16451", + "definition": "Endoscopic examination of the uterine cervix and vagina.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DFD-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-03", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F76F-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "CR", + "valueDescription": "Computed Radiography", + "ValueMeaning": { + "publicId": "2582119", + "version": "1", + "preferredName": "Computed Radiography", + "longName": "2582119v1.00", + "preferredDefinition": "X-ray imaging that replaces film with a phosphor imaging plate to create a digital image.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Computed Radiography", + "conceptCode": "C190521", + "definition": "X-ray imaging that replaces film with a phosphor imaging plate to create a digital image.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DD4-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F770-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "US", + "valueDescription": "Ultrasound: C17230", + "ValueMeaning": { + "publicId": "2580423", + "version": "1", + "preferredName": "Ultrasound", + "longName": "2580423", + "preferredDefinition": "A technique in which high-frequency sound waves are bounced off internal organs and the echo pattern is converted into a 2 dimensional picture of the structures beneath the transducer.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ultrasound Imaging", + "conceptCode": "C17230", + "definition": "The use of high-frequency sound waves to generate images of the body.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0734-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-10", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2006-08-02", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F771-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "VF", + "valueDescription": "Videofluorography (retired)", + "ValueMeaning": { + "publicId": "2582157", + "version": "1", + "preferredName": "Videofluorography (retired)", + "longName": "2582157", + "preferredDefinition": "Videofluorography (retired)", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RETIRED ARCHIVED", + "registrationStatus": "Retired", + "id": "2509CE88-0DFA-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": "2022-11-16", + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-16", + "changeDescription": null, + "administrativeNotes": "11/16/22 Retired per CRDC DSS. Per latest DICOM PS3.16 2022c, VF modality replaced by RF, DCM, Radiofluoroscopy. mr;", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F772-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "XA", + "valueDescription": "X-Ray Angiography", + "ValueMeaning": { + "publicId": "2582129", + "version": "1", + "preferredName": "X-Ray Angiography", + "longName": "2582129v1.00", + "preferredDefinition": "The X-ray examination of the blood vessels or chambers of the heart.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "X-ray Angiography", + "conceptCode": "C20080", + "definition": "Any nuclear medicine study that utilizes a radioactive tracer to image blood vessels or characterize blood flow.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DDE-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F773-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "XC", + "valueDescription": "External-camera Photography", + "ValueMeaning": { + "publicId": "2582143", + "version": "1", + "preferredName": "External-camera Photography", + "longName": "2582143v1.00", + "preferredDefinition": "Photographic image acquisition using a camera mounted externally from the subject.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "External-Camera Photography", + "conceptCode": "C190619", + "definition": "Photographic image acquisition using a camera mounted externally from the subject.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DEC-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F774-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "CS", + "valueDescription": "Cystoscopy", + "ValueMeaning": { + "publicId": "2569349", + "version": "1", + "preferredName": "Cystoscopy", + "longName": "2569349", + "preferredDefinition": "Endoscopic examination of the urinary bladder or urethra.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Cystoscopy", + "conceptCode": "C16482", + "definition": "Endoscopic examination of the urinary bladder or urethra.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-DBF2-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2004-04-21", + "endDate": null, + "createdBy": "DWARZEL", + "dateCreated": "2004-04-21", + "modifiedBy": "COOPERM", + "dateModified": "2019-04-23", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F775-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "CT", + "valueDescription": "COMPUTED TOMOGRAPHY", + "ValueMeaning": { + "publicId": "2575842", + "version": "1", + "preferredName": "COMPUTED TOMOGRAPHY", + "longName": "2575842", + "preferredDefinition": "A method of examining body organs by scanning them with X rays and using a computer to construct a series of cross-sectional scans along a single axis.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Computed Tomography", + "conceptCode": "C17204", + "definition": "A method of examining structures within the body by scanning them with X rays and using a computer to construct a series of cross-sectional scans along a single axis.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-F54F-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-07-29", + "endDate": null, + "createdBy": "PWEST", + "dateCreated": "2005-07-29", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F776-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "DD", + "valueDescription": "Duplex Doppler", + "ValueMeaning": { + "publicId": "2582123", + "version": "1", + "preferredName": "Duplex Doppler", + "longName": "2582123v1.00", + "preferredDefinition": "An ultrasound technique that uses a B-mode transducer to visualize blood flow and a Doppler probe to assess velocity and direction of the blood flow.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Duplex Ultrasound", + "conceptCode": "C190534", + "definition": "An ultrasound technique that uses a B-mode transducer to visualize blood flow and a Doppler probe to assess velocity and direction of the blood flow.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DD8-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F777-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "DF", + "valueDescription": "Digital fluoroscopy (retired)", + "ValueMeaning": { + "publicId": "2582156", + "version": "1", + "preferredName": "Digital fluoroscopy (retired)", + "longName": "2582156", + "preferredDefinition": "Digital fluoroscopy (retired)", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RETIRED ARCHIVED", + "registrationStatus": "Retired", + "id": "2509CE88-0DF9-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": "2022-11-16", + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": "11/16/22 Retired per CRDC DSS. Per latest DICOM PS3.16 2022c, DF modality replaced by replaced by RF, DCM, Radiofluoroscopy. mr", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F778-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "DG", + "valueDescription": "Diaphanography", + "ValueMeaning": { + "publicId": "2582124", + "version": "1", + "preferredName": "Diaphanography", + "longName": "2582124v1.00", + "preferredDefinition": "Examination of a body part by transillumination.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Diaphanography", + "conceptCode": "C18151", + "definition": "Examination of a body part by transillumination.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DD9-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F779-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "DM", + "valueDescription": "Digital microscopy", + "ValueMeaning": { + "publicId": "2582161", + "version": "1", + "preferredName": "Digital microscopy", + "longName": "2582161v1.00", + "preferredDefinition": "Microscopy that uses a digital camera instead of eyepieces. The microscope is connected to a computer monitor and images are obtained in real time.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Digital Microscopy", + "conceptCode": "C190537", + "definition": "Microscopy that uses a digital camera instead of eyepieces. The microscope is connected to a computer monitor and images are obtained in real time.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DFE-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F77A-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "DS", + "valueDescription": "Digital Subtraction Angiography (retired)", + "ValueMeaning": { + "publicId": "2582154", + "version": "1", + "preferredName": "Digital Subtraction Angiography (retired)", + "longName": "2582154", + "preferredDefinition": "Digital Subtraction Angiography (retired)", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RETIRED ARCHIVED", + "registrationStatus": "Retired", + "id": "2509CE88-0DF7-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": "2022-11-16", + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-16", + "changeDescription": null, + "administrativeNotes": "11/16/22 Retired per CRDC DSS. Per latest DICOM PS3.16 2022c, DS modality replaced by XA, DCM, X-Ray Angiography. mr", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F77B-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "DX", + "valueDescription": "Digital Radiography", + "ValueMeaning": { + "publicId": "2582137", + "version": "1", + "preferredName": "Digital Radiography", + "longName": "2582137v1.00", + "preferredDefinition": "Acquisition or display of radiographic images using digital techniques.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Digital Radiography", + "conceptCode": "C18001", + "definition": "Acquisition or display of radiographic images using digital techniques.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE6-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F77C-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "EC", + "valueDescription": "ECHOCARDIOGRAPHY", + "ValueMeaning": { + "publicId": "2566518", + "version": "1", + "preferredName": "ECHOCARDIOGRAPHY", + "longName": "2566518", + "preferredDefinition": "A procedure that uses ultrasonic waves directed over the chest wall to obtain a graphic record of the heart's position, motion of the walls, or internal parts such as the valves.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Echocardiography", + "conceptCode": "C16525", + "definition": "A procedure that uses high-frequency sound waves (ultrasound) to create an image of the heart.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D0E3-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-08-12", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2003-08-12", + "modifiedBy": "SBREXT", + "dateModified": "2007-11-07", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F77D-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "EPS", + "valueDescription": "Cardiac Electrophysiology", + "ValueMeaning": { + "publicId": "2582147", + "version": "1", + "preferredName": "Cardiac Electrophysiology", + "longName": "2582147v1.00", + "preferredDefinition": "A cardiac procedure performed under fluoroscopy to determine the area of the heart that is the source of aberrant electrical impulses that give rise to arrhythmias. Aberrant pathways can be terminated by ablation.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Cardiac Electrophysiology Study", + "conceptCode": "C80414", + "definition": "A cardiac procedure performed under fluoroscopy to determine the area of the heart that is the source of aberrant electrical impulses that give rise to arrhythmias. Aberrant pathways can be terminated by ablation.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF0-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F77F-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "ES", + "valueDescription": "Endoscopy", + "ValueMeaning": { + "publicId": "2558723", + "version": "1", + "preferredName": "Endoscopy", + "longName": "2558723", + "preferredDefinition": "(en-DAHS-ko-pee) The use of a thin, lighted tube (called an endoscope) to examine the inside of the body.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Endoscopic Procedure", + "conceptCode": "C16546", + "definition": "A diagnostic or therapeutic procedure in which an endoscope is inserted in a tubular organ to examine the structural architecture and/or remove abnormal tissues.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-B270-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2002-02-13", + "endDate": null, + "createdBy": "SBR", + "dateCreated": "2002-02-13", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F780-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "FA", + "valueDescription": "Fluorescein angiography", + "ValueMeaning": { + "publicId": "2582159", + "version": "1", + "preferredName": "Fluorescein angiography", + "longName": "2582159v1.00", + "preferredDefinition": "A diagnostic procedure that uses the fluorescence of fluorescein dye to examine the blood flow in the choroid and retina.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Fluorescein Angiography", + "conceptCode": "C190541", + "definition": "A diagnostic procedure that uses the fluorescence of fluorescein dye to examine the blood flow in the choroid and retina.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DFC-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F781-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "FS", + "valueDescription": "Fundoscopy", + "ValueMeaning": { + "publicId": "2582162", + "version": "1", + "preferredName": "Fundoscopy", + "longName": "2582162v1.00", + "preferredDefinition": "A technique used to examine of the back (fundus) and other anatomical structures of the eye with a magnifying instrument.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ophthalmoscopy", + "conceptCode": "C120698", + "definition": "A technique used to examine of the back (fundus) and other anatomical structures of the eye with a magnifying instrument.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DFF-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F782-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "GM", + "valueDescription": "General Microscopy", + "ValueMeaning": { + "publicId": "2582141", + "version": "1", + "preferredName": "General Microscopy", + "longName": "2582141v1.00", + "preferredDefinition": "The use of various technologies to resolve the structure or features of objects too small or fine to naturally be seen by eye.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Microscopy", + "conceptCode": "C16853", + "definition": "The use of various technologies to resolve the structure or features of objects too small or fine to naturally be seen by eye.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DEA-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F783-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "HC", + "valueDescription": "Hard copy", + "ValueMeaning": { + "publicId": "2565699", + "version": "1", + "preferredName": "Hard Copy", + "longName": "2565699v1.00", + "preferredDefinition": "A physical, printed version of information from a computer.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Hard Copy", + "conceptCode": "C190542", + "definition": "A physical, printed version of information from a computer.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-CDB0-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-02-26", + "endDate": null, + "createdBy": "MEDVEDOH", + "dateCreated": "2003-02-26", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F784-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "HD", + "valueDescription": "Hemodynamic Waveform", + "ValueMeaning": { + "publicId": "2582148", + "version": "1", + "preferredName": "Hemodynamic Waveform", + "longName": "2582148v1.00", + "preferredDefinition": "The analysis of hemodynamic pressure changes to obtain diagnostic information about the function of the right and left ventricles during systole and diastole.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Hemodynamic Waveform Analysis", + "conceptCode": "C190544", + "definition": "The analysis of hemodynamic pressure changes to obtain diagnostic information about the function of the right and left ventricles during systole and diastole.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF1-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F785-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "IO", + "valueDescription": "Intra-oral Radiography", + "ValueMeaning": { + "publicId": "2582139", + "version": "1", + "preferredName": "Intra-oral Radiography", + "longName": "2582139v1.00", + "preferredDefinition": "Radiography done within the oral cavity.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Intraoral Radiography", + "conceptCode": "C190548", + "definition": "Radiography done within the oral cavity.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE8-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F786-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "IVUS", + "valueDescription": "Intravascular Ultrasound", + "ValueMeaning": { + "publicId": "2582150", + "version": "1", + "preferredName": "Intravascular Ultrasound", + "longName": "2582150v1.00", + "preferredDefinition": "An invasive procedure in which sound waves (called ultrasound) are bounced off of vascular tissues from within the vessel and the echoes produce a picture (sonogram).", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Intravascular Ultrasound", + "conceptCode": "C99535", + "definition": "An invasive procedure in which sound waves (called ultrasound) are bounced off of vascular tissues from within the vessel and the echoes produce a picture (sonogram).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF3-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F787-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "KO", + "valueDescription": "Key Object Selection", + "ValueMeaning": { + "publicId": "2582153", + "version": "1", + "preferredName": "Key Object Selection", + "longName": "2582153v1.00", + "preferredDefinition": "Selection of a key image by the interpreting physician.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Key Object Selection", + "conceptCode": "C190552", + "definition": "Selection of a key image by the interpreting physician.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DF6-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F788-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "LP", + "valueDescription": "Laparoscopy", + "ValueMeaning": { + "publicId": "2559024", + "version": "1", + "preferredName": "Laparoscopy", + "longName": "2559024", + "preferredDefinition": "(lap-a-RAHS-ko-pee) The insertion of a thin, lighted tube (called a laparoscope) through the abdominal wall to inspect the inside of the abdomen and remove tissue samples.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Laparoscopy", + "conceptCode": "C16969", + "definition": "A surgical procedure during which a laparoscope is inserted into the abdomen to view the abdominopelvic contents for diagnostic and/or therapeutic purposes.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-B39D-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2002-02-13", + "endDate": null, + "createdBy": "SBR", + "dateCreated": "2002-02-13", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F789-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "LS", + "valueDescription": "Laser surface scan", + "ValueMeaning": { + "publicId": "2582125", + "version": "1", + "preferredName": "Laser surface scan", + "longName": "2582125v1.00", + "preferredDefinition": "A method for obtaining information about the surface morphology and topology of an object.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Laser Surface Scan", + "conceptCode": "C190554", + "definition": "A method for obtaining information about the surface morphology and topology of an object.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DDA-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F78A-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "MA", + "valueDescription": "Magnetic resonance angiography", + "ValueMeaning": { + "publicId": "2582163", + "version": "1", + "preferredName": "Magnetic resonance angiography", + "longName": "2582163v1.00", + "preferredDefinition": "An image of blood vessels constructed using magnetic resonance imaging.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Magnetic Resonance Angiography", + "conceptCode": "C190557", + "definition": "Angiography using magnetic resonance imaging.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0E00-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F78B-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": "2022-11-18", + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + }, + { + "value": "MG", + "valueDescription": "Mammography", + "ValueMeaning": { + "publicId": "2582138", + "version": "1", + "preferredName": "Mammography", + "longName": "2582138", + "preferredDefinition": "Imaging examination of the breast by means of x-rays.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Mammography", + "conceptCode": "C16818", + "definition": "A type of radiography used specifically to examine breast tissue. The procedure utilizes a low-dose of x-rays or radiation to generate an image. A mammography exam or mammogram, is used as a screening tool to detect early breast cancer in women experiencing no symptoms and to detect and diagnose breast disease.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DE7-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F78C-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "MR", + "valueDescription": "Magnetic Resonance", + "ValueMeaning": { + "publicId": "2582120", + "version": "1", + "preferredName": "Magnetic Resonance", + "longName": "2582120v1.00", + "preferredDefinition": "Imaging that uses radiofrequency waves and a strong magnetic field rather than x-rays to provide detailed pictures of internal organs and tissues. The technique is valuable for the diagnosis of many pathologic conditions, including cancer, heart and vascular disease, stroke, and joint and musculoskeletal disorders.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Magnetic Resonance Imaging", + "conceptCode": "C16809", + "definition": "Imaging that uses radiofrequency waves and a strong magnetic field rather than x-rays to provide detailed pictures of internal organs and tissues. The technique is valuable for the diagnosis of many pathologic conditions, including cancer, heart and vascular disease, stroke, and joint and musculoskeletal disorders.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE88-0DD5-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2006-11-22", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F78D-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "MS", + "valueDescription": "Magnetic Resonance Spectroscopy", + "ValueMeaning": { + "publicId": "2576333", + "version": "1", + "preferredName": "Magnetic Resonance Spectroscopy", + "longName": "2576333", + "preferredDefinition": "Magnetic Resonance Spectroscopy", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-F73A-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-09-23", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2005-09-23", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "id": "ED7178B3-F78E-7BE1-E053-731AD00AE54F", + "beginDate": "2006-11-22", + "endDate": null, + "createdBy": "CHILLIJ", + "dateCreated": "2022-11-14", + "modifiedBy": "ONEDATA", + "dateModified": "2022-11-14", + "deletedIndicator": "No" + }, + { + "value": "AR", + "valueDescription": null, + "ValueMeaning": { + "publicId": "7552086", + "version": "1", + "preferredName": "Autorefraction", + "longName": "7552086", + "preferredDefinition": "An eye examination method in which a computer-controlled electronic optometer is used to automatically measure refractive error.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Autorefraction", + "conceptCode": "C176330", + "definition": "An eye examination method in which a computer-controlled electronic optometer is used to automatically measure refractive error.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B96ABD26-AF7C-4165-E053-4EBD850AF5A4", + "latestVersionIndicator": "Yes", + "beginDate": "2021-01-21", + "endDate": null, + "createdBy": "KUMMEROA", + "dateCreated": "2021-01-21", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED8930A6-1525-672F-E053-731AD00A6842", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "ASMT", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057185", + "version": "1", + "preferredName": "Content Assessment Result", + "longName": "12057185v1.00", + "preferredDefinition": "The results of an assessment or the content of one or more standard operating procedures (SOP) instance(s).", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Content Assessment Result", + "conceptCode": "C190511", + "definition": "The results of an assessment or the content of one or more standard operating procedures (SOP) instance(s).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED893548-B6E8-67E3-E053-731AD00AA037", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED893548-B6E9-67E3-E053-731AD00AA037", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "BDUS", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057439", + "version": "1", + "preferredName": "Ultrasound Bone Densitometry", + "longName": "12057439v1.00", + "preferredDefinition": "The use of quantitative ultrasound for estimating bone mineral density status of the peripheral skeleton, usually done at the heel.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ultrasound Bone Densitometry", + "conceptCode": "C190516", + "definition": "The use of quantitative ultrasound for estimating bone mineral density status of the peripheral skeleton, usually done at the heel.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED894BF2-7C62-6B1F-E053-731AD00A492A", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED894BF2-7C63-6B1F-E053-731AD00A492A", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "BMD", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057440", + "version": "1", + "preferredName": "Bone Mineral Densitometry", + "longName": "12057440v1.00", + "preferredDefinition": "Any method used to measure bone mineral content and density.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Bone Mineral Densitometry", + "conceptCode": "C190514", + "definition": "Any method used to measure bone mineral content and density.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED894BF2-7C65-6B1F-E053-731AD00A492A", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED894BF2-7C66-6B1F-E053-731AD00A492A", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "CTPROTOCOL", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057441", + "version": "1", + "preferredName": "CT Protocol", + "longName": "12057441v1.00", + "preferredDefinition": "The rules and procedures for computed tomography acquisition.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "CT Protocol", + "conceptCode": "C190533", + "definition": "The rules and procedures for computed tomography acquisition.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED895135-E0E1-6BB4-E053-731AD00AE8F8", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED895135-E0E2-6BB4-E053-731AD00AE8F8", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "DMS", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057442", + "version": "1", + "preferredName": "Dermoscopy", + "longName": "12057442v1.00", + "preferredDefinition": "A noninvasive diagnostic procedure that allows for in vivo microscopic examination of the epidermis, the dermoepidermal junction, and the papillary dermis. This aids in the identification of specific diagnostic patterns related to color and cell structure to aid in differentiating malignant and benign lesions.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Dermoscopy", + "conceptCode": "C116478", + "definition": "A noninvasive diagnostic procedure that allows for in vivo microscopic examination of the epidermis, the dermoepidermal junction, and the papillary dermis. This aids in the identification of specific diagnostic patterns related to color and cell structure to aid in differentiating malignant and benign lesions.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED8954ED-3ED9-6C1E-E053-731AD00A59E4", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED8954ED-3EDA-6C1E-E053-731AD00A59E4", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "DOC", + "valueDescription": null, + "ValueMeaning": { + "publicId": "2929970", + "version": "1", + "preferredName": "Document", + "longName": "2929970", + "preferredDefinition": "An organized collection of records that describe a particular body of data.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Document", + "conceptCode": "C19498", + "definition": "A physical object, or electronic counterpart, that is characterized by containing writing which is meant to be human-readable.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "7086FFDE-E62D-E444-E040-BB89AD4324D1", + "latestVersionIndicator": "Yes", + "beginDate": "2009-08-07", + "endDate": null, + "createdBy": "UMLLOADER_ISO", + "dateCreated": "2009-08-07", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89585F-102F-6C80-E053-731AD00A8D72", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "EEG", + "valueDescription": null, + "ValueMeaning": { + "publicId": "6401745", + "version": "1", + "preferredName": "Electroencephalography", + "longName": "6401745", + "preferredDefinition": "The neurophysiologic exploration of the electrical activity of the brain by the application of electrodes to the scalp. The resulting traces are known as an electroencephalogram (EEG). This test is used to assess brain damage, epilepsy and other problems.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Electroencephalography", + "conceptCode": "C38054", + "definition": "The neurophysiologic exploration of the electrical activity of the brain by the application of electrodes to the scalp. The resulting traces are known as an electroencephalogram (EEG). This test is used to assess brain damage, epilepsy and other problems.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "73936271-E2DD-6349-E053-F662850AB2B2", + "latestVersionIndicator": "Yes", + "beginDate": "2018-08-16", + "endDate": null, + "createdBy": "SOKKERL", + "dateCreated": "2018-08-16", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89CDBD-35C2-7A68-E053-731AD00ACBDC", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "EMG", + "valueDescription": null, + "ValueMeaning": { + "publicId": "4821875", + "version": "1", + "preferredName": "Electromyography", + "longName": "4821875", + "preferredDefinition": "An assessment of skeletal muscle function and nerve control, obtained by recording and studying the intrinsic electrical properties of the muscles.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Electromyography", + "conceptCode": "C38056", + "definition": "An assessment of skeletal muscle function and nerve control, obtained by recording and studying the intrinsic electrical properties of the muscles.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "1592176B-2BA6-7175-E050-BB89AD430752", + "latestVersionIndicator": "Yes", + "beginDate": "2015-05-08", + "endDate": null, + "createdBy": "CAMPBELB", + "dateCreated": "2015-05-08", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89CDBD-35C3-7A68-E053-731AD00ACBDC", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "EOG", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057566", + "version": "1", + "preferredName": "Electrooculography", + "longName": "12057566v1.00", + "preferredDefinition": "An electrophysiologic test that measures the standing potential between the cornea and Bruch's membrane. Primary applications are in ophthalmological diagnosis and in recording eye movements.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Electrooculography", + "conceptCode": "C190539", + "definition": "An electrophysiologic test that measures the standing potential between the cornea and Bruch's membrane. Primary applications are in ophthalmological diagnosis and in recording eye movements.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89CDBD-35C1-7A68-E053-731AD00ACBDC", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89CDBD-35C4-7A68-E053-731AD00ACBDC", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "FID", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057567", + "version": "1", + "preferredName": "Fiducial Marker", + "longName": "12057567v1.00", + "preferredDefinition": "A medical device placed on or inserted in an anatomic site for accurate visualization of a particular area, prior to radiation treatment or surgery. Examples include markers inserted in the prostate gland for visualization of the site affected by cancer, prior to radiation therapy; markers taped to the scalp prior to imaging in frameless stereotactic brain surgery; and femoral and tibial pins used for spatial orientation in total knee replacement.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Fiducial Marker", + "conceptCode": "C82602", + "definition": "A medical device placed on or inserted in an anatomic site for accurate visualization of a particular area, prior to radiation treatment or surgery. Examples include markers inserted in the prostate gland for visualization of the site affected by cancer, prior to radiation therapy; markers taped to the scalp prior to imaging in frameless stereotactic brain surgery; and femoral and tibial pins used for spatial orientation in total knee replacement.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89D37A-944F-7B25-E053-731AD00A408E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89D37A-9451-7B25-E053-731AD00A408E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "IOL", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057568", + "version": "1", + "preferredName": "Intraocular Lens Power Calculation", + "longName": "12057568v1.00", + "preferredDefinition": "Calculations made to determine the required optical power for an intra-ocular lens that will be implanted following cataract surgery. Its strength is a factor of corneal refractive power, ocular media type, and axial length.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Intraocular Lens Power Calculation", + "conceptCode": "C190549", + "definition": "Calculations made to determine the required optical power for an intra-ocular lens that will be implanted following cataract surgery. Its strength is a factor of corneal refractive power, ocular media type, and axial length.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89D37A-9450-7B25-E053-731AD00A408E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89D37A-9452-7B25-E053-731AD00A408E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "IVOCT", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057569", + "version": "1", + "preferredName": "Intravascular Optical Coherence Tomography", + "longName": "12057569v1.00", + "preferredDefinition": "Optical coherence tomography used for imaging within blood vessels.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Intravascular Optical Coherence Tomography", + "conceptCode": "C190550", + "definition": "An optical coherence tomography imaging method that utilizes motion contrast imaging to capture the patterns of moving red blood cell reflectance across time and create high-resolution, 3D angiograms of vascular networks.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89D567-0039-7B63-E053-731AD00A631E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89D567-003C-7B63-E053-731AD00A631E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "KER", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057570", + "version": "1", + "preferredName": "Keratometry", + "longName": "12057570v1.00", + "preferredDefinition": "The measurement of the curvature of the anterior corneal surface.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Keratometry", + "conceptCode": "C190551", + "definition": "The measurement of the curvature of the anterior corneal surface.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89D567-003A-7B63-E053-731AD00A631E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89D567-003D-7B63-E053-731AD00A631E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "LEN", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057571", + "version": "1", + "preferredName": "Lensometry", + "longName": "12057571v1.00", + "preferredDefinition": "The use of a lensometer to determine the optical strength of eye glass lenses.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Lensometry", + "conceptCode": "C190553", + "definition": "The use of a lensometer to determine the optical strength of eye glass lenses.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89D567-003B-7B63-E053-731AD00A631E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89D567-003E-7B63-E053-731AD00A631E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "M3D", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057573", + "version": "1", + "preferredName": "Model for 3D Manufacturing", + "longName": "12057573v1.00", + "preferredDefinition": "A structural template used as the basis for manufacturing three dimensional objects.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Model for 3D Manufacturing", + "conceptCode": "C190555", + "definition": "A structural template used as the basis for manufacturing three dimensional objects.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89DE88-A5FA-7C69-E053-731AD00A5B4C", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89DE88-A5FB-7C69-E053-731AD00A5B4C", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OAM", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057574", + "version": "1", + "preferredName": "Ophthalmic Axial Measurement", + "longName": "12057574v1.00", + "preferredDefinition": "A method for determining the axial length of the eye.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ophthalmic Axial Measurement", + "conceptCode": "C190558", + "definition": "A method for determining the axial length of the eye.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89E71A-11F9-7D3C-E053-731AD00AAF4E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89E71A-11FD-7D3C-E053-731AD00AAF4E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OCT", + "valueDescription": null, + "ValueMeaning": { + "publicId": "6413980", + "version": "1", + "preferredName": "Optical Coherence Tomography", + "longName": "6413980", + "preferredDefinition": "Optical Coherence Tomography (OCT) combines the principles of ultrasound with the imaging performance of a microscope. OCT uses infrared light waves that reflect off the internal microstructure within the biological tissues. The frequencies and bandwidths of infrared light are orders of magnitude higher than medical ultrasound signals, resulting in greatly increased image resolution, 8-25 times greater than any existing modality. In addition to providing high-level resolutions for the evaluation of microanatomic structures OCT is also able to provide information regarding tissue composition.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Optical Coherence Tomography", + "conceptCode": "C20828", + "definition": "Optical Coherence Tomography (OCT) combines the principles of ultrasound with the imaging performance of a microscope. OCT uses infrared light waves that reflect off the internal microstructure within the biological tissues. The frequencies and bandwidths of infrared light are orders of magnitude higher than medical ultrasound signals, resulting in greatly increased image resolution, 8-25 times greater than any existing modality. In addition to providing high-level resolutions for the evaluation of microanatomic structures OCT is also able to provide information regarding tissue composition.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "746CA782-AE1E-4A74-E053-F662850AFB24", + "latestVersionIndicator": "Yes", + "beginDate": "2018-08-27", + "endDate": null, + "createdBy": "SOKKERL", + "dateCreated": "2018-08-27", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89E71A-11FE-7D3C-E053-731AD00AAF4E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OPM", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057575", + "version": "1", + "preferredName": "Ophthalmic Mapping", + "longName": "12057575v1.00", + "preferredDefinition": "Methods for determining the topography or thickness of parts of the eye.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ophthalmic Mapping", + "conceptCode": "C190560", + "definition": "Methods for determining the topography or thickness of parts of the eye.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89E71A-11FA-7D3C-E053-731AD00AAF4E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89E71A-11FF-7D3C-E053-731AD00AAF4E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OPT", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057576", + "version": "1", + "preferredName": "Ophthalmic Tomography", + "longName": "12057576v1.00", + "preferredDefinition": "The use of optical coherence tomography to obtain images of the eye.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ophthalmic Tomography", + "conceptCode": "C190561", + "definition": "The use of optical coherence tomography to obtain images of the eye.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89E71A-11FB-7D3C-E053-731AD00AAF4E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89E71A-1200-7D3C-E053-731AD00AAF4E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OPTBSV", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057577", + "version": "1", + "preferredName": "Ophthalmic Tomography B-Scan Volume Analysis", + "longName": "12057577v1.00", + "preferredDefinition": "An assessment of ocular anatomy as well as any lesions that may be present within the eye that utilizes optical coherence tomography at frequencies of 10 MHz or higher.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ophthalmic Tomography B-Scan Volume Analysis", + "conceptCode": "C190562", + "definition": "An assessment of ocular anatomy as well as any lesions that may be present within the eye that utilizes optical coherence tomography at frequencies of 10 MHz or higher.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89E71A-11FC-7D3C-E053-731AD00AAF4E", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89E71A-1201-7D3C-E053-731AD00AAF4E", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OPTENF", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057578", + "version": "1", + "preferredName": "En-face Optical Coherence Tomography", + "longName": "12057578v1.00", + "preferredDefinition": "An imaging technique that combines spectral-domain optical coherence tomography with transverse confocal analysis, producing transverse images of retinal and choroidal layers at a specified depth.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "En-face Optical Coherence Tomography", + "conceptCode": "C190563", + "definition": "An imaging technique that combines spectral-domain optical coherence tomography with transverse confocal analysis, producing transverse images of retinal and choroidal layers at a specified depth.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89F147-A280-7E36-E053-731AD00A1D08", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F147-A283-7E36-E053-731AD00A1D08", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OPV", + "valueDescription": null, + "ValueMeaning": { + "publicId": "7463355", + "version": "1", + "preferredName": "Static Perimetry", + "longName": "7463355", + "preferredDefinition": "An eye examination technique that utilizes test objects with gradually increasing luminance that are positioned at fixed locations across the visual field to determine the threshold of visibility.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Static Perimetry", + "conceptCode": "C174334", + "definition": "An eye examination technique that utilizes test objects with gradually increasing luminance that are positioned at fixed locations across the visual field to determine the threshold of visibility.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B17B721B-48F9-1DC6-E053-4EBD850ACD09", + "latestVersionIndicator": "Yes", + "beginDate": "2020-10-12", + "endDate": null, + "createdBy": "KUMMEROA", + "dateCreated": "2020-10-12", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F147-A284-7E36-E053-731AD00A1D08", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "OSS", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057579", + "version": "1", + "preferredName": "Optical Surface Scanner", + "longName": "12057579v1.00", + "preferredDefinition": "A device designed for continuous and touchless optical surface scanning of a patient's external surfaces for accurate patient positioning.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Optical Surface Scanner", + "conceptCode": "C190564", + "definition": "A device designed for continuous and touchless optical surface scanning of a patient's external surfaces for accurate patient positioning.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89F147-A281-7E36-E053-731AD00A1D08", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F147-A285-7E36-E053-731AD00A1D08", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "PLAN", + "valueDescription": null, + "ValueMeaning": { + "publicId": "2571012", + "version": "1", + "preferredName": "Planned", + "longName": "2571012", + "preferredDefinition": "Planned; devised, contrived, or formed in design.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Plan", + "conceptCode": "C25619", + "definition": "To devise, contrive, or form in design.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-E271-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2004-07-07", + "endDate": null, + "createdBy": "CAMPBELB", + "dateCreated": "2004-07-07", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F147-A286-7E36-E053-731AD00A1D08", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "POS", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057580", + "version": "1", + "preferredName": "Body Position Sensor", + "longName": "12057580v1.00", + "preferredDefinition": "A sensor designed to measure the location or orientation of a person as compared to a reference point.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Body Position Sensor", + "conceptCode": "C190586", + "definition": "A sensor designed to measure the location or orientation of a person as compared to a reference point.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89F147-A282-7E36-E053-731AD00A1D08", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F147-A287-7E36-E053-731AD00A1D08", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "REG", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057582", + "version": "1", + "preferredName": "Image Registration", + "longName": "12057582v1.00", + "preferredDefinition": "The process of transforming sets of image data from different times or perspectives into one coordinate system.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Image Registration", + "conceptCode": "C80145", + "definition": "The process of transforming sets of image data from different times or perspectives into one coordinate system.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89F74F-0CF4-7F37-E053-731AD00A14E1", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F74F-0CF6-7F37-E053-731AD00A14E1", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "RESP", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057587", + "version": "1", + "preferredName": "Respiratory Waveform", + "longName": "12057587v1.00", + "preferredDefinition": "A graphical representation of the breathing pattern in a patient.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Respiratory Waveform", + "conceptCode": "C190589", + "definition": "A graphical representation of the breathing pattern in a patient.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89F74F-0CF5-7F37-E053-731AD00A14E1", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89F74F-0CF7-7F37-E053-731AD00A14E1", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "RWV", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057589", + "version": "1", + "preferredName": "Real World Value Mapping", + "longName": "12057589v1.00", + "preferredDefinition": "The representation of the stored pixel values of referenced images into some Real World value in defined units. This allows the capture of retrospectively determined mappings, e.g., for values that cannot be determined at the time of image acquisition and encoding.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Real World Value Mapping", + "conceptCode": "C190606", + "definition": "The representation of the stored pixel values of referenced images into some Real World value in defined units. This allows the capture of retrospectively determined mappings, e.g., for values that cannot be determined at the time of image acquisition and encoding.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED89FBD5-9E3F-7FB4-E053-731AD00A7205", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89FBD5-9E40-7FB4-E053-731AD00A7205", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "SEG", + "valueDescription": null, + "ValueMeaning": { + "publicId": "2985472", + "version": "1", + "preferredName": "Image Segmentation", + "longName": "2985472", + "preferredDefinition": "The process of assigning a label to every pixel in an image such that pixels with the same label share certain visual characteristics, allowing the image to be partitioned into multiple segments (e.g., boundaries, lines, curves).", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Image Segmentation", + "conceptCode": "C80146", + "definition": "The process of assigning a label to every pixel in an image such that pixels with the same label share certain visual characteristics, allowing the image to be partitioned into multiple segments (e.g., boundaries, lines, curves).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "7CFE0F68-3B97-23B0-E040-BB89AD4369AA", + "latestVersionIndicator": "Yes", + "beginDate": "2010-01-12", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2010-01-12", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED89FBD5-9E41-7FB4-E053-731AD00A7205", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "SRF", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057623", + "version": "1", + "preferredName": "Subjective Refraction", + "longName": "12057623v1.00", + "preferredDefinition": "A technique of determining the combination of spherical and cylindrical lenses that will result in the best-corrected visual acuity. The process involves the patient fixating at the Snellen Chart, while the clinician presents a variety of lenses and alters the power of the lenses in the trial frames according to the patient's subjective responses regarding improvements to their vision.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Subjective Refraction", + "conceptCode": "C190612", + "definition": "A technique of determining the combination of spherical and cylindrical lenses that will result in the best-corrected visual acuity. The process involves the patient fixating at the Snellen Chart, while the clinician presents a variety of lenses and alters the power of the lenses in the trial frames according to the patient's subjective responses regarding improvements to their vision.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED8A04FB-8869-01FA-E053-731AD00A1BBE", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED8A04FB-886C-01FA-E053-731AD00A1BBE", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "STAIN", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057624", + "version": "1", + "preferredName": "Automated Slide Stainer", + "longName": "12057624v1.00", + "preferredDefinition": "An instrument designed to automate the process of staining specimens affixed to slides.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Automated Slide Stainer", + "conceptCode": "C190614", + "definition": "An instrument designed to automate the process of staining specimens affixed to slides.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED8A04FB-886A-01FA-E053-731AD00A1BBE", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED8A04FB-886D-01FA-E053-731AD00A1BBE", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "TEXTUREMAP", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057625", + "version": "1", + "preferredName": "Texture Map", + "longName": "12057625v1.00", + "preferredDefinition": "A two-dimensional image file that stores information describing surface texture details across a specimen or image.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Texture Map", + "conceptCode": "C190615", + "definition": "A two-dimensional image file that stores information describing surface texture details across a specimen or image.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED8A04FB-886B-01FA-E053-731AD00A1BBE", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED8A04FB-886E-01FA-E053-731AD00A1BBE", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "VA", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12057626", + "version": "1", + "preferredName": "Visual Acuity", + "longName": "12057626v1.00", + "preferredDefinition": "Sharpness of vision, the ability to discern fine detail.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Visual Acuity", + "conceptCode": "C87149", + "definition": "Sharpness of vision, the ability to discern fine detail.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED8A0902-393A-026A-E053-731AD00AFCE8", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-21", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED8A0902-393B-026A-E053-731AD00AFCE8", + "beginDate": "2022-11-15", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-15", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-15", + "deletedIndicator": "No" + }, + { + "value": "ECG", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12060150", + "version": "1", + "preferredName": "Electrocardiography", + "longName": "12060150v1.00", + "preferredDefinition": "A procedure that displays the electrical activity of the heart.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Electrocardiography", + "conceptCode": "C38053", + "definition": "A procedure that displays the electrical activity of the heart.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED98AEC0-5951-1E43-E053-731AD00A896F", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-16", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-16", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-16", + "changeDescription": null, + "administrativeNotes": "11/16/22 Created duplicate VM for ECG modality because existing VM 2582146 did not have concept code and was reused by other SOs. mr", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "ED98AEC0-5952-1E43-E053-731AD00A896F", + "beginDate": "2022-11-16", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-16", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-16", + "deletedIndicator": "No" + }, + { + "value": "NM", + "valueDescription": null, + "ValueMeaning": { + "publicId": "12103506", + "version": "1", + "preferredName": "Radionuclide Imaging", + "longName": "12103506v1.00", + "preferredDefinition": "An imaging technique that uses a small dose of a radioactive chemical (isotope) called a tracer that can detect sites of cancer growth, trauma, infection or degenerative disorders. The tracer, which is either injected into a vein or swallowed, travels through the bloodstream to the target organ, and emits gamma rays, which are detected by a gamma camera and analyzed by a computer to form an image of the target organ.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Radionuclide Imaging", + "conceptCode": "C62667", + "definition": "An imaging technique that uses a small dose of a radioactive chemical (isotope) called a tracer that can detect sites of cancer growth, trauma, infection or degenerative disorders. The tracer, which is either injected into a vein or swallowed, travels through the bloodstream to the target organ, and emits gamma rays, which are detected by a gamma camera and analyzed by a computer to form an image of the target organ.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "EDC5A879-760C-01D4-E053-731AD00A2F93", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-18", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-18", + "modifiedBy": "COLBERTM", + "dateModified": "2022-12-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "EDC5A879-760D-01D4-E053-731AD00A2F93", + "beginDate": "2022-11-18", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-18", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-18", + "deletedIndicator": "No" + } + ], + "ConceptualDomain": { + "publicId": "2233241", + "version": "1", + "preferredName": "Medical Imaging", + "preferredDefinition": "Events, people, materials and activities uniquely defined by medical imaging. ", + "longName": "MEDICAL IMAGING", + "context": "CIP", + "contextVersion": "2.31", + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "F96173D7-A9B4-3CBB-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-06-12", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2005-06-12", + "modifiedBy": "SBREXT", + "dateModified": "2006-09-13", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "RepresentationTerm": { + "publicId": "12051861", + "version": "1", + "preferredName": "DICOM Modality Type", + "preferredDefinition": "A comprehensive set of standards for communications between medical imaging devices, including handling, storing and transmitting information in medical imaging. It includes a file format definition and a network communication protocol._A specific manner, characteristic, pattern of application or the employment of, any therapeutic agent or method of treatment, especially involving the physical treatment of a condition._Something distinguishable as an identifiable class based on common qualities.", + "longName": "12051861v1.00", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "DICOM", + "conceptCode": "C49059", + "definition": "A comprehensive set of standards for communications between medical imaging devices, including handling, storing and transmitting information in medical imaging. It includes a file format definition and a network communication protocol.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "2" + }, + { + "longName": "Modality", + "conceptCode": "C41147", + "definition": "A specific manner, characteristic, pattern of application or the employment of, any therapeutic agent or method of treatment, especially involving the physical treatment of a condition.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "1" + }, + { + "longName": "Type", + "conceptCode": "C25284", + "definition": "Something distinguishable as an identifiable class based on common qualities.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "ED719FD6-9059-0167-E053-731AD00A6C57", + "latestVersionIndicator": "Yes", + "beginDate": "2022-11-14", + "endDate": null, + "createdBy": "COLBERTM", + "dateCreated": "2022-11-14", + "modifiedBy": "COLBERTM", + "dateModified": "2022-11-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "workflowStatus": "RELEASED", + "registrationStatus": "Standard", + "id": "ED7178BA-DE34-7BC9-E053-731AD00A09CF", + "latestVersionIndicator": "Yes", + "beginDate": "2009-06-01", + "endDate": "2022-11-14", + "createdBy": "COLBERTM", + "dateCreated": "2022-11-14", + "modifiedBy": "JKNABLE", + "dateModified": "2023-02-06", + "changeDescription": "10/6/10 released as part of content cleanup; definitions for VM still under review by IVI SMEs. 6/10/09 change status to draft mod as IVI SMEs provide definitions for value meanings. 6/1/09 new VD to change rep term from code to type per VCDE small group recommendation; kept as draft new during review to allow updates to modality type definitions. 10/9/08 - released post NCIA Interim Rpt Changes - enumerated values still need defintions from IVI WS SMEs. 9/17/07 VD versioned to support DICOM task utilizing IE & DICOM Attribute terms. Needed for NCIA model load.", + "administrativeNotes": "2/6/23 released/standard per Smita/DSS. jk; 11/14/22 Revised to major version 2.0 instead of minor 1.1 due to semantic change for qualifier terms. mr; \r\n11/3/22 Created v1.1 for CRDC CDS to update VM concepts. mr", + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ClassificationSchemes": [ + { + "publicId": "10466051", + "version": "1", + "longName": "All CRDC Standard Data Elements", + "context": "CRDC", + "ClassificationSchemeItems": [ + { + "publicId": "14216931", + "version": "1", + "longName": "Imaging", + "context": "CRDC" + } + ] + }, + { + "publicId": "11518160", + "version": "1", + "longName": "CTDC (Clinical Trial Data Commons)", + "context": "CRDC", + "ClassificationSchemeItems": [ + { + "publicId": "14413707", + "version": "1", + "longName": "CTDC Model", + "context": "CRDC" + }, + { + "publicId": "14413709", + "version": "1", + "longName": "Study", + "context": "CRDC" + } + ] + }, + { + "publicId": "12173174", + "version": "1", + "longName": "PCDC Aggregated Dictionary", + "context": "Pediatric Cancer", + "ClassificationSchemeItems": [ + { + "publicId": "12173177", + "version": "1", + "longName": "Testing", + "context": "Pediatric Cancer" + }, + { + "publicId": "12173193", + "version": "1", + "longName": "Imaging", + "context": "Pediatric Cancer" + } + ] + }, + { + "publicId": "13574489", + "version": "1", + "longName": "Childhood Cancer Data Initiative", + "context": "Pediatric Cancer", + "ClassificationSchemeItems": [ + { + "publicId": "13594093", + "version": "1", + "longName": "Sample", + "context": "Pediatric Cancer" + }, + { + "publicId": "13596238", + "version": "1", + "longName": "Radiology File", + "context": "Pediatric Cancer" + } + ] + }, + { + "publicId": "13954630", + "version": "1", + "longName": "All Pediatric Core CDEs", + "context": "Pediatric Cancer", + "ClassificationSchemeItems": [ + { + "publicId": "14599260", + "version": "1", + "longName": "Imaging", + "context": "Pediatric Cancer" + } + ] + }, + { + "publicId": "8064110", + "version": "1", + "longName": "CDS (Cancer Data Service)", + "context": "CRDC", + "ClassificationSchemeItems": [ + { + "publicId": "14470388", + "version": "1", + "longName": "Imaging", + "context": "CRDC" + } + ] + } + ], + "AlternateNames": [ + { + "name": "(0008,0060)", + "type": "DICOM_TAG", + "context": "NCIP" + }, + { + "name": "Modality", + "type": "DICOM Attribute Name", + "context": "NCIP" + }, + { + "name": "DICOM Modality Type", + "type": "CRDC Alt Name", + "context": "CRDC" + }, + { + "name": "IMAGING_METHOD", + "type": "PCDC Alt Name", + "context": "Pediatric Cancer" + }, + { + "name": "image_modality", + "type": "CCDI Alt Name", + "context": "Pediatric Cancer" + }, + { + "name": "performed_imaging_study_nonAcquisitionModalitiesInStudyCode", + "type": "CDS Alt Name", + "context": "CRDC" + }, + { + "name": "Imaging Modality", + "type": "Ped Cancer Alt Name", + "context": "Pediatric Cancer" + }, + { + "name": "image_type_included", + "type": "CTDC Alt Name", + "context": "CRDC" + }, + { + "name": "image_modality", + "type": "CDS Alt Name", + "context": "CRDC" + } + ], + "ReferenceDocuments": [ + { + "name": "PQT", + "type": "Preferred Question Text", + "description": "Imaging Modality", + "url": null, + "context": "NCIP" + }, + { + "name": "DICOM CID 32", + "type": "REFERENCE", + "description": "DICOM CID 32 Non-Acquisition Modalities", + "url": "https://dicom.nema.org/medical/dicom/current/output/chtml/part16/sect_CID_32.html", + "context": "NCIP" + }, + { + "name": "DICOM CID 29", + "type": "REFERENCE", + "description": "DICOM CID 29 Acquisition Modalities", + "url": "https://dicom.nema.org/medical/dicom/current/output/chtml/part16/sect_CID_29.html", + "context": "NCIP" + }, + { + "name": "CRDC Instruction", + "type": "Coding Instructions", + "description": "Retired PVs are provided for historical data sets and should not be used in new data collections.", + "url": null, + "context": "CRDC" + }, + { + "name": "DICOM CID 32", + "type": "COMMENT", + "description": "DICOM CID 32 Non-Acquisition Modalities: Codes that may be used to identify the type of equipment, or function or technique of that equipment, that created the data used to create an instance, other than by means of acquisition through interaction with a patient or specimen.", + "url": null, + "context": "NCIP" + }, + { + "name": "DICOM CID 29", + "type": "COMMENT", + "description": "DICOM CID 29 Acquisition Modalities: Codes that may be used to identify the type of diagnostic equipment, or function or technique of that equipment, that originally acquired, through interaction with a patient or specimen, the data used to create the instance.", + "url": null, + "context": "NCIP" + }, + { + "name": "CCDI Example", + "type": "EXAMPLE", + "description": "CT, MRI, PET", + "url": null, + "context": "Pediatric Cancer" + }, + { + "name": "Ped Core", + "type": "EXAMPLE", + "description": "CT, MRI, PET", + "url": null, + "context": "Pediatric Cancer" + }, + { + "name": "CTDC Coding Instructions", + "type": "Coding Instructions", + "description": "Displayed as: Image Types", + "url": null, + "context": "CRDC" + } + ], + "origin": "DICOM:Digital Imaging and Communications in Medicine", + "workflowStatus": "RELEASED", + "registrationStatus": "Standard", + "id": "EFB994FC-5694-259E-E053-731AD00A7203", + "latestVersionIndicator": "Yes", + "beginDate": "2022-12-13", + "endDate": null, + "createdBy": "JKNABLE", + "dateCreated": "2022-12-13", + "modifiedBy": "FINCHAMB", + "dateModified": "2024-02-05", + "changeDescription": "9/28/09 - typo in definition. 9/3/09 per VCDE direction, CDE given \"Standard\" status and moved to Data Standards folder. 8/5/09 updated short name. 6/18/09 added DICOM alt defs and names. 6/10/09 released with \"draft mod\" VD to allow update of value meaning descriptions by IVI SMEs during caBIG review. 6/1/09 created new CDE - new VD to change rep term from code to type per VCDE small group recommendation. VD kept draft new to permit addition of value definition by IVI workspace. 4/30/09 created to add \"image\" as an OC qualifier as part of the VCDE small group recommedation for the Equipment CDE set.", + "administrativeNotes": "2/5/24 Added CDS Alt name and def. BF;1/1/24 Added CDS alt Def to match CDS imaging XLS. jk; 12/26/23 Added CCDI Example reference document. jk; 7/20/23 Added PCDC alt def. mr; 4/6/23 Added PCDC parent CSI. mr; 2/6/23 released/standard per Smita/DSS. jk 12/13/22 Created for CRDC DSS data element; VD versioned to support current DICOM Acquisition and Non-Acquisition Modalities permissible values set; retired via end date values included for older data sets but not in current DICOM PV sets. jk", + "unresolvedIssues": null, + "deletedIndicator": "No" + } +} diff --git a/tests/resources/cadsr-cde-2179609.json b/tests/resources/cadsr-cde-2179609.json new file mode 100644 index 0000000..4141282 --- /dev/null +++ b/tests/resources/cadsr-cde-2179609.json @@ -0,0 +1,1300 @@ +{ + "DataElement": { + "publicId": "2179609", + "version": "4", + "preferredName": "Adverse Event Attribution Code", + "preferredDefinition": "The code that indicates whether the adverse event is related to the agent or device.", + "longName": "AE_ATTR_CD", + "context": "DCP", + "contextVersion": "1", + "DataElementConcept": { + "publicId": "2014018", + "version": "1", + "preferredName": "Adverse Event Attribution", + "preferredDefinition": "the causal relationship between the treatment modality and the specific adverse event.", + "longName": "AE_ATTR", + "context": "CTEP", + "contextVersion": "2.31", + "ObjectClass": { + "publicId": "2184272", + "version": "1", + "preferredName": "Adverse Event", + "preferredDefinition": "An unwanted effect caused by a drug or therapy. Such effects can be drug related, dose related, route related, patient related, caused by an interaction with another drug, or caused by opioid initiation or dose escalation.", + "longName": "Adverse Event", + "context": "CTEP", + "contextVersion": "2.31", + "Concepts": [ + { + "longName": "Adverse Event", + "conceptCode": "C41331", + "definition": "Any unfavorable or unintended disease, sign, or symptom (including an abnormal laboratory finding) that is temporally associated with the use of a medical treatment or procedure, and that may or may not be considered related to the medical treatment or procedure. Such events can be related to the intervention, dose, route of administration, patient, or caused by an interaction with another drug(s) or procedure(s).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "DB6C8AC6-194E-3E75-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2004-05-27", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2004-05-27", + "modifiedBy": "SBR", + "dateModified": "2005-04-06", + "changeDescription": "Change concept code to C41331 as C2861 is retired per EVS. dw", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "Property": { + "publicId": "2177640", + "version": "1", + "preferredName": "Attribution", + "preferredDefinition": "Attribution; assigning to a cause or source.", + "longName": "Attribution", + "context": "CTEP", + "contextVersion": "2.31", + "Concepts": [ + { + "longName": "Attribution", + "conceptCode": "C25358", + "definition": "To assign to a cause or source.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AE29A78C-5187-3A05-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-10-29", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2002-10-29", + "modifiedBy": "SBR", + "dateModified": "2005-04-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ConceptualDomain": { + "publicId": "2008517", + "version": "1", + "preferredName": "Adverse Events", + "preferredDefinition": "any unfavorable symptoms, signs, or disease temporally associated with the use of a medical\r\ntreatment or procedure that may or may not be considered related to the medical\r\ntreatment or procedure.", + "longName": "AE", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AB51E03C-635E-5672-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-09-23", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-09-23", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": "Definition copied from CTC Manual.", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B3095570-3435-0C8C-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-12-30", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-12-30", + "modifiedBy": "SBR", + "dateModified": "2016-06-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ValueDomain": { + "publicId": "2179504", + "version": "3", + "preferredName": "Adverse Event Attribution Code", + "preferredDefinition": "All codes that indicate whether the adverse event is related to the agent or device.", + "longName": "AE_ATTRIBUTION_CD", + "context": "DCP", + "contextVersion": "1", + "type": "Enumerated", + "dataType": "CHARACTER", + "minLength": "1", + "maxLength": "1", + "minValue": null, + "maxValue": null, + "decimalPlace": null, + "PermissibleValues": [ + { + "value": "1", + "valueDescription": "Unrelated", + "ValueMeaning": { + "publicId": "2567629", + "version": "1", + "preferredName": "Unrelated", + "longName": "2567629", + "preferredDefinition": "A characteristic used to qualify the adverse event as clearly not related to the medical intervention.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Unrelated to Intervention", + "conceptCode": "C53256", + "definition": "A characteristic used to qualify the adverse event as clearly not related to the medical intervention.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53A-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "HARTLEYG", + "dateModified": "2016-12-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43A6AC55-8A55-35F2-E053-F662850A6D23", + "beginDate": "2004-01-05", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "ONEDATA", + "dateModified": "2016-12-14", + "deletedIndicator": "No" + }, + { + "value": "2", + "valueDescription": "Unlikely", + "ValueMeaning": { + "publicId": "2567630", + "version": "1", + "preferredName": "Unlikely", + "longName": "2567630", + "preferredDefinition": "A characteristic used to qualify the adverse event as unlikely related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a temporal relationship to the medical intervention which makes a causal relationship improbable, and in which other interventions or underlying disease provide plausible explanations.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Unlikely Related to Intervention", + "conceptCode": "C53257", + "definition": "A characteristic used to qualify the adverse event as unlikely related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a temporal relationship to the medical intervention which makes a causal relationship improbable, and in which other interventions or underlying disease provide plausible explanations.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53B-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "MMADDINENI", + "dateModified": "2023-12-12", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43A6AC55-8A5F-35F2-E053-F662850A6D23", + "beginDate": "2002-09-09", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "ONEDATA", + "dateModified": "2016-12-14", + "deletedIndicator": "No" + }, + { + "value": "3", + "valueDescription": "Possible", + "ValueMeaning": { + "publicId": "2567631", + "version": "1", + "preferredName": "Possible", + "longName": "2567631", + "preferredDefinition": "A characteristic indicating that an adverse event may be related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a reasonable time sequence to administration of the drug, but which could also be explained by concurrent disease or other drugs or chemicals. Information on drug withdrawal may be lacking or unclear.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Possibly Related to Intervention", + "conceptCode": "C53258", + "definition": "A characteristic indicating that an adverse event may be related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a reasonable time sequence to administration of the drug, but which could also be explained by concurrent disease or other drugs or chemicals. Information on drug withdrawal may be lacking or unclear.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53C-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "HARTLEYG", + "dateModified": "2016-12-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43A6AC55-8A69-35F2-E053-F662850A6D23", + "beginDate": "2002-09-09", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "ONEDATA", + "dateModified": "2016-12-14", + "deletedIndicator": "No" + }, + { + "value": "4", + "valueDescription": "Probable", + "ValueMeaning": { + "publicId": "2567632", + "version": "1", + "preferredName": "Probable", + "longName": "2567632", + "preferredDefinition": "A characteristic used to qualify the adverse event as likely related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a reasonable time sequence to the medical intervention, unlikely to be attributed to concurrent disease or other medical interventions, and which follows a clinically reasonable response on withdrawal (dechallenge). Rechallenge information is not required to fulfill this definition.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Probably Related to Intervention", + "conceptCode": "C53259", + "definition": "A characteristic used to qualify the adverse event as likely related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a reasonable time sequence to the medical intervention, unlikely to be attributed to concurrent disease or other medical interventions, and which follows a clinically reasonable response on withdrawal (dechallenge). Rechallenge information is not required to fulfill this definition.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53D-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "HARTLEYG", + "dateModified": "2016-12-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43A6AC55-8A73-35F2-E053-F662850A6D23", + "beginDate": "2002-09-09", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "ONEDATA", + "dateModified": "2016-12-14", + "deletedIndicator": "No" + }, + { + "value": "5", + "valueDescription": "Definite", + "ValueMeaning": { + "publicId": "2567633", + "version": "1", + "preferredName": "Definite", + "longName": "2567633", + "preferredDefinition": "A characteristic used to qualify the adverse event as certainly related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, occurring in a plausible time relationship to medical intervention, and which cannot be explained by concurrent disease or other interventions. The response to withdrawal of the medical product (dechallenge) should be clinically plausible. The event must be definitive pharmacologically or phenomenologically, using a satisfactory rechallenge procedure if necessary.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Definitely Related to Intervention", + "conceptCode": "C53260", + "definition": "A characteristic used to qualify the adverse event as certainly related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, occurring in a plausible time relationship to medical intervention, and which cannot be explained by concurrent disease or other interventions. The response to withdrawal of the medical product (dechallenge) should be clinically plausible. The event must be definitive pharmacologically or phenomenologically, using a satisfactory rechallenge procedure if necessary.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53E-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "HARTLEYG", + "dateModified": "2016-12-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43A6AC55-8A7D-35F2-E053-F662850A6D23", + "beginDate": "2002-09-09", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "ONEDATA", + "dateModified": "2016-12-14", + "deletedIndicator": "No" + }, + { + "value": "6", + "valueDescription": "Unknown", + "ValueMeaning": { + "publicId": "2565695", + "version": "1", + "preferredName": "Unknown", + "longName": "2565695", + "preferredDefinition": "Not known, not observed, not recorded, or refused.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Unknown", + "conceptCode": "C17998", + "definition": "Not known, observed, recorded; or reported as unknown by the data contributor.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-CDAC-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-02-26", + "endDate": null, + "createdBy": "MEDVEDOH", + "dateCreated": "2003-02-26", + "modifiedBy": "MMADDINENI", + "dateModified": "2024-02-09", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43A6AC55-8A87-35F2-E053-F662850A6D23", + "beginDate": "2006-04-04", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "ONEDATA", + "dateModified": "2016-12-14", + "deletedIndicator": "No" + } + ], + "ConceptualDomain": { + "publicId": "2008583", + "version": "1", + "preferredName": "Response", + "preferredDefinition": "a spoken or written statement that is made in reply to a question or request.", + "longName": "RESPONSE", + "context": "EDRN", + "contextVersion": "1", + "origin": null, + "workflowStatus": "DRAFT NEW", + "registrationStatus": "Application", + "id": "CAAB9A16-A8FD-455E-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2003-10-27", + "endDate": null, + "createdBy": "CURTIST", + "dateCreated": "2003-10-27", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "RepresentationTerm": { + "publicId": "2261841", + "version": "1", + "preferredName": "Code", + "preferredDefinition": "A system of numbered categories for representation of data.", + "longName": "C25162", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Code", + "conceptCode": "C25162", + "definition": "A symbol or combination of symbols which is assigned to the members of a collection.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Standard", + "id": "FBB87F7A-6427-1AFC-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-07-13", + "endDate": null, + "createdBy": "MAESKEB", + "dateCreated": "2005-07-13", + "modifiedBy": "SBR", + "dateModified": "2005-09-08", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "43A6AC55-8A3E-35F2-E053-F662850A6D23", + "latestVersionIndicator": "Yes", + "beginDate": "2004-07-07", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "HARTLEYG", + "dateModified": "2016-12-14", + "changeDescription": "Versioned to update PV concept codes_ghd", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ClassificationSchemes": [ + { + "publicId": "2008589", + "version": "2", + "longName": "Type of Category", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2812446", + "version": "1", + "longName": "Clinical Data Update System", + "context": "CTEP" + } + ] + }, + { + "publicId": "2008601", + "version": "1", + "longName": "C3D Domain", + "context": "CCR", + "ClassificationSchemeItems": [ + { + "publicId": "2811685", + "version": "1", + "longName": "CCR", + "context": "CCR" + }, + { + "publicId": "2812367", + "version": "1", + "longName": "caBIG", + "context": "CCR" + } + ] + }, + { + "publicId": "2179692", + "version": "1", + "longName": "TYPE OF CATEGORY", + "context": "DCP", + "ClassificationSchemeItems": [ + { + "publicId": "2812969", + "version": "1", + "longName": "CSAERS Adverse Events", + "context": "DCP" + }, + { + "publicId": "2811734", + "version": "1", + "longName": "Case Report Forms", + "context": "DCP" + }, + { + "publicId": "2811695", + "version": "1", + "longName": "CSAERS Review Set", + "context": "DCP" + }, + { + "publicId": "2812325", + "version": "1", + "longName": "SeriousAdverseEvents", + "context": "DCP" + }, + { + "publicId": "2812730", + "version": "1", + "longName": "Adverse Events", + "context": "DCP" + }, + { + "publicId": "2957372", + "version": "1", + "longName": "Case Report Forms Version 3", + "context": "DCP" + } + ] + }, + { + "publicId": "2182125", + "version": "1", + "longName": "CCR Implementation", + "context": "CCR", + "ClassificationSchemeItems": [ + { + "publicId": "2811673", + "version": "1", + "longName": "C3D", + "context": "CCR" + } + ] + }, + { + "publicId": "2183535", + "version": "1", + "longName": "Clinical Trial Mgmt Systems", + "context": "NCIP", + "ClassificationSchemeItems": [ + { + "publicId": "2812625", + "version": "1", + "longName": "CTMS C3D Adopter Sites", + "context": "NCIP" + }, + { + "publicId": "2812831", + "version": "1", + "longName": "Oregon Health & Sciences University", + "context": "NCIP" + }, + { + "publicId": "2812832", + "version": "1", + "longName": "OHSU_288", + "context": "NCIP" + }, + { + "publicId": "2812727", + "version": "1", + "longName": "U of Pa Cancer Center", + "context": "NCIP" + }, + { + "publicId": "2812574", + "version": "1", + "longName": "UPCC 07403", + "context": "NCIP" + }, + { + "publicId": "2811715", + "version": "1", + "longName": "Duke University", + "context": "NCIP" + }, + { + "publicId": "2812580", + "version": "1", + "longName": "Duke 500", + "context": "NCIP" + }, + { + "publicId": "2812726", + "version": "1", + "longName": "U Nebraska Med Center", + "context": "NCIP" + }, + { + "publicId": "2812981", + "version": "1", + "longName": "UNMC 284-04", + "context": "NCIP" + }, + { + "publicId": "2812733", + "version": "1", + "longName": "FMISO Study", + "context": "NCIP" + }, + { + "publicId": "2812731", + "version": "1", + "longName": "U Washington", + "context": "NCIP" + }, + { + "publicId": "2812732", + "version": "1", + "longName": "FES Study", + "context": "NCIP" + } + ] + }, + { + "publicId": "2194255", + "version": "1", + "longName": "Type of Condition", + "context": "DCP", + "ClassificationSchemeItems": [ + { + "publicId": "2812516", + "version": "1", + "longName": "Subclinical Neoplastic Lesions", + "context": "DCP" + }, + { + "publicId": "2812102", + "version": "1", + "longName": "Budesonide Lung Nodules", + "context": "DCP" + }, + { + "publicId": "2812148", + "version": "1", + "longName": "SAMe - Hepatitis C cirrhosis", + "context": "DCP" + }, + { + "publicId": "2812149", + "version": "1", + "longName": "Pancreatic Mucinous Neoplasms", + "context": "DCP" + }, + { + "publicId": "2812151", + "version": "1", + "longName": "Prostate - Lycopene", + "context": "DCP" + }, + { + "publicId": "2812152", + "version": "1", + "longName": "Barretts Esophagus - ASA-Esomeprazole", + "context": "DCP" + }, + { + "publicId": "2812154", + "version": "1", + "longName": "Bronchial Dysplasia - Sulindac", + "context": "DCP" + }, + { + "publicId": "2812155", + "version": "1", + "longName": "Sporadic Colorectal Neoplasia - Atrovastatin", + "context": "DCP" + }, + { + "publicId": "2812157", + "version": "1", + "longName": "Melanoma Pathobiology - Lovastatin", + "context": "DCP" + }, + { + "publicId": "2812174", + "version": "1", + "longName": "Polyphenon E - Hormone Receptor-Negative Breast Cancer", + "context": "DCP" + }, + { + "publicId": "2812177", + "version": "1", + "longName": "Safety Study of Resiquimod for Atyical Nevi", + "context": "DCP" + }, + { + "publicId": "2812182", + "version": "1", + "longName": "Tissue Effect of Finasteride - Prostate Cancer", + "context": "DCP" + }, + { + "publicId": "2812183", + "version": "1", + "longName": "Atrovastatin in Women at High Risk for Breast Cancer", + "context": "DCP" + }, + { + "publicId": "2812184", + "version": "1", + "longName": "Spectral Markers in ASA", + "context": "DCP" + }, + { + "publicId": "2812188", + "version": "1", + "longName": "Se-Methyl-Seleno-L-Cystein (MSC) in Adult Men", + "context": "DCP" + }, + { + "publicId": "2812189", + "version": "1", + "longName": "Polyphenon E - Pre-prostatectomy Prostate Cancer", + "context": "DCP" + }, + { + "publicId": "2812190", + "version": "1", + "longName": "Acolbifene - High Risk for Breast Cancer", + "context": "DCP" + }, + { + "publicId": "2812194", + "version": "1", + "longName": "ALA PDT - Oral Leukoplakia", + "context": "DCP" + }, + { + "publicId": "2812197", + "version": "1", + "longName": "Phase II Resiquimod - Atypical Nevi", + "context": "DCP" + }, + { + "publicId": "2812202", + "version": "1", + "longName": "DIM - Prostate Cancer", + "context": "DCP" + }, + { + "publicId": "2812277", + "version": "1", + "longName": "Aminolevulinic Acid - Barrett's Esophagus", + "context": "DCP" + }, + { + "publicId": "2812364", + "version": "1", + "longName": "Barretts Esophagus", + "context": "DCP" + }, + { + "publicId": "2812377", + "version": "1", + "longName": "Bladder Cancer", + "context": "DCP" + }, + { + "publicId": "2812388", + "version": "1", + "longName": "Oral Leukoplakia", + "context": "DCP" + }, + { + "publicId": "2812399", + "version": "1", + "longName": "Polyphenon E for Cervical Ca", + "context": "DCP" + }, + { + "publicId": "2812415", + "version": "1", + "longName": "Sulindac for Breast Cancer", + "context": "DCP" + }, + { + "publicId": "2812502", + "version": "1", + "longName": "Unconjugated Isoflavones in Women at High Risk for Breast Cancer", + "context": "DCP" + }, + { + "publicId": "2812258", + "version": "1", + "longName": "Drug and Carcinogen Enzymes - Resveratrol", + "context": "DCP" + }, + { + "publicId": "2812876", + "version": "1", + "longName": "Bronchial Dysplasia - Myo-Inositol", + "context": "DCP" + }, + { + "publicId": "2812551", + "version": "1", + "longName": "9cUAB30", + "context": "DCP" + }, + { + "publicId": "2812553", + "version": "1", + "longName": "EGF Receptor Signaling in ACF", + "context": "DCP" + }, + { + "publicId": "2812539", + "version": "1", + "longName": "Polyphenon E - Bladder Cancer", + "context": "DCP" + }, + { + "publicId": "2812768", + "version": "1", + "longName": "PK and Safety - Novel Retinoid (9cUAB30)", + "context": "DCP" + }, + { + "publicId": "2812836", + "version": "1", + "longName": "Imiquimod for Atypical Nevi", + "context": "DCP" + }, + { + "publicId": "2812843", + "version": "1", + "longName": "Polyethylene Glycol - Colon Carcinogenesis", + "context": "DCP" + }, + { + "publicId": "2812949", + "version": "1", + "longName": "Exp. PK Formulations of SR13668", + "context": "DCP" + }, + { + "publicId": "2842768", + "version": "1", + "longName": "Letrozole - Breast Cancer", + "context": "DCP" + }, + { + "publicId": "2812736", + "version": "1", + "longName": "Transdermal 4-OHT vs oral TAM DCIS of the Breast", + "context": "DCP" + }, + { + "publicId": "2812735", + "version": "1", + "longName": "3, 3-Diindolylmethane Cervical Intraepithelial", + "context": "DCP" + }, + { + "publicId": "2813002", + "version": "1", + "longName": "Sulindac - Increased Risk of Melanoma", + "context": "DCP" + }, + { + "publicId": "2812998", + "version": "1", + "longName": "Pioglitazone - Oral Leukoplakia", + "context": "DCP" + }, + { + "publicId": "2813043", + "version": "1", + "longName": "Ursodeoxycholic Acid - Barrett's Patients", + "context": "DCP" + }, + { + "publicId": "2859628", + "version": "1", + "longName": "Breast Sulindac DFMO", + "context": "DCP" + }, + { + "publicId": "3303133", + "version": "1", + "longName": "Pomegranate - Prostate Cancer", + "context": "DCP" + }, + { + "publicId": "2813064", + "version": "1", + "longName": "Erlotinib - Lesions of Lung", + "context": "DCP" + }, + { + "publicId": "2979172", + "version": "1", + "longName": "MyoInositol Chemoprevention in Colitis-Assoc. Dysplasia", + "context": "DCP" + }, + { + "publicId": "2936518", + "version": "1", + "longName": "Polyphenon E in Women w/ Modulation of Arachidonic Acid", + "context": "DCP" + }, + { + "publicId": "3018781", + "version": "1", + "longName": "Metformin Colorectal Cancer", + "context": "DCP" + }, + { + "publicId": "3018782", + "version": "1", + "longName": "Resveratrol in Postmenopausal Women", + "context": "DCP" + }, + { + "publicId": "3114163", + "version": "1", + "longName": "Cholecalciferol and Genistein", + "context": "DCP" + }, + { + "publicId": "3110219", + "version": "1", + "longName": "MSC and L SeMet in Adult Men", + "context": "DCP" + }, + { + "publicId": "3152820", + "version": "1", + "longName": "Pioglitazone - Lung Pre-Surgical NSCLC", + "context": "DCP" + }, + { + "publicId": "3182879", + "version": "1", + "longName": "Metformin - Pre-Prostatectomy Prostate Cancer", + "context": "DCP" + }, + { + "publicId": "3182878", + "version": "1", + "longName": "Vitamin D - Bioactivity in the Skin", + "context": "DCP" + }, + { + "publicId": "3528035", + "version": "1", + "longName": "Docosahexaenoic Acid", + "context": "DCP" + }, + { + "publicId": "3211792", + "version": "1", + "longName": "Barrett's Esophagus Chemoprevention Metformin", + "context": "DCP" + }, + { + "publicId": "3293737", + "version": "1", + "longName": "UAB30 in NMSC", + "context": "DCP" + } + ] + }, + { + "publicId": "2487057", + "version": "1", + "longName": "DCP Enterprise System Knowledgebase ", + "context": "DCP", + "ClassificationSchemeItems": [ + { + "publicId": "2812178", + "version": "1", + "longName": "E-Progress Report", + "context": "DCP" + } + ] + }, + { + "publicId": "2604617", + "version": "1", + "longName": "Submission and Reporting", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "10000130", + "version": "1", + "longName": "Clinical Data Update System", + "context": "CTEP" + }, + { + "publicId": "2812619", + "version": "1", + "longName": "Patient Treatment by Course", + "context": "CTEP" + } + ] + }, + { + "publicId": "2857175", + "version": "1", + "longName": "C3D Adopter CDEs for Reuse", + "context": "CCR", + "ClassificationSchemeItems": [ + { + "publicId": "2812490", + "version": "1", + "longName": "CTMS 3.12B", + "context": "CCR" + } + ] + }, + { + "publicId": "2931931", + "version": "1", + "longName": "Iloprost Trial", + "context": "SPOREs", + "ClassificationSchemeItems": [ + { + "publicId": "2931952", + "version": "1", + "longName": "Iloprost 12079", + "context": "SPOREs" + } + ] + }, + { + "publicId": "3335728", + "version": "1", + "longName": "Protocols", + "context": "ABTC", + "ClassificationSchemeItems": [ + { + "publicId": "3335732", + "version": "1", + "longName": "ABTC 0904", + "context": "ABTC" + } + ] + }, + { + "publicId": "5858960", + "version": "1", + "longName": "Adopted", + "context": "NRDS", + "ClassificationSchemeItems": [ + { + "publicId": "5858963", + "version": "1", + "longName": "RAVE Integrations", + "context": "NRDS" + }, + { + "publicId": "4861354", + "version": "1", + "longName": "caAERS", + "context": "NRDS" + } + ] + }, + { + "publicId": "7434158", + "version": "1", + "longName": "CTEP CDISC Harmonization", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "7554867", + "version": "1", + "longName": "CTEP CDISC AE SAE CTCAEv5.0", + "context": "CTEP" + }, + { + "publicId": "7554866", + "version": "1", + "longName": "CTEP CDISC AE SAE CTCAEv4.0", + "context": "CTEP" + } + ] + } + ], + "AlternateNames": [ + { + "name": "NRDS", + "type": "USED_BY", + "context": "NRDS" + }, + { + "name": "ATTRIBN", + "type": "C3D Name", + "context": "CCR" + }, + { + "name": "CTC_AE_ATTR_SCALE", + "type": "NRDS Alternate Name", + "context": "NRDS" + }, + { + "name": "COG", + "type": "USED_BY", + "context": "COG" + }, + { + "name": "AE_ATTR_CD", + "type": "USED_BY", + "context": "CCTG" + }, + { + "name": "Theradex", + "type": "USED_BY", + "context": "Theradex" + }, + { + "name": "CTEP", + "type": "USED_BY", + "context": "CTEP" + }, + { + "name": "AE_AEREL", + "type": "CTEP CDISC CDE", + "context": "CTEP" + }, + { + "name": "NCI Standards", + "type": "USED_BY", + "context": "NCI Standards" + }, + { + "name": "AE_AEREL", + "type": "CDISC SDTM Variable", + "context": "NCI Standards" + } + ], + "ReferenceDocuments": [ + { + "name": "NRDS Question Text", + "type": "Alternate Question Text", + "description": "Attribution to study intervention", + "url": null, + "context": "NRDS" + }, + { + "name": "Attribution", + "type": "Preferred Question Text", + "description": "Attribution", + "url": null, + "context": "DCP" + }, + { + "name": "CRF TEXT", + "type": "Alternate Question Text", + "description": "Adverse Event Attribution Code", + "url": null, + "context": "NCIP" + }, + { + "name": "DCP Document Text2", + "type": "Alternate Question Text", + "description": "AE Attribution", + "url": null, + "context": "DCP" + }, + { + "name": "COG CRF Text 1", + "type": "Alternate Question Text", + "description": "AE attribution:", + "url": null, + "context": "COG" + }, + { + "name": "Theradex - 2", + "type": "Alternate Question Text", + "description": "Attribution to research blood collection", + "url": null, + "context": "Theradex" + }, + { + "name": "Theradex - 1", + "type": "Alternate Question Text", + "description": "Attribution to research biopsy", + "url": null, + "context": "Theradex" + }, + { + "name": "COG CRF Text 10", + "type": "Alternate Question Text", + "description": "Attribution to study intervention:", + "url": null, + "context": "COG" + }, + { + "name": "Relationship to Study Treatment", + "type": "Alternate Question Text", + "description": "Relationship to Study Treatment", + "url": null, + "context": "CTEP" + }, + { + "name": "Attribution to study intervention", + "type": "Alternate Question Text", + "description": "Attribution to study intervention", + "url": null, + "context": "CTEP" + }, + { + "name": "CTEP Text 1", + "type": "Alternate Question Text", + "description": "Was this adverse event related to study treatment?", + "url": null, + "context": "CTEP" + }, + { + "name": "CTEP Text 2", + "type": "Alternate Question Text", + "description": "Relationship to study treatment", + "url": null, + "context": "CTEP" + }, + { + "name": "CCTG_01", + "type": "Alternate Question Text", + "description": "Relation to study treatment", + "url": null, + "context": "CCTG" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Qualified", + "id": "43A70877-7890-6838-E053-F662850A06C5", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-30", + "endDate": null, + "createdBy": "HARTLEYG", + "dateCreated": "2016-12-14", + "modifiedBy": "CLOHNES", + "dateModified": "2023-03-07", + "changeDescription": "Versioned due to version of VD (update of concepts)_ghd", + "administrativeNotes": "3/7/23 added 1 AQT for CCTG ticket request CADSR0002117 cjl; 3/3/23 added 2 AQTs for CTEP Harmonization project ticket request CADSR0002116 cjl.", + "unresolvedIssues": null, + "deletedIndicator": "No" + } +} diff --git a/tests/resources/cadsr-cde-2721353.json b/tests/resources/cadsr-cde-2721353.json new file mode 100644 index 0000000..d428c4d --- /dev/null +++ b/tests/resources/cadsr-cde-2721353.json @@ -0,0 +1,553 @@ +{ + "DataElement": { + "publicId": "2721353", + "version": "1", + "preferredName": "Adverse Event Attribution Code", + "preferredDefinition": "Text code to signify the causal relationship between the treatment modality and the specific adverse event. [Manually-curated]", + "longName": "AE_ATTRIB_CD", + "context": "CCR", + "contextVersion": "1", + "DataElementConcept": { + "publicId": "2014018", + "version": "1", + "preferredName": "Adverse Event Attribution", + "preferredDefinition": "the causal relationship between the treatment modality and the specific adverse event.", + "longName": "AE_ATTR", + "context": "CTEP", + "contextVersion": "2.31", + "ObjectClass": { + "publicId": "2184272", + "version": "1", + "preferredName": "Adverse Event", + "preferredDefinition": "An unwanted effect caused by a drug or therapy. Such effects can be drug related, dose related, route related, patient related, caused by an interaction with another drug, or caused by opioid initiation or dose escalation.", + "longName": "Adverse Event", + "context": "CTEP", + "contextVersion": "2.31", + "Concepts": [ + { + "longName": "Adverse Event", + "conceptCode": "C41331", + "definition": "Any unfavorable or unintended disease, sign, or symptom (including an abnormal laboratory finding) that is temporally associated with the use of a medical treatment or procedure, and that may or may not be considered related to the medical treatment or procedure. Such events can be related to the intervention, dose, route of administration, patient, or caused by an interaction with another drug(s) or procedure(s).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "DB6C8AC6-194E-3E75-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2004-05-27", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2004-05-27", + "modifiedBy": "SBR", + "dateModified": "2005-04-06", + "changeDescription": "Change concept code to C41331 as C2861 is retired per EVS. dw", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "Property": { + "publicId": "2177640", + "version": "1", + "preferredName": "Attribution", + "preferredDefinition": "Attribution; assigning to a cause or source.", + "longName": "Attribution", + "context": "CTEP", + "contextVersion": "2.31", + "Concepts": [ + { + "longName": "Attribution", + "conceptCode": "C25358", + "definition": "To assign to a cause or source.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AE29A78C-5187-3A05-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-10-29", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2002-10-29", + "modifiedBy": "SBR", + "dateModified": "2005-04-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ConceptualDomain": { + "publicId": "2008517", + "version": "1", + "preferredName": "Adverse Events", + "preferredDefinition": "any unfavorable symptoms, signs, or disease temporally associated with the use of a medical\r\ntreatment or procedure that may or may not be considered related to the medical\r\ntreatment or procedure.", + "longName": "AE", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AB51E03C-635E-5672-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-09-23", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-09-23", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": "Definition copied from CTC Manual.", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B3095570-3435-0C8C-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-12-30", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-12-30", + "modifiedBy": "SBR", + "dateModified": "2016-06-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ValueDomain": { + "publicId": "2721350", + "version": "1", + "preferredName": "Adverse Event Attribution Code", + "preferredDefinition": "Any unfavorable and unintended sign (including an abnormal laboratory finding), symptom, syndrome, or disease, temporally associated with the use of a medical product or procedure, regardless of whether or not it is considered related to the product or procedure (attribution of unrelated, unlikely, possible, probable, or definite). The concept refers to events that could be medical product related, dose related, route related, patient related, caused by an interaction with another therapy or procedure, or caused by opioid initiation or dose escalation. The term also is referred to as an adverse experience. The old term Side Effect is retired and should not be used._assigning to a cause or source._A system of numbered categories for representation of data.", + "longName": "AE_ATTRIB_CD", + "context": "CCR", + "contextVersion": "1", + "type": "Enumerated", + "dataType": "CHARACTER", + "minLength": null, + "maxLength": "1", + "minValue": null, + "maxValue": null, + "decimalPlace": null, + "PermissibleValues": [ + { + "value": "L", + "valueDescription": "Likely", + "ValueMeaning": { + "publicId": "2721351", + "version": "1", + "preferredName": "Likely", + "longName": "2721351", + "preferredDefinition": "Having a good chance of being the case or of coming about.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Likely", + "conceptCode": "C85550", + "definition": "Having a good chance of being the case or of coming about.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "43CC8B47-40E5-4F53-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43CC8B47-40FE-4F53-E044-0003BA3F9857", + "beginDate": "2008-01-15", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "REEVESD", + "dateModified": "2008-01-15", + "deletedIndicator": "No" + }, + { + "value": "P", + "valueDescription": "Possible", + "ValueMeaning": { + "publicId": "2567631", + "version": "1", + "preferredName": "Possible", + "longName": "2567631", + "preferredDefinition": "A characteristic indicating that an adverse event may be related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a reasonable time sequence to administration of the drug, but which could also be explained by concurrent disease or other drugs or chemicals. Information on drug withdrawal may be lacking or unclear.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Possibly Related to Intervention", + "conceptCode": "C53258", + "definition": "A characteristic indicating that an adverse event may be related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a reasonable time sequence to administration of the drug, but which could also be explained by concurrent disease or other drugs or chemicals. Information on drug withdrawal may be lacking or unclear.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53C-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "HARTLEYG", + "dateModified": "2016-12-14", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43CC8B47-4113-4F53-E044-0003BA3F9857", + "beginDate": "2008-01-15", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "REEVESD", + "dateModified": "2008-01-15", + "deletedIndicator": "No" + }, + { + "value": "U", + "valueDescription": "Unlikely", + "ValueMeaning": { + "publicId": "2567630", + "version": "1", + "preferredName": "Unlikely", + "longName": "2567630", + "preferredDefinition": "A characteristic used to qualify the adverse event as unlikely related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a temporal relationship to the medical intervention which makes a causal relationship improbable, and in which other interventions or underlying disease provide plausible explanations.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event Unlikely Related to Intervention", + "conceptCode": "C53257", + "definition": "A characteristic used to qualify the adverse event as unlikely related to the medical intervention. According to WHO causality assessment criteria of suspected adverse reactions it is applicable to a clinical event, including laboratory test abnormality, with a temporal relationship to the medical intervention which makes a causal relationship improbable, and in which other interventions or underlying disease provide plausible explanations.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-D53B-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2003-12-31", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2003-12-31", + "modifiedBy": "MMADDINENI", + "dateModified": "2023-12-12", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "43CC8B47-4128-4F53-E044-0003BA3F9857", + "beginDate": "2008-01-15", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "REEVESD", + "dateModified": "2008-01-15", + "deletedIndicator": "No" + }, + { + "value": "C", + "valueDescription": "Related to chemotherapy", + "ValueMeaning": { + "publicId": "2732176", + "version": "1", + "preferredName": "Related to chemotherapy", + "longName": "2732176", + "preferredDefinition": "Related to chemotherapy", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "4733DD61-E57A-2FD8-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "4733DD61-E593-2FD8-E044-0003BA3F9857", + "beginDate": "2008-02-28", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "REEVESD", + "dateModified": "2008-02-28", + "deletedIndicator": "No" + }, + { + "value": "I", + "valueDescription": "Related to IL2", + "ValueMeaning": { + "publicId": "2732177", + "version": "1", + "preferredName": "Related to IL2", + "longName": "2732177", + "preferredDefinition": "Related to IL2", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "4733DD61-E59F-2FD8-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "4733DD61-E5B8-2FD8-E044-0003BA3F9857", + "beginDate": "2008-02-28", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "REEVESD", + "dateModified": "2008-02-28", + "deletedIndicator": "No" + }, + { + "value": "N", + "valueDescription": "Not related to study agents", + "ValueMeaning": { + "publicId": "2732179", + "version": "1", + "preferredName": "Not related to study agents", + "longName": "2732179", + "preferredDefinition": "Not related to study agents", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "4733DD61-E5E9-2FD8-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "4733DD61-E602-2FD8-E044-0003BA3F9857", + "beginDate": "2008-02-28", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "REEVESD", + "dateModified": "2008-02-28", + "deletedIndicator": "No" + }, + { + "value": "D", + "valueDescription": "Definitely related to study agents", + "ValueMeaning": { + "publicId": "2732303", + "version": "1", + "preferredName": "Definitely related to study agents", + "longName": "2732303", + "preferredDefinition": "Definitely related to study agents", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "473BAB73-5157-4291-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "473BAB73-5170-4291-E044-0003BA3F9857", + "beginDate": "2008-02-28", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-02-28", + "modifiedBy": "REEVESD", + "dateModified": "2008-02-28", + "deletedIndicator": "No" + } + ], + "ConceptualDomain": { + "publicId": "2008517", + "version": "1", + "preferredName": "Adverse Events", + "preferredDefinition": "any unfavorable symptoms, signs, or disease temporally associated with the use of a medical\r\ntreatment or procedure that may or may not be considered related to the medical\r\ntreatment or procedure.", + "longName": "AE", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AB51E03C-635E-5672-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-09-23", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-09-23", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": "Definition copied from CTC Manual.", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "RepresentationTerm": { + "publicId": "2721349", + "version": "1", + "preferredName": "Adverse Event Attribution Code", + "preferredDefinition": "Any unfavorable and unintended sign (including an abnormal laboratory finding), symptom, syndrome, or disease, temporally associated with the use of a medical product or procedure, regardless of whether or not it is considered related to the product or procedure (attribution of unrelated, unlikely, possible, probable, or definite). The concept refers to events that could be medical product related, dose related, route related, patient related, caused by an interaction with another therapy or procedure, or caused by opioid initiation or dose escalation. The term also is referred to as an adverse experience. The old term Side Effect is retired and should not be used.:assigning to a cause or source.:A system of numbered categories for representation of data.", + "longName": "C41331:C25358:C25162", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event", + "conceptCode": "C41331", + "definition": "Any unfavorable or unintended disease, sign, or symptom (including an abnormal laboratory finding) that is temporally associated with the use of a medical treatment or procedure, and that may or may not be considered related to the medical treatment or procedure. Such events can be related to the intervention, dose, route of administration, patient, or caused by an interaction with another drug(s) or procedure(s).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "2" + }, + { + "longName": "Attribution", + "conceptCode": "C25358", + "definition": "To assign to a cause or source.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "1" + }, + { + "longName": "Code", + "conceptCode": "C25162", + "definition": "A symbol or combination of symbols which is assigned to the members of a collection.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "43CC8B23-7910-4C80-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-15", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "ONEDATA", + "dateModified": "2008-01-15", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "43CC8B23-7921-4C80-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-15", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "SBR", + "dateModified": "2008-12-08", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ClassificationSchemes": [], + "AlternateNames": [], + "ReferenceDocuments": [ + { + "name": "Attribution", + "type": "Preferred Question Text", + "description": "Attribution", + "url": null, + "context": "CCR" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Qualified", + "id": "43CC96D7-9F12-5098-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-15", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2008-01-15", + "modifiedBy": "REEVESD", + "dateModified": "2011-02-08", + "changeDescription": "Curated to support CCR Surgery Branch (Immunotherapy) legacy data migration", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + } +} diff --git a/tests/resources/cadsr-cde-2724331.json b/tests/resources/cadsr-cde-2724331.json new file mode 100644 index 0000000..6f763ba --- /dev/null +++ b/tests/resources/cadsr-cde-2724331.json @@ -0,0 +1,796 @@ +{ + "DataElement": { + "publicId": "2724331", + "version": "1", + "preferredName": "Agent Adverse Event Attribution Name", + "preferredDefinition": "the names as related to agent attributed for any unfavorable or unintended symptom, sign, or disease including an abnormal laboratory finding) temporally attributed to an agent.", + "longName": "AGT_AE_ATTR_NAME", + "context": "CTEP", + "contextVersion": "2.31", + "DataElementConcept": { + "publicId": "2724329", + "version": "1", + "preferredName": "Agent Adverse Event Attribution", + "preferredDefinition": "information related to an agent to is attributed for any unfavorable or unintended symptom, sign, or disease including an abnormal laboratory finding) temporally.", + "longName": "AGT_AE_ATTRIB", + "context": "CTEP", + "contextVersion": "2.31", + "ObjectClass": { + "publicId": "2223333", + "version": "1", + "preferredName": "Agent", + "preferredDefinition": "An active power or cause (as principle, substance, physical or biological factor, etc.) that produces a specific effect. (NCI)", + "longName": "C1708", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Agent", + "conceptCode": "C1708", + "definition": "An active power or cause (as principle, substance, physical or biological factor, etc.) that produces a specific effect.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "F62B10F2-76A7-2830-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-05-02", + "endDate": null, + "createdBy": "UMLLOADER", + "dateCreated": "2005-05-02", + "modifiedBy": "SBREXT", + "dateModified": "2007-11-07", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "Property": { + "publicId": "2547786", + "version": "1", + "preferredName": "Adverse Event Attribution", + "preferredDefinition": "Any unfavorable and unintended sign (including an abnormal laboratory finding), symptom, syndrome, or disease, temporally associated with the use of a medical product or procedure, regardless of whether or not it is considered related to the product or procedure (attribution of unrelated, unlikely, possible, probable, or definite). The concept refers to events that could be medical product related, dose related, route related, patient related, caused by an interaction with another therapy or procedure, or caused by opioid initiation or dose escalation. The term also is referred to as an adverse experience. The old term Side Effect is retired and should not be used.:assigning to a cause or source.", + "longName": "C41331:C25358", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Adverse Event", + "conceptCode": "C41331", + "definition": "Any unfavorable or unintended disease, sign, or symptom (including an abnormal laboratory finding) that is temporally associated with the use of a medical treatment or procedure, and that may or may not be considered related to the medical treatment or procedure. Such events can be related to the intervention, dose, route of administration, patient, or caused by an interaction with another drug(s) or procedure(s).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "1" + }, + { + "longName": "Attribution", + "conceptCode": "C25358", + "definition": "To assign to a cause or source.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2363D581-0167-398C-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2006-11-29", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2006-11-29", + "modifiedBy": "ONEDATA", + "dateModified": "2006-11-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ConceptualDomain": { + "publicId": "2008517", + "version": "1", + "preferredName": "Adverse Events", + "preferredDefinition": "any unfavorable symptoms, signs, or disease temporally associated with the use of a medical\r\ntreatment or procedure that may or may not be considered related to the medical\r\ntreatment or procedure.", + "longName": "AE", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AB51E03C-635E-5672-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-09-23", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-09-23", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": "Definition copied from CTC Manual.", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "CALGB CRF:Cancer and Leukemia Group B Case Report Form", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "443FC341-3097-3B76-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "SBR", + "dateModified": "2016-06-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ValueDomain": { + "publicId": "2724324", + "version": "1", + "preferredName": "Agent Attribution Name", + "preferredDefinition": "the words or language units by which a thing is known for an agent used for treating disease.", + "longName": "AGT_ATTR_NAM", + "context": "CTEP", + "contextVersion": "2.31", + "type": "Enumerated", + "dataType": "CHARACTER", + "minLength": null, + "maxLength": "50", + "minValue": null, + "maxValue": null, + "decimalPlace": null, + "PermissibleValues": [ + { + "value": "Cytarabine", + "valueDescription": "Cytosine Arabinoside", + "ValueMeaning": { + "publicId": "2724325", + "version": "1", + "preferredName": "Cytosine Arabinoside", + "longName": "2724325", + "preferredDefinition": "An anticancer drug that belongs to the family of drugs called antimetabolites.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Cytarabine", + "conceptCode": "C408", + "definition": "An antimetabolite analogue of cytidine with a modified sugar moiety (arabinose instead of ribose). Cytarabine is converted to the triphosphate form within the cell and then competes with cytidine for incorporation into DNA. Because the arabinose sugar sterically hinders the rotation of the molecule within DNA, DNA replication ceases, specifically during the S phase of the cell cycle. This agent also inhibits DNA polymerase, resulting in a decrease in DNA replication and repair. (NCI04)", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "443FAAF5-4136-370B-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "443FAAF5-414F-370B-E044-0003BA3F9857", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "ALAIS", + "dateModified": "2008-01-21", + "deletedIndicator": "No" + }, + { + "value": "Daunorubicin", + "valueDescription": "Daunorubicin", + "ValueMeaning": { + "publicId": "2724326", + "version": "1", + "preferredName": "Daunorubicin", + "longName": "2724326", + "preferredDefinition": "An anthracycline antineoplastic antibiotic with therapeutic effects similar to those of doxorubicin. Daunorubicin exhibits cytotoxic activity through topoisomerase-mediated interaction with DNA, thereby inhibiting DNA replication and repair and RNA and protein synthesis.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Daunorubicin", + "conceptCode": "C62091", + "definition": "An anthracycline antineoplastic antibiotic with therapeutic effects similar to those of doxorubicin. Daunorubicin exhibits cytotoxic activity through topoisomerase-mediated interaction with DNA, thereby inhibiting DNA replication and repair and RNA and protein synthesis.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "443FAAF5-415D-370B-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": null, + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "443FAAF5-4176-370B-E044-0003BA3F9857", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "ALAIS", + "dateModified": "2008-01-21", + "deletedIndicator": "No" + }, + { + "value": "Midostaurin/Placebo", + "valueDescription": "Midostaurin/Placebo", + "ValueMeaning": { + "publicId": "2724332", + "version": "1", + "preferredName": "Midostaurin/Placebo", + "longName": "2724332", + "preferredDefinition": "Protein kinase C412 (Midostaurin) is an oral multitargeted kinase inhibitor/Placebo (An inactive substance or preparation used as a control in an experiment or test to determine the effectiveness of a medicinal drug) ", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "443FDD62-E1DC-4068-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "443FDE34-9D01-3E86-E044-0003BA3F9857", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "ONEDATA", + "dateModified": "2008-01-21", + "deletedIndicator": "No" + }, + { + "value": "Bevacizumab/Placebo", + "valueDescription": "Placebo Bevacizumab", + "ValueMeaning": { + "publicId": "2823335", + "version": "1", + "preferredName": "Placebo Bevacizumab", + "longName": "2823335", + "preferredDefinition": "An inactive substance, treatment or procedure that is intended to mimic as closely as possible a therapy in a clinical trial.: A monoclonal antibody that may prevent the growth of blood vessels from surrounding tissue to a solid tumor.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Placebo", + "conceptCode": "C753", + "definition": "An inactive substance, treatment or procedure that is intended to provide baseline measurements for the experimental protocol of a clinical trial.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "1" + }, + { + "longName": "Bevacizumab", + "conceptCode": "C2039", + "definition": "A recombinant humanized monoclonal antibody directed against the vascular endothelial growth factor (VEGF), a pro-angiogenic cytokine. Bevacizumab binds to VEGF and inhibits VEGF receptor binding, thereby preventing the growth and maintenance of tumor blood vessels.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "604C2313-B7C6-101A-E040-BB89AD43675B", + "latestVersionIndicator": "Yes", + "beginDate": "2009-01-12", + "endDate": null, + "createdBy": "SHIDED", + "dateCreated": "2009-01-12", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "604C2313-B7DF-101A-E040-BB89AD43675B", + "beginDate": "2009-01-12", + "endDate": null, + "createdBy": "CDECURATE", + "dateCreated": "2009-01-12", + "modifiedBy": "CDECURATE", + "dateModified": "2009-01-12", + "deletedIndicator": "No" + }, + { + "value": "Letrozole/Tamoxifen", + "valueDescription": "Tamoxifen Letrozole", + "ValueMeaning": { + "publicId": "2823336", + "version": "1", + "preferredName": "Tamoxifen Letrozole", + "longName": "2823336", + "preferredDefinition": "An antineoplastic nonsteroidal selective estrogen receptor modulator (SERM). Tamoxifen competitively inhibits the binding of estradiol to estrogen receptors, thereby preventing the receptor from binding to the estrogen-response element on DNA. The result is a reduction in DNA synthesis and cellular response to estrogen. In addition, tamoxifen up-regulates the production of transforming growth factor B (TGFb), a factor that inhibits tumor cell growth, and down-regulates insulin-like growth factor 1 (IGF-1), a factor that stimulates breast cancer cell growth. (NCI04): A nonsteroidal inhibitor of estrogen synthesis that resembles paclitaxel in chemical structure. As a third-generation aromatase inhibitor, letrozole selectively and reversibly inhibits aromatase, a cytochrome P-450 enzyme complex found in many tissues including those of the premenopausal ovary, liver, and breast; aromatase catalyzes the aromatization of androstenedione and testosterone into estrone and estradiol, the final step in estrogen biosynthesis. In estrogen-dependent breast cancers, ananstrozole may inhibit tumor growth. (NCI04)", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Tamoxifen Citrate", + "conceptCode": "C855", + "definition": "The citrate salt of an antineoplastic nonsteroidal selective estrogen receptor modulator (SERM). Tamoxifen competitively inhibits the binding of estradiol to estrogen receptors, thereby preventing the receptor from binding to the estrogen-response element on DNA. The result is a reduction in DNA synthesis and cellular response to estrogen. In addition, tamoxifen up-regulates the production of transforming growth factor B (TGFb), a factor that inhibits tumor cell growth, and down-regulates insulin-like growth factor 1 (IGF-1), a factor that stimulates breast cancer cell growth. Tamoxifen also down-regulates protein kinase C (PKC) expression in a dose-dependant manner, inhibiting signal transduction and producing an antiproliferative effect in tumors such as malignant glioma and other cancers that overexpress PKC.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "1" + }, + { + "longName": "Letrozole", + "conceptCode": "C1527", + "definition": "A nonsteroidal inhibitor of estrogen synthesis with antineoplastic activity. As a third-generation aromatase inhibitor, letrozole selectively and reversibly inhibits aromatase, which may result in growth inhibition of estrogen-dependent breast cancer cells. Aromatase, a cytochrome P-450 enzyme localized to the endoplasmic reticulum of the cell and found in many tissues including those of the premenopausal ovary, liver, and breast, catalyzes the aromatization of androstenedione and testosterone into estrone and estradiol, the final step in estrogen biosynthesis.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "604C2313-B7EE-101A-E040-BB89AD43675B", + "latestVersionIndicator": "Yes", + "beginDate": "2009-01-12", + "endDate": null, + "createdBy": "SHIDED", + "dateCreated": "2009-01-12", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "604C2313-B807-101A-E040-BB89AD43675B", + "beginDate": "2009-01-12", + "endDate": null, + "createdBy": "CDECURATE", + "dateCreated": "2009-01-12", + "modifiedBy": "CDECURATE", + "dateModified": "2009-01-12", + "deletedIndicator": "No" + }, + { + "value": "Interferon", + "valueDescription": "Interferon", + "ValueMeaning": { + "publicId": "3119698", + "version": "1", + "preferredName": "Interferon", + "longName": "3119698", + "preferredDefinition": "Human interferons have been classified into 3 groups: alpha, beta, and gamma. Both alpha- and beta-IFNs, previously designated type I, are acid-stable, but they differ immunologically and in regard to some biologic and physiochemical properties. The IFNs produced by virus-stimulated leukocytes (leukocyte IFNs) are predominantly of the alpha type. Those produced by lymphoblastoid cells are about 90% alpha and 10% beta. Induced fibroblasts produce mainly or exclusively the beta type. The alpha- and beta-IFNs differ widely in amino acid sequence. The gamma or immune IFNs, which are produced by T lymphocytes in response to mitogens or to antigens to which they are sensitized, are acid-labile and serologically distinct from alpha- and beta-IFNs. (from OMIM 147570)", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Interferon", + "conceptCode": "C20493", + "definition": "Human interferons have been classified into 3 groups: alpha, beta, and gamma. Both alpha- and beta-IFNs, previously designated type I, are acid-stable, but they differ immunologically and in regard to some biologic and physiochemical properties. The IFNs produced by virus-stimulated leukocytes (leukocyte IFNs) are predominantly of the alpha type. Those produced by lymphoblastoid cells are about 90% alpha and 10% beta. Induced fibroblasts produce mainly or exclusively the beta type. The alpha- and beta-IFNs differ widely in amino acid sequence. The gamma or immune IFNs, which are produced by T lymphocytes in response to mitogens or to antigens to which they are sensitized, are acid-labile and serologically distinct from alpha- and beta-IFNs. (from OMIM 147570)", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "8AE1E2A1-466C-6C31-E040-BB89AD434C6B", + "latestVersionIndicator": "Yes", + "beginDate": "2010-07-08", + "endDate": null, + "createdBy": "REEVESD", + "dateCreated": "2010-07-08", + "modifiedBy": "ONEDATA_WA", + "dateModified": "2023-02-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "09B95C5D-1C5D-87C6-E050-BB89AD4338B5", + "beginDate": "2014-12-08", + "endDate": null, + "createdBy": "ROUILLAS", + "dateCreated": "2014-12-08", + "modifiedBy": "ONEDATA", + "dateModified": "2014-12-08", + "deletedIndicator": "No" + }, + { + "value": "Indeterminant", + "valueDescription": "Indeterminant", + "ValueMeaning": { + "publicId": "4592211", + "version": "1", + "preferredName": "Indeterminant", + "longName": "4592211", + "preferredDefinition": "Indeterminant", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "07C3981A-FB9E-ADEA-E050-BB89AD432AE9", + "latestVersionIndicator": "Yes", + "beginDate": "2014-11-13", + "endDate": null, + "createdBy": "ROUILLAS", + "dateCreated": "2014-11-13", + "modifiedBy": "SBR", + "dateModified": "2018-01-19", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "07C3981A-FBB7-ADEA-E050-BB89AD432AE9", + "beginDate": "2014-11-13", + "endDate": null, + "createdBy": "ROUILLAS", + "dateCreated": "2014-11-13", + "modifiedBy": "ONEDATA", + "dateModified": "2014-11-13", + "deletedIndicator": "No" + }, + { + "value": "Both", + "valueDescription": "Both", + "ValueMeaning": { + "publicId": "2558322", + "version": "1", + "preferredName": "Both", + "longName": "2558322", + "preferredDefinition": "Two entities considered and identifed together.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Both", + "conceptCode": "C49636", + "definition": "One and the other; relating to or being two in conjunction.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-B0DF-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2002-02-13", + "endDate": null, + "createdBy": "SBR", + "dateCreated": "2002-02-13", + "modifiedBy": "REEVESD", + "dateModified": "2009-12-11", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "07C3981A-FBC1-ADEA-E050-BB89AD432AE9", + "beginDate": "2014-11-13", + "endDate": null, + "createdBy": "ROUILLAS", + "dateCreated": "2014-11-13", + "modifiedBy": "ONEDATA", + "dateModified": "2014-11-13", + "deletedIndicator": "No" + }, + { + "value": "Ipilimumab", + "valueDescription": "Ipilimumab", + "ValueMeaning": { + "publicId": "3185135", + "version": "1", + "preferredName": "Ipilimumab", + "longName": "3185135", + "preferredDefinition": "A monoclonal antibody directed against cytotoxic T-lymphocyte-associated antigen-4 (CTLA4), an antigen that is expressed on activated T-cells and exhibits affinity for B7 co-stimulatory molecules. By binding CTLA4, ipilimumab enhances T-cell activation and blocks B7-1 and B7-2 T-cell co-stimulatory pathways.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Ipilimumab", + "conceptCode": "C2654", + "definition": "A recombinant human immunoglobulin (Ig) G1 monoclonal antibody directed against the human T-cell receptor cytotoxic T-lymphocyte-associated antigen 4 (CTLA4), with immune checkpoint inhibitory and antineoplastic activities. Ipilimumab binds to CTLA4 expressed on T-cells and inhibits the CTLA4-mediated downregulation of T-cell activation. This leads to a cytotoxic T-lymphocyte (CTL)-mediated immune response against cancer cells. CTLA4, an inhibitory receptor and member of the immunoglobulin superfamily, plays a key role in the downregulation of the immune system.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "9A4E41E5-A2F1-57BF-E040-BB89AD4327A8", + "latestVersionIndicator": "Yes", + "beginDate": "2011-01-20", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2011-01-20", + "modifiedBy": "KUMMEROA", + "dateModified": "2023-09-18", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "07C3981A-FBCB-ADEA-E050-BB89AD432AE9", + "beginDate": "2014-11-13", + "endDate": null, + "createdBy": "ROUILLAS", + "dateCreated": "2014-11-13", + "modifiedBy": "ONEDATA", + "dateModified": "2014-11-13", + "deletedIndicator": "No" + }, + { + "value": "Bevacizumab", + "valueDescription": "Bevacizumab", + "ValueMeaning": { + "publicId": "2574306", + "version": "1", + "preferredName": "Bevacizumab", + "longName": "2574306", + "preferredDefinition": "A monoclonal antibody that may prevent the growth of blood vessels from surrounding tissue to a solid tumor.", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Bevacizumab", + "conceptCode": "C2039", + "definition": "A recombinant humanized monoclonal antibody directed against the vascular endothelial growth factor (VEGF), a pro-angiogenic cytokine. Bevacizumab binds to VEGF and inhibits VEGF receptor binding, thereby preventing the growth and maintenance of tumor blood vessels.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "2509CE87-EF4F-5C23-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-04-02", + "endDate": null, + "createdBy": "SHIDED", + "dateCreated": "2005-04-02", + "modifiedBy": "ALAIS", + "dateModified": "2006-04-05", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "id": "07C3981A-FBD5-ADEA-E050-BB89AD432AE9", + "beginDate": "2014-11-13", + "endDate": null, + "createdBy": "ROUILLAS", + "dateCreated": "2014-11-13", + "modifiedBy": "ONEDATA", + "dateModified": "2014-11-13", + "deletedIndicator": "No" + } + ], + "ConceptualDomain": { + "publicId": "2008538", + "version": "1", + "preferredName": "Therapies", + "preferredDefinition": "actions or administration of therapeutic agents to produce an effect that is intended to alter the course of a pathologic process (NCI).", + "longName": "TX", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B214D04D-9F05-1CA5-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-12-18", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-12-18", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "RepresentationTerm": { + "publicId": "2229718", + "version": "1", + "preferredName": "Name", + "preferredDefinition": "The words or language units by which a thing is known.", + "longName": "C42614", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Name", + "conceptCode": "C42614", + "definition": "The words or language units by which a thing is known.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Standard", + "id": "F6EF4E2B-76AE-72C1-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-05-16", + "endDate": null, + "createdBy": "MAESKEB", + "dateCreated": "2005-05-16", + "modifiedBy": "ONEDATA", + "dateModified": "2005-05-16", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": "CALGB CRF:Cancer and Leukemia Group B Case Report Form", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "443FAA61-4C23-3499-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "ROUILLAS", + "dateModified": "2014-12-08", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ClassificationSchemes": [ + { + "publicId": "2008587", + "version": "2", + "longName": "Type of Disease", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2811913", + "version": "1", + "longName": "Lymphoma", + "context": "CTEP" + }, + { + "publicId": "2811909", + "version": "1", + "longName": "Leukemia", + "context": "CTEP" + } + ] + }, + { + "publicId": "2008589", + "version": "2", + "longName": "Type of Category", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2811951", + "version": "1", + "longName": "Adverse Events", + "context": "CTEP" + } + ] + }, + { + "publicId": "2008594", + "version": "2.31", + "longName": "Trial Type Usages (CDE Disease Committees)", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "10000362", + "version": "1", + "longName": "AML Prev Untreated", + "context": "CTEP" + } + ] + }, + { + "publicId": "2008608", + "version": "1", + "longName": "Phase", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2811890", + "version": "1", + "longName": "Phase III", + "context": "CTEP" + } + ] + } + ], + "AlternateNames": [ + { + "name": "ECOG-ACRIN", + "type": "USED_BY", + "context": "ECOG-ACRIN" + } + ], + "ReferenceDocuments": [ + { + "name": "Attributable to which medicat", + "type": "Preferred Question Text", + "description": "Attributable to which medication", + "url": null, + "context": "CTEP" + }, + { + "name": "ECOG CRF Text 1", + "type": "Alternate Question Text", + "description": "Which agent is the AE more likely attributed to?", + "url": null, + "context": "ECOG-ACRIN" + } + ], + "origin": "CALGB CRF:Cancer and Leukemia Group B Case Report Form", + "workflowStatus": "RELEASED", + "registrationStatus": "Qualified", + "id": "443FCA28-F2F8-3CF6-E044-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2008-01-21", + "endDate": null, + "createdBy": "ALAIS", + "dateCreated": "2008-01-21", + "modifiedBy": "ROUILLAS", + "dateModified": "2014-11-24", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + } +} diff --git a/tests/resources/cadsr-cde-996.json b/tests/resources/cadsr-cde-996.json new file mode 100644 index 0000000..af15bd5 --- /dev/null +++ b/tests/resources/cadsr-cde-996.json @@ -0,0 +1,741 @@ +{ + "DataElement": { + "publicId": "996", + "version": "5", + "preferredName": "Prior Chemotherapy Administered End Date", + "preferredDefinition": "the end date for previous chemotherapy administered as treatment for this cancer.", + "longName": "PRIOR_CT_ADM_END_DT", + "context": "CTEP", + "contextVersion": "2.31", + "DataElementConcept": { + "publicId": "2188711", + "version": "1", + "preferredName": "Prior Chemotherapy Administered", + "preferredDefinition": "information related to prior administration of chemotherapy.", + "longName": "PRIOR_CT_ADM", + "context": "CTEP", + "contextVersion": "2.31", + "ObjectClass": { + "publicId": "2206391", + "version": "1", + "preferredName": "Prior Chemotherapy", + "preferredDefinition": "Earlier in time or order.:The use of synthetic or naturally-occurring chemicals for the treatment of diseases. Although this term may be used to describe any therapy involving the use of chemical-based agents, it is most commonly used to refer to the variety of chemical-based agents employed to treat cancer. Cancer chemotherapy works by arresting or killing the growth and spread of cancer cells. Because cancer cells usually divide much faster than normal cells, they are often very sensitive to the inhibitory actions of chemotherapeutic agents. Chemotherapy may also include agents that enhance immune function or alter hormonal activity. (NCI04)", + "longName": "C25629:C15632", + "context": "NCIP", + "contextVersion": "1", + "Concepts": [ + { + "longName": "Prior", + "conceptCode": "C25629", + "definition": "Earlier in time or order.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "No", + "displayOrder": "1" + }, + { + "longName": "Chemotherapy", + "conceptCode": "C15632", + "definition": "The use of synthetic or naturally-occurring chemicals for the treatment of diseases.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "F37D0428-F3A3-6787-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2005-03-29", + "endDate": null, + "createdBy": "SBR", + "dateCreated": "2005-03-29", + "modifiedBy": "ONEDATA", + "dateModified": "2005-03-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "Property": { + "publicId": "2177665", + "version": "1", + "preferredName": "Administered", + "preferredDefinition": "Given.", + "longName": "Administered", + "context": "CTEP", + "contextVersion": "2.31", + "Concepts": [ + { + "longName": "Administered", + "conceptCode": "C25382", + "definition": "The act of having given something (e.g., a medication or test).", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "AE29A78C-516D-3A05-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-10-29", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2002-10-29", + "modifiedBy": "SBR", + "dateModified": "2005-03-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ConceptualDomain": { + "publicId": "2008538", + "version": "1", + "preferredName": "Therapies", + "preferredDefinition": "actions or administration of therapeutic agents to produce an effect that is intended to alter the course of a pathologic process (NCI).", + "longName": "TX", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B214D04D-9F05-1CA5-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2002-12-18", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2002-12-18", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "E54DEB21-FF53-61DD-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2004-09-30", + "endDate": null, + "createdBy": "CAMPBELB", + "dateCreated": "2004-09-30", + "modifiedBy": "SBR", + "dateModified": "2016-06-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ValueDomain": { + "publicId": "2188674", + "version": "1", + "preferredName": "End Date", + "preferredDefinition": "The date on which an observation or an event ended.", + "longName": "END_DT", + "context": "NCI Standards", + "contextVersion": "1", + "type": "Non-enumerated", + "dataType": "DATE", + "minLength": null, + "maxLength": "8", + "minValue": null, + "maxValue": null, + "decimalPlace": null, + "format": "mm/dd/yy", + "PermissibleValues": [], + "ConceptualDomain": { + "publicId": "2008561", + "version": "1", + "preferredName": "Occurrences", + "preferredDefinition": "dates, times, and durations.", + "longName": "OCURS", + "context": "CTEP", + "contextVersion": "2.31", + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "B53BD1AB-090B-398B-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2003-01-27", + "endDate": null, + "createdBy": "MSUPLEY", + "dateCreated": "2003-01-27", + "modifiedBy": "SBR", + "dateModified": "2003-10-29", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "RepresentationTerm": { + "publicId": "2184285", + "version": "1", + "preferredName": "Date", + "preferredDefinition": "A particular day specified as the time something has, or will, happen.", + "longName": "Date", + "context": "CTEP", + "contextVersion": "2.31", + "Concepts": [ + { + "longName": "Date", + "conceptCode": "C25164", + "definition": "The particular day, month and year an event has happened or will happen.", + "evsSource": "NCI_CONCEPT_CODE", + "primaryIndicator": "Yes", + "displayOrder": "0" + } + ], + "origin": "NCI Thesaurus", + "workflowStatus": "RELEASED", + "registrationStatus": "Application", + "id": "DB6C8AC6-1B1A-3E75-E034-0003BA12F5E7", + "latestVersionIndicator": "Yes", + "beginDate": "2004-05-27", + "endDate": null, + "createdBy": "SBREXT", + "dateCreated": "2004-05-27", + "modifiedBy": "SBR", + "dateModified": "2005-04-06", + "changeDescription": null, + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Qualified", + "id": "E53ADB93-5DF7-315A-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2004-09-29", + "endDate": null, + "createdBy": "CAMPBELB", + "dateCreated": "2004-09-29", + "modifiedBy": "KNABLEJ", + "dateModified": "2017-08-23", + "changeDescription": "8/23/17 jk transferred context, cap first letter in def, and added CSI, registration status per Round 5 finalization task.", + "administrativeNotes": null, + "unresolvedIssues": null, + "deletedIndicator": "No" + }, + "ClassificationSchemes": [ + { + "publicId": "2008587", + "version": "2", + "longName": "Type of Disease", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2811949", + "version": "1", + "longName": "Brain", + "context": "CTEP" + }, + { + "publicId": "2811832", + "version": "1", + "longName": "Lung", + "context": "CTEP" + }, + { + "publicId": "2811871", + "version": "1", + "longName": "Colorectal", + "context": "CTEP" + }, + { + "publicId": "10000607", + "version": "1", + "longName": "Sarcoma", + "context": "CTEP" + }, + { + "publicId": "2811907", + "version": "1", + "longName": "Bladder", + "context": "CTEP" + }, + { + "publicId": "2811831", + "version": "1", + "longName": "Breast", + "context": "CTEP" + }, + { + "publicId": "2811908", + "version": "1", + "longName": "Gynecologic", + "context": "CTEP" + }, + { + "publicId": "2811909", + "version": "1", + "longName": "Leukemia", + "context": "CTEP" + }, + { + "publicId": "2811910", + "version": "1", + "longName": "Prostate", + "context": "CTEP" + }, + { + "publicId": "2811911", + "version": "1", + "longName": "Upper GI", + "context": "CTEP" + }, + { + "publicId": "2811913", + "version": "1", + "longName": "Lymphoma", + "context": "CTEP" + }, + { + "publicId": "2811950", + "version": "1", + "longName": "Multiple Myeloma", + "context": "CTEP" + } + ] + }, + { + "publicId": "2008589", + "version": "2", + "longName": "Type of Category", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2811959", + "version": "1", + "longName": "Patient Char.", + "context": "CTEP" + }, + { + "publicId": "2811963", + "version": "1", + "longName": "Treatment", + "context": "CTEP" + } + ] + }, + { + "publicId": "2008594", + "version": "2.31", + "longName": "Trial Type Usages (CDE Disease Committees)", + "context": "CTEP", + "ClassificationSchemeItems": [ + { + "publicId": "2811904", + "version": "1", + "longName": "Multiple Myeloma", + "context": "CTEP" + }, + { + "publicId": "2811905", + "version": "1", + "longName": "Primary Amyloidosis", + "context": "CTEP" + }, + { + "publicId": "2811906", + "version": "1", + "longName": "Waldenstrom Macrogl", + "context": "CTEP" + }, + { + "publicId": "2811920", + "version": "1", + "longName": "Non-local Prostate", + "context": "CTEP" + }, + { + "publicId": "2811938", + "version": "1", + "longName": "Recurrent Gyn", + "context": "CTEP" + }, + { + "publicId": "2811943", + "version": "1", + "longName": "Hodgkin's Lymphoma", + "context": "CTEP" + }, + { + "publicId": "2811944", + "version": "1", + "longName": "NonHodgkins Lymphoma", + "context": "CTEP" + } + ] + }, + { + "publicId": "2552643", + "version": "1", + "longName": "Training Class Examples", + "context": "Training", + "ClassificationSchemeItems": [ + { + "publicId": "3637837", + "version": "1", + "longName": "Training", + "context": "Training" + } + ] + }, + { + "publicId": "2961451", + "version": "1", + "longName": "Children's Oncology Group (COG)", + "context": "COG", + "ClassificationSchemeItems": [ + { + "publicId": "3303197", + "version": "1", + "longName": "Phase 1/Pilot Consortium", + "context": "COG" + } + ] + }, + { + "publicId": "3335728", + "version": "1", + "longName": "Protocols", + "context": "ABTC", + "ClassificationSchemeItems": [ + { + "publicId": "3335732", + "version": "1", + "longName": "ABTC 0904", + "context": "ABTC" + } + ] + }, + { + "publicId": "4057943", + "version": "1", + "longName": "Disease Site", + "context": "NRG", + "ClassificationSchemeItems": [ + { + "publicId": "4104890", + "version": "1", + "longName": "GOG-0229L", + "context": "NRG" + }, + { + "publicId": "4104883", + "version": "1", + "longName": "GOG-0240", + "context": "NRG" + }, + { + "publicId": "4104897", + "version": "1", + "longName": "GOG-0250", + "context": "NRG" + }, + { + "publicId": "4104891", + "version": "1", + "longName": "GOG-0229N", + "context": "NRG" + }, + { + "publicId": "4104901", + "version": "1", + "longName": "GOG-0286B", + "context": "NRG" + }, + { + "publicId": "4104899", + "version": "1", + "longName": "GOG-0261", + "context": "NRG" + }, + { + "publicId": "4104892", + "version": "1", + "longName": "GOG-0229O", + "context": "NRG" + }, + { + "publicId": "4104941", + "version": "1", + "longName": "GOG-0281", + "context": "NRG" + }, + { + "publicId": "10000705", + "version": "1", + "longName": "GOG-0281", + "context": "NRG" + }, + { + "publicId": "10000276", + "version": "1", + "longName": "GOG-0283", + "context": "NRG" + }, + { + "publicId": "4104930", + "version": "1", + "longName": "GOG-0283", + "context": "NRG" + }, + { + "publicId": "10000275", + "version": "1", + "longName": "GOG-0283", + "context": "NRG" + } + ] + } + ], + "AlternateNames": [ + { + "name": "0062915", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "0002355", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "0002531", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "0061399", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "0058422", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "0002464", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "0065215", + "type": "HISTORICAL_CDE_ID", + "context": "CTEP" + }, + { + "name": "PRIOR_CT_ADM_END_DT", + "type": "USED_BY", + "context": "CTEP" + }, + { + "name": "ABTC", + "type": "USED_BY", + "context": "ABTC" + }, + { + "name": "COG", + "type": "USED_BY", + "context": "COG" + }, + { + "name": "PRIOR_CT_ADM_END_DT", + "type": "USED_BY", + "context": "COG" + }, + { + "name": "PRIOR_CT_ADM_END_DT", + "type": "USED_BY", + "context": "Alliance" + }, + { + "name": "PRIOR_CT_ADM_END_DT", + "type": "USED_BY", + "context": "NRG" + }, + { + "name": "ECOG-ACRIN", + "type": "USED_BY", + "context": "ECOG-ACRIN" + }, + { + "name": "CMSTDAT_PRICHEMO", + "type": "OID, Alliance", + "context": "Alliance" + } + ], + "ReferenceDocuments": [ + { + "name": "Date Prior Chemotherapy Ended", + "type": "Preferred Question Text", + "description": "Date Prior Chemotherapy Ended", + "url": null, + "context": "CTEP" + }, + { + "name": "CRF Text", + "type": "Alternate Question Text", + "description": "Prior Chemotherapy End Date", + "url": null, + "context": "CTEP" + }, + { + "name": "Prior Chemotherapy Stop Date", + "type": "Alternate Question Text", + "description": "Prior Chemotherapy Stop Date", + "url": null, + "context": "CTEP" + }, + { + "name": "COG_CRF_TEXT_1", + "type": "Alternate Question Text", + "description": "Date of last dose of indicated agent", + "url": null, + "context": "CTEP" + }, + { + "name": "CRF Text2", + "type": "Alternate Question Text", + "description": "Last day of chemotherapy", + "url": null, + "context": "CTEP" + }, + { + "name": "CRF Text 1", + "type": "Alternate Question Text", + "description": "Date Ended", + "url": null, + "context": "CTEP" + }, + { + "name": "CRF Text3", + "type": "Alternate Question Text", + "description": "Date last chemotherapy treatment received", + "url": null, + "context": "CTEP" + }, + { + "name": "CRF Text4", + "type": "Alternate Question Text", + "description": "Date of completion of prior chemotherapy", + "url": null, + "context": "CTEP" + }, + { + "name": "COG_CRF_TEXT_2", + "type": "Alternate Question Text", + "description": "Date last Myelosuppressive Chemotherapy treatment received", + "url": null, + "context": "COG" + }, + { + "name": "ECOG CRF Text 1", + "type": "Alternate Question Text", + "description": "Date of last prior chemotherapy", + "url": null, + "context": "ECOG-ACRIN" + }, + { + "name": "ECOG CRF Text 2", + "type": "Alternate Question Text", + "description": "Date prior anthracycline therapy ended", + "url": null, + "context": "ECOG-ACRIN" + }, + { + "name": "ECOG CRF Text 3", + "type": "Alternate Question Text", + "description": "Date prior systemic doxorubicin ended", + "url": null, + "context": "ECOG-ACRIN" + }, + { + "name": "ECOG CRF Text 4", + "type": "Alternate Question Text", + "description": "Date prior Brentuximab ended", + "url": null, + "context": "ECOG-ACRIN" + }, + { + "name": "NRG_CRF_Text 1", + "type": "Alternate Question Text", + "description": "Date Prior Systemic Therapy Ended", + "url": null, + "context": "NRG" + }, + { + "name": "CRF Text5", + "type": "Alternate Question Text", + "description": "last date of chemotherapy", + "url": null, + "context": "Alliance" + }, + { + "name": "Prior Therapies Form", + "type": "Alternate Question Text", + "description": "Date (most recent) prior chemotherapy ended", + "url": null, + "context": "ECOG-ACRIN" + }, + { + "name": "CRF Text6", + "type": "Alternate Question Text", + "description": "last day of chemotherapy", + "url": null, + "context": "Alliance" + }, + { + "name": "CRF Text7", + "type": "Alternate Question Text", + "description": "last day of neoadjuvant chemotherapy", + "url": null, + "context": "Alliance" + }, + { + "name": "CRF Text8", + "type": "Alternate Question Text", + "description": "date of last chemotherapy", + "url": null, + "context": "Alliance" + }, + { + "name": "CRF Text9", + "type": "Alternate Question Text", + "description": "Chemotherapy Completion Date", + "url": null, + "context": "Alliance" + }, + { + "name": "Alliance A092105", + "type": "Alternate Question Text", + "description": "If Yes, Chemotherapy Completion Date", + "url": null, + "context": "Alliance" + } + ], + "origin": null, + "workflowStatus": "RELEASED", + "registrationStatus": "Qualified", + "id": "E55143E8-160F-321B-E034-0003BA3F9857", + "latestVersionIndicator": "Yes", + "beginDate": "2004-09-30", + "endDate": null, + "createdBy": "CAMPBELB", + "dateCreated": "2004-09-30", + "modifiedBy": "ZHWENDY", + "dateModified": "2023-04-06", + "changeDescription": "ISO compliance.", + "administrativeNotes": "2023/4/4: Added AQT for Alliance.wz", + "unresolvedIssues": null, + "deletedIndicator": "No" + } +} diff --git a/tests/resources/cadsr-swagger.json b/tests/resources/cadsr-swagger.json new file mode 100644 index 0000000..b4966f1 --- /dev/null +++ b/tests/resources/cadsr-swagger.json @@ -0,0 +1,1570 @@ +{ + "swagger": "2.0", + "info": { + "description": "API for caDSR object structures.", + "version": "1.0", + "title": "NCI API" + }, + "host": "cadsrapi.cancer.gov", + "basePath": "/rad/NCIAPI/1.0/api", + "tags": [ + { + "name": "Data Element", + "description": "A unit of data for which the definition, identification, representation and permissible values are specified by means of a set of attributes." + } + ], + "schemes": [ + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json", + "application/xml" + ], + "paths": { + "/DataElement/{publicId}": { + "get": { + "tags": [ + "Data Element" + ], + "description": "GET full representation of Data Element object including all of it's lower level objects such as Value Domain, Data Element Concept, and Classifications, Reference Documents including Question Texts.\r\n\r\nExamples:\r\n\r\n- To get the latest version of Data Element with publicID of 62:\r\n /DataElement/62\r\n\r\n\r\n- To get specific version (e.g. version 4) of Data Element with publicId of 62:\r\n /DataElement/62?version=4", + "operationId": "DataElementpublicId_GET_1", + "parameters": [ + { + "name": "publicId", + "in": "path", + "description": "The unique identifier for an Administered Item within a Registration Authority. Example: 62", + "required": true, + "type": "string" + }, + { + "name": "version", + "in": "query", + "description": "The unique version identifier of the Administered Item.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DataElementpublicId_GET_response" + } + }, + "401": { + "description": "Access Denied" + } + } + } + }, + "/DataElement/query": { + "get": { + "tags": [ + "Data Element" + ], + "description": "GET list of Data Element objects with top level properties ONLY. \r\n\r\nExamples:\r\n\r\n- To get all versions of Data Element with publicID of 62:\r\n /DataElement?publicId=62", + "operationId": "DataElementquery_GET_2", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "publicId", + "in": "query", + "description": "The unique identifier for an Administered Item within a Registration Authority. Example: 62", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DataElementquery_GET_response" + } + }, + "401": { + "description": "Access Denied" + } + } + } + }, + "/DataElement/query/Concept": { + "get": { + "tags": [ + "Data Element" + ], + "description": "Search for Data Element objects by Concept fields. User may search by either Concept Name (conceptLongName) or Concept Code (conceptCode). \r\n
\r\nConcept search may also utilize the exactMatch flag. For example if \"Gender\" is the search term and exactMatch is set to false, the search will return wildcard concept names that CONTAIN \"*Gender*\". If exactMatch is set to true the search will return concept names that ONLY match \"Gender\". The same rules apply to conceptCode as well.\r\n
\r\nConcept searches are not case sensitive. For example, search terms \"Gender\" and \"geNdEr\" will return the same results.\r\n
\r\nThe user may also \"filter\" the initial results by fields such as Primary Indicator, Order, Status, etc. At a minimum, either conceptLongName or conceptCode must be provided in the search query or no results will be returned. \r\n
\r\nThe maximum number of results per query is 1000. Please refine your search to bring back fewer results.", + "operationId": "DataElementqueryConcept_GET_3", + "parameters": [ + { + "name": "conceptLongName", + "in": "query", + "description": "A name by which an Administered Item (e.g. Concept) is designated within a specific Context. Example: \"Gender\".", + "required": false, + "type": "string" + }, + { + "name": "conceptCode", + "in": "query", + "description": "A code by which a Concept is designated. An example code would be \"C17357\".", + "required": false, + "type": "string" + }, + { + "name": "exactMatch", + "in": "query", + "description": "A flag to indicate the search term should look for an exact match. The default value is \"false\".", + "required": false, + "type": "string" + }, + { + "name": "conceptPrimaryIndicatorFilter", + "in": "query", + "description": "Filter results on the Primary Indicator field. Examples are 1 for true, 0 for false. If no value is specified, all results will be returned.", + "required": false, + "type": "string" + }, + { + "name": "conceptDisplayOrderFilter", + "in": "query", + "description": "Filter results on the Display Order field. Examples are ordered values 0, 1, 2, etc. If no value is specified, all results will be returned.", + "required": false, + "type": "string" + }, + { + "name": "itemTypeFilter", + "in": "query", + "description": "Filter results returning only the parent objects the Concept is attributed to. Examples are \"Object Class\", \"Property\", \"Value Meaning\" or \"Representation Term\". If no value is specified, all results will be returned.", + "required": false, + "type": "string" + }, + { + "name": "workflowStatusFilter", + "in": "query", + "description": "Filter results on the Workflow Status of the Data Element. Example is \"RELEASED\". If no value is specified, all results will be returned.", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DataElementqueryConcept_GET_response" + } + }, + "401": { + "description": "Access Denied" + } + } + } + }, + "/DataElement/getCRDCList": { + "get": { + "tags": [ + "Data Element" + ], + "description": "GET full representation of CRDC Data Elements.\r\n\r\nThere are no input parameters.", + "operationId": "DataElementgetCRDCList_GET_4", + "parameters": [], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DataElementgetCRDCList_GET_response" + } + }, + "401": { + "description": "Access Denied" + } + } + } + }, + "/DataElement/query/Context": { + "get": { + "tags": [ + "Data Element" + ], + "description": "GET list of Data Element objects by Context name with top level properties.\r\n\r\nExamples:\r\n\r\n- To get all versions of Data Element with context: NCI Standards\r\n /DataElement?contextName=NCI Standards", + "operationId": "DataElementqueryContext_GET_5", + "parameters": [ + { + "name": "contextName", + "in": "query", + "description": "The name of a Context object. Example: NCI Standards", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/DataElementqueryContext_GET_response" + } + }, + "401": { + "description": "Access Denied" + } + } + } + } + }, + "definitions": { + "ClassificationScheme": { + "required": [ + "context", + "longName", + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string" + }, + "longName": { + "type": "string" + }, + "context": { + "type": "string" + }, + "ClassificationSchemeItems": { + "type": "array", + "items": { + "$ref": "#/definitions/ClassificationSchemeItem" + } + } + } + }, + "Property": { + "required": [ + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "Concepts": { + "type": "array", + "items": { + "$ref": "#/definitions/Concept" + } + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "DataElementpublicId_GET_response": { + "required": [ + "DataElement" + ], + "properties": { + "DataElement": { + "$ref": "#/definitions/DataElement" + } + } + }, + "DataElementgetCRDCList_GET_response": { + "required": [ + "CRDCDataElements" + ], + "properties": { + "CRDCDataElements": { + "type": "array", + "items": { + "$ref": "#/definitions/CRDCDataElement" + } + } + } + }, + "DataElementqueryContext_GET_response": { + "required": [ + "DataElementQueryResults", + "numRecords" + ], + "properties": { + "numRecords": { + "type": "string" + }, + "DataElementQueryResults": { + "type": "array", + "items": { + "$ref": "#/definitions/DataElementQuery" + } + } + } + }, + "AlternateName": { + "required": [ + "context", + "name", + "type" + ], + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "context": { + "type": "string" + } + } + }, + "CRDCDataElement": { + "properties": { + "CDE Public ID": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "Version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "CRDC Name": { + "type": "string", + "description": "CRDC Name" + }, + "CRD Domain": { + "type": "string", + "description": "CRDC Domain" + }, + "Example": { + "type": "string", + "description": "CRDC Example" + }, + "VD Type": { + "type": "string", + "description": "Value Domain type" + }, + "Coding Instruction": { + "type": "string", + "description": "CRDC Coding Instructions" + }, + "Instructions": { + "type": "string", + "description": "CRDC Instructions" + }, + "CRDC Definition": { + "type": "string", + "description": "CRD Definition" + }, + "CDE Long Name": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "Registration Status": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "Workflow Status": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "Owned By": { + "type": "string", + "description": "Who owns the Data Element" + }, + "Used By": { + "type": "string", + "description": "Who is using the Data Element" + }, + "Deep Link": { + "type": "string" + }, + "permissibleValues": { + "type": "array", + "items": { + "$ref": "#/definitions/permissibleValue" + } + } + } + }, + "ConceptualDomain": { + "required": [ + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "ClassificationSchemeItem": { + "required": [ + "context", + "longName", + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string" + }, + "longName": { + "type": "string" + }, + "context": { + "type": "string" + } + } + }, + "DataElementqueryConcept_GET_response": { + "required": [ + "DataElementQueryResults", + "numRecords" + ], + "properties": { + "numRecords": { + "type": "string" + }, + "DataElementQueryResults": { + "type": "array", + "items": { + "$ref": "#/definitions/DataElementQuery" + } + } + } + }, + "DataElement": { + "required": [ + "AlternateNames", + "ClassificationSchemes", + "DataElementConcept", + "ReferenceDocuments", + "ValueDomain", + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "DataElementConcept": { + "$ref": "#/definitions/DataElementConcept" + }, + "ValueDomain": { + "$ref": "#/definitions/ValueDomain" + }, + "ClassificationSchemes": { + "type": "array", + "items": { + "$ref": "#/definitions/ClassificationScheme" + } + }, + "AlternateNames": { + "type": "array", + "items": { + "$ref": "#/definitions/AlternateName" + } + }, + "ReferenceDocuments": { + "type": "array", + "items": { + "$ref": "#/definitions/ReferenceDocument" + } + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "ValueDomain": { + "required": [ + "ConceptualDomain", + "PermissibleValues", + "RepresentationTerm", + "characterSet", + "context", + "contextVersion", + "dataType", + "decimalPlace", + "format", + "longName", + "maxLength", + "maxValue", + "minLength", + "minValue", + "preferredDefinition", + "preferredName", + "publicId", + "type", + "unitOfMeasure", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "type": { + "type": "string" + }, + "dataType": { + "type": "string" + }, + "unitOfMeasure": { + "type": "string" + }, + "characterSet": { + "type": "string" + }, + "minLength": { + "type": "string" + }, + "maxLength": { + "type": "string" + }, + "minValue": { + "type": "string" + }, + "maxValue": { + "type": "string" + }, + "decimalPlace": { + "type": "string" + }, + "format": { + "type": "string" + }, + "PermissibleValues": { + "type": "array", + "items": { + "$ref": "#/definitions/PermissibleValue" + } + }, + "ConceptualDomain": { + "$ref": "#/definitions/ConceptualDomain" + }, + "RepresentationTerm": { + "$ref": "#/definitions/RepresentationTerm" + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "ObjectClass": { + "required": [ + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "Concepts": { + "type": "array", + "items": { + "$ref": "#/definitions/Concept" + } + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "DataElementquery_GET_response": { + "required": [ + "DataElementQueryResults", + "numRecords" + ], + "properties": { + "numRecords": { + "type": "string" + }, + "DataElementQueryResults": { + "type": "array", + "items": { + "$ref": "#/definitions/DataElementQuery" + } + } + } + }, + "Concept": { + "properties": { + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "conceptCode": { + "type": "string" + }, + "definition": { + "type": "string" + }, + "evsSource": { + "type": "string", + "description": "The name of the EVS concept code that was the source for the concept identifier." + }, + "primaryIndicator": { + "type": "string" + }, + "displayOrder": { + "type": "string" + } + } + }, + "DataElementConcept": { + "required": [ + "ConceptualDomain", + "ObjectClass", + "Property", + "context", + "contextVersion", + "longName", + "preferredDefinition", + "preferredName", + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "ObjectClass": { + "$ref": "#/definitions/ObjectClass" + }, + "Property": { + "$ref": "#/definitions/Property" + }, + "ConceptualDomain": { + "$ref": "#/definitions/ConceptualDomain" + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "ValueMeaning": { + "required": [ + "context", + "contextVersion", + "longName", + "preferredDefinition", + "preferredName", + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "Concepts": { + "type": "array", + "items": { + "$ref": "#/definitions/Concept" + } + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "RepresentationTerm": { + "required": [ + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "context": { + "type": "string", + "description": "An associated gov.nih.nci.cadsr.domain.Context object" + }, + "contextVersion": { + "type": "string" + }, + "Concepts": { + "type": "array", + "items": { + "$ref": "#/definitions/Concept" + } + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeDescription": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "ReferenceDocument": { + "properties": { + "name": { + "type": "string" + }, + "type": { + "type": "string" + }, + "description": { + "type": "string" + }, + "url": { + "type": "string" + }, + "context": { + "type": "string" + } + } + }, + "PermissibleValue": { + "required": [ + "ValueMeaning", + "publicId", + "value", + "valueDescription" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for a Permissible Value" + }, + "value": { + "type": "string", + "description": "A representation of a Value Meaning in a specific Value Domain the actual Value." + }, + "valueDescription": { + "type": "string", + "description": "The text of the most desirable meaning for Value" + }, + "ValueMeaning": { + "$ref": "#/definitions/ValueMeaning" + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "DataElementQuery": { + "required": [ + "publicId", + "version" + ], + "properties": { + "publicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "version": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "preferredName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context. Referred to as Short Name." + }, + "preferredDefinition": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "longName": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "contextName": { + "type": "string", + "description": "A 30 character limit name by which an Administered Item is designated within a specific Context." + }, + "contextVersion": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "dataElementConceptPublicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "dataElementConceptVersion": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "valueDomainPublicId": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "valueDomainVersion": { + "type": "string", + "description": "The unique version identifier of the Administered Item." + }, + "origin": { + "type": "string", + "description": "The source (document, project, discipline or model) for the Administered Item." + }, + "workflowStatus": { + "type": "string", + "description": "A name of a designation of the status in the administrative life-cycle of a Context Owner for handling new administered items." + }, + "registrationStatus": { + "type": "string", + "description": "A designation of the status in the registration life-cycle of an Administered Item." + }, + "id": { + "type": "string", + "description": "The 36 character caDSR database identifier." + }, + "latestVersionIndicator": { + "type": "string", + "description": "The present form of an Administered Item." + }, + "beginDate": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "endDate": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + }, + "createdBy": { + "type": "string", + "description": "This is a description of createdBy." + }, + "dateCreated": { + "type": "string", + "description": "The date the Administered Item was created." + }, + "modifiedBy": { + "type": "string", + "description": "Username of the person who modified the record" + }, + "dateModified": { + "type": "string", + "description": "Date on which the record was modified; last date the object was modified" + }, + "changeNote": { + "type": "string", + "description": "The description of what has changed in the Administered Item since the prior version of the Administered Item." + }, + "administrativeNotes": { + "type": "string" + }, + "unresolvedIssues": { + "type": "string", + "description": "Any problem that remains unresolved regarding proper documentation of the Administered Item." + }, + "deletedIndicator": { + "type": "string", + "description": "An indicator that characterizes the item as eliminated from the registry, thought the physical record still exists." + } + } + }, + "permissibleValue": { + "properties": { + "Permissible Value": { + "type": "string", + "description": "A representation of a Value Meaning in a specific Value Domain the actual Value." + }, + "VM Long Name": { + "type": "string", + "description": "A 255 character limit name for an item in the registry." + }, + "VM Public ID": { + "type": "string", + "description": "The unique identifier for an Administered Item within a Registration Authority." + }, + "Concept Code": { + "type": "string" + }, + "VM Description": { + "type": "string", + "description": "The text of the most desirable meaning for the Administered Item." + }, + "Begin Date": { + "type": "string", + "description": "The particular day, month and year this item became allowed." + }, + "End Date": { + "type": "string", + "description": "The day, month and year this item becomes no longer allowed." + } + }, + "description": "List of Permissible Values" + } + } +} diff --git a/tests/resources/foaf_snippet.ttl b/tests/resources/foaf_snippet.ttl new file mode 100644 index 0000000..ac9ab9d --- /dev/null +++ b/tests/resources/foaf_snippet.ttl @@ -0,0 +1,19 @@ +@prefix foaf: . +@prefix owl: . +@prefix rdfs: . +@prefix rdf: . + +foaf:knows rdf:type owl:ObjectProperty ; + rdfs:domain foaf:Person ; + rdfs:range foaf:Person ; + rdfs:comment "A person known by this person (indicating some level of reciprocated interaction between the parties)." ; + rdfs:isDefinedBy ; + rdfs:label "knows" . + +foaf:Person rdf:type owl:Class ; + rdfs:subClassOf , + foaf:Agent ; + owl:disjointWith foaf:Project ; + rdfs:comment "A person." ; + rdfs:isDefinedBy ; + rdfs:label "Person" . diff --git a/tests/resources/hca/README.md b/tests/resources/hca/README.md new file mode 100644 index 0000000..fa68b05 --- /dev/null +++ b/tests/resources/hca/README.md @@ -0,0 +1,83 @@ +# The Human Cell Atlas Metadata Standards: JSON Schemas + +This repo contains the HCA metadata JSON schemas for **Core**, **Type**, and **Module** entities. Below is a brief description of the structure of the HCA JSON schemas. More details about the schema structure can be found in the [structure document](../docs/structure.md). + +## Schema structure overview + +### User-supplied fields + +Metadata fields are divided into three major entities: Core, Type, and Module. + +Metadata fields in **Core** entity schemas are those that apply to 100% of all entities and are highly stable. Example Core fields include those for IDs and accessions. Core fields are inherited by Type entities. + +Metadata fields in **Type** entity schemas are those that apply to a majority of entities and are moderately stable. Example Type fields include Height and Weight for donors and total estimated cell count for cell suspensions. + +Metadata fields in **Module** entity schemas are those that apply to a small number of entities or may be shared across different entities. Example Module fields include Cause of death for donors and Publication information (which can apply to both projects and biomaterials like cell lines). **Ontology** specifications are a special class of Module entity schemas. + +### Ingest-supplied fields + +Some metadata about a submitted dataset is provided by the [HCA Ingestion Service](https://github.com/HumanCellAtlas/ingest-central) including information about when a dataset was submitted and how all the Type entities relate to each other. The HCA JSON schemas describing these attributes are located in the `system/` directory. Data contributors do not need to know about these schemas. + +## Schema structure rules + +The following rules are followed by HCA JSON schemas: + +1. Core schemas can not reference Type or Module schemas. +1. All Type schemas must reference their associated Core schema. +1. Module schemas can only reference Ontology schemas. +1. A set of fields that are logically grouped or only applicable in certain situations should be put into their own Module schema. +1. Core, Type, and Module schemas are grouped by their entity category (Biomaterial, File, Process, Project, Protocol). + +These rules are tested on every push to github by our schema linter, integrated within the travis CI. + +## Directory structure of schemas + +``` +core/ + biomaterial/ + biomaterial_core.json + file/ + file_core.json + process/ + process_core.json + project/ + project_core.json + protocol/ + protocol_core.json +module/ + biomaterial/ + cell_morphology.json + ... + ontology/ + biological_macromolecule_ontology.json + ... + process/ + purchased_reagents.json + ... + project/ + contact.json + ... + protocol/ + channel.json + ... +type/ + biomaterial/ + cell_line.json + ... + file/ + analysis_file.json + ... + process/ + analysis/ + analysis_process.json + ... + project/ + project.json + protocol/ + analysis/ + analysis_protocol.json + ... +system/ + links.json + provenance.json +``` diff --git a/tests/resources/hca/core/biomaterial/biomaterial_core.json b/tests/resources/hca/core/biomaterial/biomaterial_core.json new file mode 100644 index 0000000..75fd66f --- /dev/null +++ b/tests/resources/hca/core/biomaterial/biomaterial_core.json @@ -0,0 +1,88 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about any biological material that was generated/used in the project including everything from a whole organism to subcellular components.", + "additionalProperties": false, + "required": [ + "biomaterial_id", + "ncbi_taxon_id" + ], + "title": "Biomaterial core", + "name": "biomaterial_core", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/core/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/biomaterial_core" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^\\d+\\.\\d+\\.\\d+$", + "example": "4.6.1" + }, + "biomaterial_id":{ + "description": "A unique ID for the biomaterial.", + "type": "string", + "user_friendly": "Biomaterial ID" + }, + "biomaterial_name": { + "description": "A short, descriptive name for the biomaterial that need not be unique.", + "type": "string", + "user_friendly": "Biomaterial name" + }, + "biomaterial_description": { + "description": "A general description of the biomaterial.", + "type": "string", + "user_friendly": "Biomaterial description" + }, + "ncbi_taxon_id" : { + "description": "A taxonomy ID (taxonID) from NCBI.", + "type" : "array", + "items":{ + "type": "integer" + }, + "user_friendly": "NCBI taxon ID", + "example": 9606 + }, + "genotype": { + "description": "Genotype of the biomaterial.", + "type": "string", + "user_friendly": "Genotype", + "example": "DRB1 0401 protective allele; HLA-B*3901 allele" + }, + "supplementary_files": { + "description": "A list of filenames of biomaterial-level supplementary files.", + "type": "array", + "items": { + "type": "string" + }, + "user_friendly": "Supplementary files", + "example": "sample_site_image.jpg" + }, + "biosamples_accession": { + "description": "A BioSamples accession.", + "type": "string", + "pattern": "^SAM(D|N|E([AG]?))[0-9]+$", + "user_friendly": "BioSamples accession", + "example": "SAMN00000000", + "guidelines": "Enter accession if sample has been archived. Accession can be from the DDBJ, NCBI, or EMBL-EBI and must start with SAMD, SAMN, or SAME, respectively." + }, + "insdc_sample_accession": { + "description": "An International Nucleotide Sequence Database Collaboration (INSDC) sample accession.", + "type": "string", + "pattern": "^[DES]RS[0-9]+$", + "user_friendly": "INSDC sample accession", + "example": "SRS0000000", + "guidelines": "Enter accession if sample has been archived. Accession can be from the DDBJ, NCBI, or EMBL-EBI and must start with DRS, SRS, or ERS, respecitvely." + }, + "HDBR_accession": { + "description": "A Human Developmental Biology Resource (HDBR) sample accession.", + "type": "string", + "pattern": "(^[0-9]{5})(,\\s[0-9]{1,},\\s[a-zA-Z]+$){0,1}", + "user_friendly": "HDBR accession", + "example": "34526; 14758, 2, liver", + "guidelines": "Enter accession if sample has been obtained from the Human Developmental Biology Resource (HDBR)." + } + } +} diff --git a/tests/resources/hca/core/file/file_core.json b/tests/resources/hca/core/file/file_core.json new file mode 100644 index 0000000..0489e4a --- /dev/null +++ b/tests/resources/hca/core/file/file_core.json @@ -0,0 +1,75 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about a file produced from any process.", + "additionalProperties": false, + "required": [ + "file_name", + "format" + ], + "title": "File core", + "name": "file_core", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/core/file/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/file_core" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "file_name": { + "description": "The name of the file.", + "type": "string", + "user_friendly": "File name", + "guidelines": "Include the file extension in the file name.", + "example": "R1.fastq.gz; codebook.json" + }, + "format": { + "description": "The format of the file.", + "type": "string", + "user_friendly": "File format", + "guidelines": "Indicate the full file extension including compression extensions.", + "example": "fastq.gz; tif" + }, + "content_description": { + "description": "General description of the contents of the file.", + "type": "array", + "user_friendly": "Content description", + "items":{ + "type": "object", + "$ref": "module/ontology/file_content_ontology.json" + } + }, + "checksum": { + "description": "MD5 checksum of the file.", + "type": "string", + "user_friendly": "Checksum", + "example": "e09a986c2e630130b1849d4bf9a94c06" + }, + "file_source": { + "description": "The source of the file. This is typically an organisation, repository, person or dedicated process.", + "type": "string", + "enum":[ + "DCP/2 Analysis", + "Contributor", + "ArrayExpress", + "HCA Release", + "GEO", + "SCEA", + "SCP", + "DCP/1 Matrix Service", + "LungMAP", + "Zenodo", + "Publication", + "DCP/2 Ingest" + ], + "user_friendly": "File source", + "guidelines": "Should be one of: DCP/2 Analysis, Contributor, ArrayExpress, HCA Release, GEO, SCEA, SCP, DCP/1 Matrix Service, LungMAP, Zenodo, Publication, DCP/2 Ingest", + "example": "GEO; Contributor" + } + } +} diff --git a/tests/resources/hca/core/process/process_core.json b/tests/resources/hca/core/process/process_core.json new file mode 100644 index 0000000..de8006a --- /dev/null +++ b/tests/resources/hca/core/process/process_core.json @@ -0,0 +1,56 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relevant to how a biomaterial or file was converted into another biomaterial or file.", + "additionalProperties": false, + "required": [ + "process_id" + ], + "title": "Process core", + "name": "process_core", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/core/process/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/process_core" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "process_id": { + "description": "A unique ID for the process.", + "type": "string", + "user_friendly": "Process ID" + }, + "process_name": { + "description": "A short, descriptive name for the process that need not be unique.", + "type": "string", + "user_friendly": "Process name" + }, + "process_description": { + "description": "A general description of the process.", + "type": "string", + "user_friendly": "Process description" + }, + "location": { + "description": "Location where the process took place.", + "type": "string", + "example": "Wellcome Trust Sanger Institute; Cancer Institute Stanford University", + "user_friendly": "Location" + }, + "operators": { + "description": "Identifier for individual(s) who executed the process.", + "type": "array", + "example": "Technician 1; JD; John Doe", + "items":{ + "type": "string" + }, + "user_friendly": "Operator(s)", + "guidelines": "Enter either the name(s) or identifier(s) of the individual(s)." + } + } +} + diff --git a/tests/resources/hca/core/project/project_core.json b/tests/resources/hca/core/project/project_core.json new file mode 100644 index 0000000..28d889a --- /dev/null +++ b/tests/resources/hca/core/project/project_core.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the project.", + "additionalProperties": false, + "required": [ + "project_short_name", + "project_title", + "project_description" + ], + "title": "Project core", + "name": "project_core", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/core/project/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/project_core" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "project_short_name": { + "description": "A short name for the project.", + "type": "string", + "example": "CoolOrganProject.", + "user_friendly": "Project label", + "guidelines": "Project label is a short label by which you refer to the project. It should have no spaces and should be fewer than 50 characters." + }, + "project_title": { + "description": "An official title for the project.", + "type": "string", + "example": "Study of single cells in the human body.", + "user_friendly": "Project title", + "guidelines": "Project title should be fewer than 30 words, such as a title of a grant proposal or a publication." + }, + "project_description": { + "description": "A longer description of the project which includes research goals and experimental approach.", + "type": "string", + "user_friendly": "Project description", + "guidelines": "Project description should be fewer than 300 words, such as an abstract from a grant application or publication." + } + } +} diff --git a/tests/resources/hca/core/protocol/protocol_core.json b/tests/resources/hca/core/protocol/protocol_core.json new file mode 100644 index 0000000..7efd471 --- /dev/null +++ b/tests/resources/hca/core/protocol/protocol_core.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about an intended protocol that was followed in the project.", + "additionalProperties": false, + "required": [ + "protocol_id" + ], + "title": "Protocol core", + "name": "protocol_core", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/core/protocol/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/protocol_core" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "protocol_id":{ + "description": "A unique ID for the protocol.", + "type": "string", + "user_friendly": "Protocol ID", + "guidelines": "Protocol ID should have no spaces." + }, + "protocol_name": { + "description": "A short name for the protocol.", + "type": "string", + "user_friendly": "Protocol name" + }, + "protocol_description": { + "description": "A general description of the protocol.", + "type": "string", + "user_friendly": "Protocol description" + }, + "publication_doi": { + "description": "The publication digital object identifier (doi) for the protocol.", + "type": "string", + "example": "10.1101/193219", + "user_friendly": "Publication DOI" + }, + "protocols_io_doi": { + "description": "The protocols.io digital object identifier (doi) for the protocol.", + "type": "string", + "example": "10.17504/protocols.io.mgjc3un", + "user_friendly": "protocols.io DOI" + }, + "document": { + "description": "A filename of a PDF document containing the details of the protocol.", + "type": "string", + "pattern": "^.*.pdf$", + "user_friendly": "Document filename", + "example": "my_cool_protocol.pdf" + } + } +} diff --git a/tests/resources/hca/module/biomaterial/cell_morphology.json b/tests/resources/hca/module/biomaterial/cell_morphology.json new file mode 100644 index 0000000..f8e94fd --- /dev/null +++ b/tests/resources/hca/module/biomaterial/cell_morphology.json @@ -0,0 +1,71 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to pathological and morphological features of cells.", + "additionalProperties": false, + "title": "Cell morphology", + "name": "cell_morphology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/cell_morphology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "cell_morphology": { + "description": "General description of the morphology of cells.", + "type": "string", + "user_friendly": "Cell morphology", + "example": "adherent cells; form single layer colonies" + }, + "cell_size": { + "description": "Size of cells in Cell size unit.", + "type": "string", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "example": "15; 20-30", + "user_friendly": "Cell size", + "guidelines": "Enter a single value or a range. Average value is acceptable." + }, + "cell_size_unit": { + "description": "The unit in which the Cell size is expressed.", + "type": "object", + "$ref": "module/ontology/length_unit_ontology.json", + "user_friendly": "Cell size unit" + }, + "percent_cell_viability": { + "description": "Percent of cells determined to be viable.", + "type": "number", + "example": 98.7, + "user_friendly": "Percent cell viability", + "guidelines": "Enter a single number. Average value is acceptable." + }, + "cell_viability_method": { + "description": "The method by which cell viability was determined.", + "type": "string", + "example": "Fluorescein diacetate hydrolysis; ATP test", + "user_friendly": "Cell viability method" + }, + "cell_viability_result": { + "description": "Result of the cell viability test.", + "type": "string", + "enum": [ + "pass", + "fail" + ], + "example": "Should be one of: pass, fail", + "user_friendly": "Cell viability result" + }, + "percent_necrosis": { + "description" : "Percent of cells identified to be necrotic.", + "type": "number", + "example": 10, + "user_friendly": "Percent necrotic cells", + "guidelines": "Enter a single number. Average value is acceptable." + } + } +} diff --git a/tests/resources/hca/module/biomaterial/death.json b/tests/resources/hca/module/biomaterial/death.json new file mode 100644 index 0000000..6af1593 --- /dev/null +++ b/tests/resources/hca/module/biomaterial/death.json @@ -0,0 +1,93 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to the death of an organism.", + "additionalProperties": false, + "required": [ + "cause_of_death" + ], + "title": "Death", + "name": "death", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/death" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "cause_of_death": { + "description": "Conditions resulting in death.", + "type": "string", + "user_friendly": "Cause of death", + "example": "Hypoxic brain damage; Sudden cardiac arrest", + "guidelines": "Determined from death report for human donor or from research lab for mouse." + }, + "cold_perfused": { + "description": "Whether perfusion with cold fluid was used to help preserve tissues before heart stopped.", + "type": "boolean", + "user_friendly": "Cold perfused", + "example": "Should be one of: yes, no.", + "guidelines": "Enter yes if cold perfused. Otherwise, enter no." + }, + "days_on_ventilator": { + "description": "Number of days on ventilator before death occurred.", + "maximum": 10000, + "minimum": 0, + "type": "number", + "example": 4, + "user_friendly": "Number of days on ventilator" + }, + "hardy_scale": { + "description": "Value on 4-point Hardy scale cause of death classification.", + "maximum": 4, + "minimum": 0, + "type": "integer", + "example": 0, + "user_friendly": "Value on Hardy scale", + "guidelines": "Enter: 0 for ventilator case, 1 for violent and fast death, 2 for fast death of natural causes, 3 for intermediate death, or 4 for slow death." + }, + "time_of_death": { + "description": "Date and time when death was declared.", + "type": "string", + "user_friendly": "Time of death", + "example": "2016-01-21T00:00:00Z; 2016-03", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ. Supplying partial date is allowed.", + "oneOf": [ + { + "format": "date-time" + }, + { + "pattern": "^((19|20)\\d\\d){1}([- \\./][01]\\d){0,1}([- \\./][0-3]\\d){0,1}$" + } + ] + }, + "organ_donation_death_type": { + "description": "Type of death preceding organ donation.", + "type": "string", + "enum": [ + "Donation after circulatory death (DCD)", + "Donation after brainstem death (DBD)" + ], + "user_friendly": "Organ donation death type", + "example": "Should be one of: Donation after circulatory death (DCD), or Donation after brainstem death (DBD).", + "guidelines": "Enter value for organ donors only." + }, + "normothermic_regional_perfusion": { + "description": "Whether entire body was perfused with warm oxygenated blood.", + "type": "string", + "enum": [ + "yes", + "no", + "unknown" + ], + "user_friendly": "Normothermic regional perfusion", + "example": "Should be one of: yes, no, or unknown.", + "guidelines": "Enter yes if entire body (but not limbs) was perfused with warm oxygenated blood. Otherwise, enter no." + } + } +} diff --git a/tests/resources/hca/module/biomaterial/familial_relationship.json b/tests/resources/hca/module/biomaterial/familial_relationship.json new file mode 100644 index 0000000..f982fc2 --- /dev/null +++ b/tests/resources/hca/module/biomaterial/familial_relationship.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about other organisms that this organism is related to.", + "additionalProperties": false, + "title": "Familial relationship", + "name": "familial_relationship", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/familial_relationship" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "parent": { + "description": "The individual's parent.", + "type": "string", + "user_friendly": "Parent", + "guidelines": "Enter the ID of the parent of this individual." + }, + "child": { + "description": "The individual's child.", + "type": "string", + "user_friendly": "Child", + "guidelines": "Enter the ID of the child of this individual." + }, + "sibling": { + "description": "The individual's sibling.", + "type": "string", + "user_friendly": "Sibling", + "guidelines": "Enter the ID of the sibling of this individual." + } + } +} diff --git a/tests/resources/hca/module/biomaterial/growth_conditions.json b/tests/resources/hca/module/biomaterial/growth_conditions.json new file mode 100644 index 0000000..f890d21 --- /dev/null +++ b/tests/resources/hca/module/biomaterial/growth_conditions.json @@ -0,0 +1,109 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to how a biomaterial was grown and/or maintained in a laboratory setting.", + "additionalProperties": false, + "title": "Growth conditions", + "name": "growth_conditions", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/growth_conditions" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "passage_number": { + "description": "The number of passages that the biomaterial has been through.", + "maximum": 1000, + "minimum": 0, + "type": "integer", + "example": 22, + "user_friendly": "Passage number", + "guidelines": "Enter a single integer." + }, + "growth_medium": { + "description": "The solid, liquid, or semi-solid medium used to support growth.", + "type": "string", + "example": "human placental cord serum; RPMI 1640 + 2mM Glutamine + 10-20% FBS", + "user_friendly": "Growth medium" + }, + "culture_environment": { + "description": "Cell culture environment in which cells are grown.", + "type": "string", + "example": "Adherent cell culture; Suspension cell culture", + "user_friendly": "Culture environment" + }, + "mycoplasma_testing_method": { + "description": "The method by which the biomaterial was tested for mycoplasma contamination.", + "type": "string", + "enum": [ + "Direct DNA stain", + "Indirect DNA stain", + "Broth and agar culture", + "PCR", + "Nested PCR", + "ELISA", + "Autoradiography", + "Immunostaining", + "Cell-based assay", + "Microbiological assay" + ], + "example": "Should be one of: Direct DNA stain, Indirect DNA stain, Broth and agar culture, PCR, Nested PCR, ELISA, Autoradiography, Immunostaining, Cell-based assay, or Microbiological assay.", + "user_friendly": "Mycoplasma testing method" + }, + "mycoplasma_testing_results": { + "description": "Whether the biomaterial passed or failed the mycoplasma test.", + "type": "string", + "enum": [ + "pass", + "fail" + ], + "example": "Should be one of: pass, or fail.", + "user_friendly": "Mycoplasma testing results" + }, + "drug_treatment": { + "description": "Description of drugs added to the growth medium.", + "type": "string", + "example": "100 ug/mL ampicillin; 15 ug/mL tetracycline", + "user_friendly": "Drug treatment", + "guidelines": "Provide the drug name and concentration with units. List multiple drugs separated by commas." + }, + "feeder_layer_type": { + "description": "Type of feeder layer cells on which biomaterial was grown.", + "type": "string", + "enum": [ + "feeder-free", + "feeder-dependent, JK1 feeder cells", + "feeder-dependent, SNL 76/7 feeder cells", + "feeder-dependent, human marrow stromal cells", + "feeder-dependent, bovine embryonic fibroblast cells", + "feeder-dependent, mouse embryonic fibroblast cells", + "feeder-dependent, mouse fibroblast STO cells", + "feeder-dependent, mouse bone marrow stromal cells", + "feeder-dependent, mouse yolk sac-derived endothelial cells", + "feeder-dependent, human foreskin fibroblast cells", + "feeder-dependent, human newborn fibroblast cells", + "feeder-dependent, human fetal lung fibroblast cells", + "feeder-dependent, human uterine endometrial cells", + "feeder-dependent, human breast parenchymal cells", + "feeder-dependent, human embryonic fibroblast cells", + "feeder-dependent, human adipose stromal cells", + "feeder-dependent, human amniotic epithelial cells", + "feeder-dependent, human placental fibroblast cells", + "feeder-dependent, human umbilical cord stromal cells", + "feeder-dependent, human fetal muscle cells", + "feeder-dependent, human fetal skin cells", + "feeder-dependent, human fetal liver stromal cells", + "feeder-dependent, human fallopian tubal epithelial cells", + "feeder-dependent, human amniotic mesenchymal cells" + ], + "example": "feeder-free; feeder-dependent, mouse embryonic fibroblast cells", + "user_friendly": "Feeder layer type" + } + } +} diff --git a/tests/resources/hca/module/biomaterial/human_specific.json b/tests/resources/hca/module/biomaterial/human_specific.json new file mode 100644 index 0000000..8a26c68 --- /dev/null +++ b/tests/resources/hca/module/biomaterial/human_specific.json @@ -0,0 +1,38 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information specific to a donor that is a human (Homo sapiens).", + "additionalProperties": false, + "title": "Human-specific", + "name": "human_specific", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/human_specific" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "body_mass_index": { + "description": "The body mass index of the donor.", + "type": "number", + "maximum": 100, + "minimum": 5, + "example": 36.4, + "user_friendly": "Body mass index" + }, + "ethnicity": { + "description": "Ethnicity of the donor.", + "type": "array", + "items": { + "$ref": "module/ontology/ethnicity_ontology.json" + }, + "user_friendly": "Ethnicity", + "guidelines": "Enter one or more ethnicities, separated by a comma." + } + } +} diff --git a/tests/resources/hca/module/biomaterial/medical_history.json b/tests/resources/hca/module/biomaterial/medical_history.json new file mode 100644 index 0000000..5382ca1 --- /dev/null +++ b/tests/resources/hca/module/biomaterial/medical_history.json @@ -0,0 +1,65 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the medical history of a donor.", + "additionalProperties": false, + "title": "Medical history", + "name": "medical_history", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/medical_history" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "alcohol_history": { + "description": "Estimated amount of alcohol consumed per day.", + "type": "string", + "user_friendly": "Alcohol history", + "example": "3-6 alcohol units/day; 1 drink per day", + "guidelines": "Enter the amount consumed per day using units such as alcohol units (10mL or 8g of alcohol) or drinks (14g of alcohol)." + }, + "medication": { + "description": "Medications the individual was taking at time of biomaterial collection.", + "type": "string", + "user_friendly": "Medications", + "example": "Naproxen 500mg/day; Citalopram 20mg/day", + "guidelines": "Enter the medication and dosage. Separate multiple medications with commas." + }, + "smoking_history": { + "description": "Estimated number of cigarettes smoked per day.", + "type": "string", + "user_friendly": "Smoking history", + "example": "20 cigarettes/day for 25 years, stopped 2000", + "guidelines": "Enter an estimated number of cigarettes smoked per day and for how many years." + }, + "nutritional_state": { + "description": "Nutritional state of individual at time of biomaterial collection.", + "type": "string", + "enum": [ + "normal", + "fasting", + "feeding tube removed" + ], + "user_friendly": "Nutritional state", + "example": "Should be one of: normal, fasting, or feeding tube removed." + }, + "test_results": { + "description": "Results from medical tests performed on the individual.", + "type": "string", + "user_friendly": "Test results", + "example": "lipid panel shows normal level of LDL (124 mg/dL); HIV, HBV, HCV: Negative" + }, + "treatment": { + "description": "Treatments the individual has undergone prior to biomaterial collection.", + "type": "string", + "user_friendly": "Treatments", + "example": "Patient treated with antibiotics for a urinary tract infection; Patient treated with chemotherapy (Epirubicin, cisplatin, capecitabine) to treat stomach cancer" + } + } +} diff --git a/tests/resources/hca/module/biomaterial/mouse_specific.json b/tests/resources/hca/module/biomaterial/mouse_specific.json new file mode 100644 index 0000000..9eec96b --- /dev/null +++ b/tests/resources/hca/module/biomaterial/mouse_specific.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information specific to an organism that is a mouse (Mus musculus).", + "additionalProperties": false, + "title": "Mouse-specific", + "name": "mouse_specific", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/mouse_specific" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "strain": { + "description": "The name of the mouse strain.", + "type": "array", + "items": { + "$ref": "module/ontology/strain_ontology.json" + }, + "user_friendly": "Mouse strain" + } + } +} diff --git a/tests/resources/hca/module/biomaterial/preservation_storage.json b/tests/resources/hca/module/biomaterial/preservation_storage.json new file mode 100644 index 0000000..6aa01c4 --- /dev/null +++ b/tests/resources/hca/module/biomaterial/preservation_storage.json @@ -0,0 +1,71 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to how a biomaterial was preserved and/or stored over a period of time.", + "additionalProperties": false, + "title": "Preservation and storage", + "name": "preservation_storage", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/preservation_storage" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "storage_method": { + "description": "The method by which a biomaterial was stored after preservation or before another protocol was used.", + "type": "string", + "enum": [ + "ambient temperature", + "cut slide", + "fresh", + "frozen at -70C", + "frozen at -80C", + "frozen at -150C", + "frozen in liquid nitrogen", + "frozen in vapor phase", + "paraffin block", + "RNAlater at 4C", + "RNAlater at 25C", + "RNAlater at -20C" + ], + "example": "frozen in liquid nitrogen; fresh", + "user_friendly": "Storage method" + }, + "storage_time": { + "description": "Length of time the biomaterial was stored for in Storage time units.", + "type": "number", + "example": 5, + "user_friendly": "Storage time" + }, + "storage_time_unit": { + "description": "The unit in which Storage time is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Storage time unit" + }, + "preservation_method": { + "description": "The method by which a biomaterial was preserved through the use of chemicals, cold, or other means to prevent or retard biological or physical deterioration.", + "type": "string", + "enum": [ + "cryopreservation in liquid nitrogen (dead tissue)", + "cryopreservation in dry ice (dead tissue)", + "cryopreservation of live cells in liquid nitrogen", + "cryopreservation, other", + "formalin fixed, unbuffered", + "formalin fixed, buffered", + "formalin fixed and paraffin embedded", + "hypothermic preservation media at 2-8C", + "fresh" + ], + "example": "cryopreservation in liquid nitrogen (dead tissue); fresh", + "user_friendly": "Preservation method", + "guidelines": "Enter 'fresh' if not preserved." + } + } +} diff --git a/tests/resources/hca/module/biomaterial/state_of_specimen.json b/tests/resources/hca/module/biomaterial/state_of_specimen.json new file mode 100644 index 0000000..b0b50da --- /dev/null +++ b/tests/resources/hca/module/biomaterial/state_of_specimen.json @@ -0,0 +1,92 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "State of specimen at time of collection.", + "additionalProperties": false, + "title": "State of specimen", + "name": "state_of_specimen", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/state_of_specimen" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "autolysis_score": { + "description": "State of tissue breakdown due to self-digestion.", + "type": "string", + "enum": [ + "none", + "mild", + "moderate" + ], + "user_friendly": "Autolysis score", + "example": "Should be one of: none, mild, or moderate." + }, + "gross_description": { + "description": "Color, size, and other aspects of specimen as visible to naked eye.", + "type": "string", + "user_friendly": "Gross description", + "example": "focal wedge shaped region of tan-orange discoloration; cystic" + }, + "gross_images": { + "description": "List of filenames of photographs of specimen without magnification.", + "type": "array", + "items": { + "pattern": "^.*.jpg$|^.*.jpeg$|^.*.tiff$|^.*.png$", + "type": "string" + }, + "user_friendly": "Gross image", + "example": "my_gross_image_file.jpg", + "guidelines": "File must be of format JPEG, TIFF, or PNG." + }, + "ischemic_temperature": { + "description": "Whether specimen experienced warm or cold ischemia.", + "type": "string", + "enum": [ + "warm", + "cold" + ], + "user_friendly": "Ischemic temperature", + "example": "Should be one of: warm, or cold." + }, + "ischemic_time": { + "description": "Duration of time, in seconds, between when the specimen stopped receiving oxygen and when it was preserved or processed.", + "type": "integer", + "maximum": 1000000, + "minimum": 0, + "example": 7200, + "user_friendly": "Ischemic time" + }, + "microscopic_description": { + "description": "How the specimen looks under the microscope and how it compares with normal cells.", + "type": "string", + "user_friendly": "Microscopic description", + "example": "Mixture of different cell sizes apparent; Dead cells are quite faint on microscope" + }, + "microscopic_images": { + "description": "List of filenames of photographs of specimen under microscope.", + "type": "array", + "items": { + "type": "string", + "pattern": "^.*.jpg$|^.*.jpeg$|^.*.tiff$|^.*.png$" + }, + "user_friendly": "Microscopic image", + "example": "my_microscopic_image_file.jpg", + "guidelines": "File must be of format JPEG, TIFF, or PNG." + }, + "postmortem_interval": { + "description": "Duration of time between when death was declared and when the specimen was preserved or processed.", + "type": "integer", + "minimum": 0, + "example": 2400, + "user_friendly": "Post-mortem interval", + "guidelines": "Enter time in seconds." + } + } +} diff --git a/tests/resources/hca/module/biomaterial/timecourse.json b/tests/resources/hca/module/biomaterial/timecourse.json new file mode 100644 index 0000000..43efddc --- /dev/null +++ b/tests/resources/hca/module/biomaterial/timecourse.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to a timecourse.", + "additionalProperties": false, + "required": [ + "value", + "unit" + ], + "title": "Timecourse", + "name": "timecourse", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/timecourse" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "value": { + "description": "The numerical value in Timecourse unit associated with a time interval used in the experiment.", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "type": "string", + "example": "2; 5.5-10.5", + "user_friendly": "Timecourse value", + "guidelines": "Enter either a single value or a range of values. Indicate a range using a hyphen." + }, + "unit": { + "description": "The unit in which the Timecourse value is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Timecourse unit" + }, + "relevance": { + "description": "Relevance of the Timecourse value/unit to the experiment.", + "type": "string", + "example": "Collection after tumor cells injected into the mammary gland; Time tissue underwent liberase digestion", + "user_friendly": "Timecourse relevance" + } + } +} diff --git a/tests/resources/hca/module/ontology/biological_macromolecule_ontology.json b/tests/resources/hca/module/ontology/biological_macromolecule_ontology.json new file mode 100644 index 0000000..03c9723 --- /dev/null +++ b/tests/resources/hca/module/ontology/biological_macromolecule_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a biological macromolecule-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Biological macromolecule ontology", + "name": "biological_macromolecule_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/biological_macromolecule_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the biological macromolecule being used.", + "type": "string", + "example": "polyA RNA; mRNA", + "user_friendly": "Biological macromolecule" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:chebi", "obo:obi"], + "classes": ["EFO:0004446"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "OBI:0000869; CHEBI:33699", + "user_friendly": "Biological macromolecule ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "polyA RNA; messenger RNA", + "user_friendly": "Biological macromolecule ontology label" + } + } +} diff --git a/tests/resources/hca/module/ontology/cell_cycle_ontology.json b/tests/resources/hca/module/ontology/cell_cycle_ontology.json new file mode 100644 index 0000000..292faa9 --- /dev/null +++ b/tests/resources/hca/module/ontology/cell_cycle_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a cell cycle-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Cell cycle ontology", + "name": "cell_cycle_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/cell_cycle_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a cell cycle of the cells in the specimen.", + "type": "string", + "user_friendly": "Cell cycle", + "example": "meiotic cell cycle; mitotic G1 phase" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao", "obo:go"], + "classes": ["GO:0007049", "GO:0022403"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Cell cycle ontology ID", + "example": "GO:0051321; GO:0000080" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Cell cycle ontology label", + "example": "meiotic cell cycle; mitotic G1 phase" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/cell_type_ontology.json b/tests/resources/hca/module/ontology/cell_type_ontology.json new file mode 100644 index 0000000..f86ff17 --- /dev/null +++ b/tests/resources/hca/module/ontology/cell_type_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a cell type-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Cell type ontology", + "name": "cell_type_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/cell_type_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a cell type supplied by a user.", + "type": "string", + "user_friendly": "Cell type", + "example": "bone marrow hematopoietic cell; cardiac muscle cell" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao", "obo:cl"], + "classes": ["CL:0000003"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Cell type ontology ID", + "example": "CL:1001610; CL:0000746" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Cell type ontology label", + "example": "bone marrow hematopoietic cell; cardiac muscle cell" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/cellular_component_ontology.json b/tests/resources/hca/module/ontology/cellular_component_ontology.json new file mode 100644 index 0000000..d42df50 --- /dev/null +++ b/tests/resources/hca/module/ontology/cellular_component_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with an intra-cellular structure ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Cellular component ontology", + "name": "cellular_component_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/cellular_component_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a subcellular structure.", + "type": "string", + "user_friendly": "Subcellular structure", + "example": "cytoplasm; nucleus" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao", "obo:go"], + "classes": ["GO:0005575"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Subcellular structure ontology ID", + "example": "GO:0005737; GO:0005634" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Subcellular structure ontology label", + "example": "cytoplasm; nucleus" + } + } +} diff --git a/tests/resources/hca/module/ontology/contributor_role_ontology.json b/tests/resources/hca/module/ontology/contributor_role_ontology.json new file mode 100644 index 0000000..b3c4290 --- /dev/null +++ b/tests/resources/hca/module/ontology/contributor_role_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that describes the role of a contributor in the project.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Contributor role ontology", + "name": "contributor_role_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/contributor_role_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The primary role of the contributor in the project.", + "type": "string", + "example": "principal investigator; experimental scientist", + "user_friendly": "Contributor role" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["BFO:0000023"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "EFO:0009736; EFO:0009741", + "user_friendly": "Contributor role ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "principal investigator; experimental scientist", + "user_friendly": "Contributor role ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/development_stage_ontology.json b/tests/resources/hca/module/ontology/development_stage_ontology.json new file mode 100644 index 0000000..bd743b1 --- /dev/null +++ b/tests/resources/hca/module/ontology/development_stage_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a development stage-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Development stage ontology", + "name": "development_stage_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/development_stage_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the development stage of the organism.", + "type": "string", + "user_friendly": "Development stage", + "example": "human adult stage; Theiler stage 28" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:hcao"], + "classes": ["EFO:0000399", "HsapDv:0000000", "UBERON:0000105"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Development stage ontology ID", + "example": "HsapDv:0000087; EFO:0002588" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Development stage ontology label", + "example": "human adult stage; Theiler stage 28" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/disease_ontology.json b/tests/resources/hca/module/ontology/disease_ontology.json new file mode 100644 index 0000000..db0e3b0 --- /dev/null +++ b/tests/resources/hca/module/ontology/disease_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a disease-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Disease ontology", + "name": "disease_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/disease_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The text for the term as the user provides it.", + "type": "string", + "user_friendly": "Disease", + "example": "type 2 diabetes mellitus; normal" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:mondo", "obo:efo", "obo:hp"], + "classes": ["MONDO:0000001", "PATO:0000461", "HP:0000118"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": true + }, + "user_friendly": "Disease ontology ID", + "example": "MONDO:0005148; PATO:0000461; HP:0001397" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Disease ontology label", + "example": "type 2 diabetes mellitus; normal" + } + } +} diff --git a/tests/resources/hca/module/ontology/enrichment_ontology.json b/tests/resources/hca/module/ontology/enrichment_ontology.json new file mode 100644 index 0000000..922c890 --- /dev/null +++ b/tests/resources/hca/module/ontology/enrichment_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Enrichment ontology", + "name": "enrichment_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/enrichment_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of an enrichment approach being used.", + "type": "string", + "user_friendly": "Enrichment", + "example": "fluorescence-activated cell sorting; Ficoll-Hypaque method" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["EFO:0009090"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Enrichment ontology ID", + "example": "EFO:0009108; EFO:0009110" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Enrichment ontology label", + "example": "fluorescence-activated cell sorting; Ficoll-Hypaque method" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/ethnicity_ontology.json b/tests/resources/hca/module/ontology/ethnicity_ontology.json new file mode 100644 index 0000000..59538cb --- /dev/null +++ b/tests/resources/hca/module/ontology/ethnicity_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a ethnicity-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Ethnicity ontology", + "name": "ethnicity_ontology", + "type": "object", + "properties": { + "describedBy" : { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/ethnicity_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The ethnicity of the human donor.", + "type": "string", + "user_friendly": "Ethnicity", + "example": "European; Hispanic or Latin American" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hancestro"], + "classes": ["HANCESTRO:0004"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Ethnicity ontology ID", + "example": "HANCESTRO:0005; HANCESTRO:0014" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Ethnicity ontology label", + "example": "European; Hispanic or Latin American" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/file_content_ontology.json b/tests/resources/hca/module/ontology/file_content_ontology.json new file mode 100644 index 0000000..ff54ade --- /dev/null +++ b/tests/resources/hca/module/ontology/file_content_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that describes the contents of a file.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "File content ontology", + "name": "file_content_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/file_content_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "General description of the contents of the file.", + "type": "string", + "example": "DNA sequence (raw); Sequence alignment", + "user_friendly": "Content description" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:edam", "obo:efo"], + "classes": ["data:0006", "IAO:0000030"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "data:3497; data:0863", + "user_friendly": "Content description ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "DNA sequence (raw); Sequence alignment", + "user_friendly": "Content description ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/file_format_ontology.json b/tests/resources/hca/module/ontology/file_format_ontology.json new file mode 100644 index 0000000..3fb9c46 --- /dev/null +++ b/tests/resources/hca/module/ontology/file_format_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a file format-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "File format ontology", + "name": "file_format_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/file_format" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the file format.", + "type": "string", + "example": "FASTQ; JSON", + "user_friendly": "File format" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:edam"], + "classes": ["format:1915"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "format:1930; format:3464", + "user_friendly": "File format ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "FASTQ; JSON", + "user_friendly": "File format ontology label" + } + } +} diff --git a/tests/resources/hca/module/ontology/instrument_ontology.json b/tests/resources/hca/module/ontology/instrument_ontology.json new file mode 100644 index 0000000..359adc3 --- /dev/null +++ b/tests/resources/hca/module/ontology/instrument_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a instrument-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Instrument ontology", + "name": "instrument_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/instrument_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The full name of the instrument used.", + "type": "string", + "user_friendly": "Instrument", + "example": "Illumina HiSeq 2500; ONT MinION" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["EFO:0000548"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Instrument ontology ID", + "example": "EFO:0008565; EFO:0008632" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Instrument ontology label", + "example": "Illumina HiSeq 2500; ONT MinION" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/length_unit_ontology.json b/tests/resources/hca/module/ontology/length_unit_ontology.json new file mode 100644 index 0000000..713a558 --- /dev/null +++ b/tests/resources/hca/module/ontology/length_unit_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a cell type-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Length unit ontology", + "name": "length_unit_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/length_unit_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a length unit being used.", + "type": "string", + "user_friendly": "Length unit", + "example": "micrometer; meter" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:uo"], + "classes": ["UO:0000001"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Length unit ontology ID", + "example": "UO:0000017; UO:0000008" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Length unit ontology label", + "example": "micrometer; meter" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/library_amplification_ontology.json b/tests/resources/hca/module/ontology/library_amplification_ontology.json new file mode 100644 index 0000000..f74f9f6 --- /dev/null +++ b/tests/resources/hca/module/ontology/library_amplification_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Library amplification ontology", + "name": "library_amplification_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/library_amplification_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a library amplification approach being used.", + "type": "string", + "user_friendly": "Library amplification", + "example": "PCR; in vitro transcription" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["EFO:0009107"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Library amplification ontology ID", + "example": "OBI:0000415; EFO:0009013" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Library amplification ontology label", + "example": "PCR; in vitro transcription" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/library_construction_ontology.json b/tests/resources/hca/module/ontology/library_construction_ontology.json new file mode 100644 index 0000000..7215f8d --- /dev/null +++ b/tests/resources/hca/module/ontology/library_construction_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Library construction ontology", + "name": "library_construction_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/library_construction_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a library construction approach being used.", + "type": "string", + "user_friendly": "Library construction", + "example": "10X v2 sequencing; Smart-seq2" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["OBI:0000711"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Library construction ontology ID", + "example": "EFO:0009310; EFO:0008931" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Library construction ontology label", + "example": "10X v2 sequencing; Smart-seq2" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/mass_unit_ontology.json b/tests/resources/hca/module/ontology/mass_unit_ontology.json new file mode 100644 index 0000000..e95c1eb --- /dev/null +++ b/tests/resources/hca/module/ontology/mass_unit_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a cell type-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Mass unit ontology", + "name": "mass_unit_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/mass_unit_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a mass unit being used.", + "type": "string", + "user_friendly": "Mass unit", + "example": "kilogram; microgram" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:uo"], + "classes": ["UO:0000002"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Mass unit ontology ID", + "example": "UO:0000009; UO:0000023" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Mass unit ontology label", + "example": "kilogram; microgram" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/microscopy_ontology.json b/tests/resources/hca/module/ontology/microscopy_ontology.json new file mode 100644 index 0000000..a521eec --- /dev/null +++ b/tests/resources/hca/module/ontology/microscopy_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a microscopy-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Microscopy ontology", + "name": "microscopy_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/microscopy_ontology", + "type": "string" + }, + "schema_version": { + "description": "Version number in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the type of microscopy used in an imaging experiment.", + "type": "string", + "example": "confocal microscopy; fluorescence microscopy", + "user_friendly": "Microscopy" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao", "obo:fbbi"], + "classes": ["FBbi:00000241"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "FBbi:00000251; FBbi:00000246", + "user_friendly": "Microscopy ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "confocal microscopy; fluorescence microscopy", + "user_friendly": "Microscopy ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/organ_ontology.json b/tests/resources/hca/module/ontology/organ_ontology.json new file mode 100644 index 0000000..5088c5f --- /dev/null +++ b/tests/resources/hca/module/ontology/organ_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with an anatomy-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Organ ontology", + "name": "organ_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/organ_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The text for the term as the user provides it.", + "type": "string", + "user_friendly": "Organ", + "example": "heart; immune system" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao", "obo:uberon"], + "classes": ["UBERON:0000465"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": true + }, + "user_friendly": "Organ ontology ID", + "example": "UBERON:0000948; UBERON:0002405" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Organ ontology label", + "example": "heart; immune system" + } + } +} diff --git a/tests/resources/hca/module/ontology/organ_part_ontology.json b/tests/resources/hca/module/ontology/organ_part_ontology.json new file mode 100644 index 0000000..2d29f06 --- /dev/null +++ b/tests/resources/hca/module/ontology/organ_part_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with an anatomy-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Organ part ontology", + "name": "organ_part_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/organ_part_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The text for the term as the user provides it.", + "type": "string", + "user_friendly": "Organ part", + "example": "bone marrow; islet of Langerhans" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao", "obo:uberon"], + "classes": ["UBERON:0000465"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": true + }, + "user_friendly": "Organ part ontology ID", + "example": "UBERON:0002371; UBERON:0000006" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Organ part ontology label", + "example": "bone marrow; islet of Langerhans" + } + } +} diff --git a/tests/resources/hca/module/ontology/process_type_ontology.json b/tests/resources/hca/module/ontology/process_type_ontology.json new file mode 100644 index 0000000..8ec9c8c --- /dev/null +++ b/tests/resources/hca/module/ontology/process_type_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Process type ontology", + "name": "process_type_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/process_type_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a process type being used.", + "type": "string", + "example": "enzymatic dissociation; blood draw", + "user_friendly": "Process type" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["EFO:0002694"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "EFO:0009128; EFO:0009121", + "user_friendly": "Process type ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "enzymatic dissociation; blood draw", + "user_friendly": "Process type ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/protocol_type_ontology.json b/tests/resources/hca/module/ontology/protocol_type_ontology.json new file mode 100644 index 0000000..ca6af71 --- /dev/null +++ b/tests/resources/hca/module/ontology/protocol_type_ontology.json @@ -0,0 +1,48 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a protocol-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Protocol type ontology", + "name": "protocol_type_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/protocol_type_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a protocol type used.", + "type": "string", + "example": "dissociation protocol; enrichment protocol", + "user_friendly": "Protocol type" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:obi"], + "classes": ["OBI:0000272"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + },"example": "EFO:0009088; EFO:0009089", + "user_friendly": "Protocol type ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "dissociation protocol; enrichment protocol", + "user_friendly": "Protocol type ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/sequencing_ontology.json b/tests/resources/hca/module/ontology/sequencing_ontology.json new file mode 100644 index 0000000..dd9baf8 --- /dev/null +++ b/tests/resources/hca/module/ontology/sequencing_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Sequencing ontology", + "name": "sequencing_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/sequencing_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a sequencing approach being used.", + "type": "string", + "example": "tag based single cell RNA sequencing; full length single cell RNA sequencing", + "user_friendly": "Sequencing approach" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo"], + "classes": ["OBI:0000070"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "EFO:0008440; EFO:0008441", + "user_friendly": "Sequencing approach ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "tag based single cell RNA sequencing; full length single cell RNA sequencing", + "user_friendly": "Sequencing approach ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/species_ontology.json b/tests/resources/hca/module/ontology/species_ontology.json new file mode 100644 index 0000000..4aa5084 --- /dev/null +++ b/tests/resources/hca/module/ontology/species_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a species-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Species ontology", + "name": "species_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/species_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the species to which the organism belongs.", + "type": "string", + "example": "Homo sapiens; Mus musculus", + "user_friendly": "Species" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:NCBITaxon"], + "classes": ["OBI:0100026", "NCBITaxon:2759"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "NCBITaxon:9606; NCBITaxon:10090", + "user_friendly": "Species ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "Homo sapiens; Mus musculus", + "user_friendly": "Species ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/strain_ontology.json b/tests/resources/hca/module/ontology/strain_ontology.json new file mode 100644 index 0000000..5ea5ff1 --- /dev/null +++ b/tests/resources/hca/module/ontology/strain_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a strain-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Strain ontology", + "name": "strain_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/strain_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the strain to which the organism belongs.", + "type": "string", + "example": "C57BL/6; BALB/c", + "user_friendly": "Strain" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:NCBITaxon"], + "classes": ["NCBITaxon:10090"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": true + }, + "example": "EFO:0004472; EFO:0000602", + "user_friendly": "Strain ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "C57BL/6; BALB/c", + "user_friendly": "Strain ontology label" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/ontology/target_pathway_ontology.json b/tests/resources/hca/module/ontology/target_pathway_ontology.json new file mode 100644 index 0000000..b9329b3 --- /dev/null +++ b/tests/resources/hca/module/ontology/target_pathway_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Target pathway ontology", + "name": "target_pathway_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/target_pathway_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of the treatment target pathway.", + "type": "string", + "user_friendly": "Target pathway", + "example": "positive regulation of memory T cell differentiation" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:hcao"], + "classes": ["GO:0050789"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Target pathway ontology ID", + "example": "GO:0043382" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Target pathway ontology label", + "example": "positive regulation of memory T cell differentiation" + } + } +} diff --git a/tests/resources/hca/module/ontology/time_unit_ontology.json b/tests/resources/hca/module/ontology/time_unit_ontology.json new file mode 100644 index 0000000..4426ca7 --- /dev/null +++ b/tests/resources/hca/module/ontology/time_unit_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a time unit-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Time unit ontology", + "name": "time_unit_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/time_unit_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a time unit being used.", + "type": "string", + "example": "second; week", + "user_friendly": "Time unit" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:uo"], + "classes": ["UO:0000003", "UO:0000149"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "example": "UO:0000010; UO:0000034", + "user_friendly": "Time unit ontology ID" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "example": "second; week", + "user_friendly": "Time unit ontology label" + } + } +} diff --git a/tests/resources/hca/module/ontology/treatment_method_ontology.json b/tests/resources/hca/module/ontology/treatment_method_ontology.json new file mode 100644 index 0000000..35149ac --- /dev/null +++ b/tests/resources/hca/module/ontology/treatment_method_ontology.json @@ -0,0 +1,49 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A term that may be associated with a process-related ontology term.", + "additionalProperties": false, + "required": [ + "text" + ], + "title": "Treatment method ontology", + "name": "treatment_method_ontology", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/ontology/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/treatment_ontology" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "text": { + "description": "The name of a treatment method or approach being used.", + "type": "string", + "user_friendly": "Treatment method", + "example": "T cell activation assay" + }, + "ontology": { + "description": "An ontology term identifier in the form prefix:accession.", + "type": "string", + "graph_restriction": { + "ontologies" : ["obo:efo", "obo:obi"], + "classes": ["OBI:0000070"], + "relations": ["rdfs:subClassOf"], + "direct": false, + "include_self": false + }, + "user_friendly": "Treatment ontology ID", + "example": "EFO:0030037" + }, + "ontology_label": { + "description": "The preferred label for the ontology term referred to in the ontology field. This may differ from the user-supplied value in the text field.", + "type": "string", + "user_friendly": "Treatment ontology label", + "example": "T cell activation assay" + } + } +} diff --git a/tests/resources/hca/module/process/purchased_reagents.json b/tests/resources/hca/module/process/purchased_reagents.json new file mode 100644 index 0000000..66fe6d2 --- /dev/null +++ b/tests/resources/hca/module/process/purchased_reagents.json @@ -0,0 +1,59 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information describing purchased kits or reagents used in a protocol.", + "additionalProperties": false, + "title": "Purchased reagents", + "name": "purchased_reagents", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/process/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/purchased_reagents" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "retail_name": { + "description": "The retail name of the kit/reagent.", + "type": "string", + "example": "SureCell WTA 3' Library Prep Kit; CytoTune iPS 2.0 Sendai Reprogramming Kit", + "user_friendly": "Retail name" + }, + "catalog_number": { + "description": "The catalog number of the kit/reagent.", + "type": "string", + "example": "20014279", + "user_friendly": "Catalog number" + }, + "manufacturer": { + "description": "The manufacturer of the kit/reagent.", + "type": "string", + "example": "Illumina; ThermoFisher Scientific", + "user_friendly": "Manufacturer" + }, + "lot_number": { + "description": "The batch or lot number of the kit/reagent.", + "type": "string", + "example": "10001A", + "user_friendly": "Batch/lot number" + }, + "expiry_date": { + "description": "The date of expiration for the kit/reagent.", + "type": "string", + "example": "2018-01-31; 2018-01", + "user_friendly": "Expiry date", + "pattern": "^((19|20)\\d\\d){1}([- \\./][01]\\d){0,1}([- \\./][0-3]\\d){0,1}$", + "guidelines": "Enter the date in date format: yyyy-mm-dd. Supplying partial date is allowed." + }, + "kit_titer": { + "description": "Appropriate titer and volume recommendations found in kit/reagent Certificate of Analysis.", + "type": "string", + "example": "3.0x10^7", + "user_friendly": "Titer" + } + } +} diff --git a/tests/resources/hca/module/process/sequencing/S10x.json b/tests/resources/hca/module/process/sequencing/S10x.json new file mode 100644 index 0000000..9f9bbad --- /dev/null +++ b/tests/resources/hca/module/process/sequencing/S10x.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information specific to 10x experiments.", + "additionalProperties": false, + "title": "S10x", + "name": "S10x", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/process/sequencing/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/10x" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "fastq_method": { + "description": "Method used for the generation of fastq files from bcl files.", + "type": "string", + "example": "Cellranger mkfastq; bcl2fastq2", + "user_friendly": "Fastq creation method" + }, + "fastq_method_version": { + "description": "Version of the program used for fastq generation.", + "type": "string", + "example": "Cellranger 2.1.1; v2.20", + "user_friendly": "Fastq creation method version" + }, + "pooled_channels": { + "description": "The number of channels pooled within a sequencing lane.", + "type": "number", + "example": 4, + "user_friendly": "Pooled channels" + }, + "drop_uniformity": { + "description": "Whether drop uniformity was achieved as a result of visual inspection of emulsion after a 10x run.", + "type": "boolean", + "example": "Should be one of: yes, or no.", + "user_friendly": "Drop uniformity" + } + } +} diff --git a/tests/resources/hca/module/process/sequencing/barcode.json b/tests/resources/hca/module/process/sequencing/barcode.json new file mode 100644 index 0000000..f6cbb88 --- /dev/null +++ b/tests/resources/hca/module/process/sequencing/barcode.json @@ -0,0 +1,64 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about barcodes used in a protocol.", + "additionalProperties": false, + "required": [ + "barcode_offset", + "barcode_length", + "barcode_read" + ], + "title": "Barcode", + "name": "barcode", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/process/sequencing/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/barcode" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "barcode_read": { + "description": "The read in which the barcode is found.", + "type": "string", + "enum": [ + "Read 1", + "Read 2", + "Read 3", + "Read 4", + "i7 Index", + "i5 Index" + ], + "user_friendly": "Barcode-containing read", + "example": "Should be one of: Read 1, Read 2, i7 Index, or i5 Index." + }, + "barcode_offset": { + "description": "The 0-based offset of start of barcode in read.", + "type": "integer", + "maximum": 50, + "minimum": 0, + "example": 0, + "user_friendly": "Barcode offset", + "guidelines": "Enter 0 for beginning of read." + }, + "barcode_length": { + "description": "Length of barcode in nucleotides.", + "type": "integer", + "maximum": 50, + "minimum": 0, + "example": 28, + "user_friendly": "Barcode length" + }, + "white_list_file": { + "description": "Name of file containing legitimate barcode sequences.", + "type": "string", + "guidelines": "Unused for randomly generated barcodes.", + "user_friendly": "White list barcode file", + "example": "barcode_whitelist_file.txt" + } + } +} diff --git a/tests/resources/hca/module/process/sequencing/insdc_experiment.json b/tests/resources/hca/module/process/sequencing/insdc_experiment.json new file mode 100644 index 0000000..7bc9189 --- /dev/null +++ b/tests/resources/hca/module/process/sequencing/insdc_experiment.json @@ -0,0 +1,32 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to an INSDC experiment.", + "additionalProperties": false, + "required": [ + "insdc_experiment_accession" + ], + "title": "INSDC experiment", + "name": "insdc_experiment", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/process/sequencing/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/insdc_experiment" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "insdc_experiment_accession": { + "description": "An International Nucleotide Sequence Database Collaboration (INSDC) experiment accession.", + "pattern": "^[D|E|S]RX[0-9]+$", + "type": "string", + "user_friendly": "INSDC experiment accession", + "example": "SRX0000000", + "guidelines": "Enter accession if experiment has been archived. Accession can be from the DDBJ, NCBI, or EMBL-EBI and must start with DRX, SRX, or ERX, respecitvely." + } + } +} diff --git a/tests/resources/hca/module/process/sequencing/plate_based_sequencing.json b/tests/resources/hca/module/process/sequencing/plate_based_sequencing.json new file mode 100644 index 0000000..e91665f --- /dev/null +++ b/tests/resources/hca/module/process/sequencing/plate_based_sequencing.json @@ -0,0 +1,50 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information specific to plate-based sequencing experiments.", + "additionalProperties": false, + "required": [ + "plate_label" + ], + "title": "Plate-based sequencing", + "name": "plate_based_sequencing", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/process/sequencing/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/plate_based_sequencing" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "plate_label": { + "description": "A label or name for the plate on which the well is located.", + "type": "string", + "user_friendly": "Plate label", + "example": "2217", + "guidelines": "Plate label should be unique in the project." + }, + "well_label": { + "description": "A label or name for the well in which the cell is located.", + "type": "string", + "user_friendly": "Well label", + "example": "A1", + "guidelines": "Well label should be unique for the plate." + }, + "well_quality": { + "description": "Quality of well if imaged before sequencing.", + "type": "string", + "enum": [ + "OK", + "control, 2-cell well", + "control, empty well", + "low quality cell" + ], + "user_friendly": "Well quality", + "example": "Should be one of: 'OK', 'control, 2-cell well', 'control, empty well', or 'low quality cell'." + } + } +} diff --git a/tests/resources/hca/module/project/contact.json b/tests/resources/hca/module/project/contact.json new file mode 100644 index 0000000..357a6e8 --- /dev/null +++ b/tests/resources/hca/module/project/contact.json @@ -0,0 +1,90 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about an individual who submitted or contributed to a project.", + "additionalProperties": false, + "required": [ + "name", + "institution" + ], + "title": "Contact", + "name": "contact", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/project/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/contact" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "name": { + "description": "Name of individual who has contributed to the project.", + "type": "string", + "example": "John,D,Doe; Jane,,Smith", + "guidelines": "Enter in the format: first name,middle name or initial,last name.", + "user_friendly": "Contact name" + }, + "email": { + "description": "Email address for the individual.", + "type": "string", + "example": "dummy@email.com", + "format": "email", + "user_friendly": "Email address" + }, + "phone": { + "description": "Phone number of the individual or their lab.", + "type": "string", + "example": "(+1) 234-555-6789", + "guidelines": "Include the country code.", + "user_friendly": "Phone number" + }, + "institution": { + "description": "Name of primary institute where the individual works.", + "type": "string", + "user_friendly": "Institute", + "example": "EMBL-EBI; University of Washington" + }, + "laboratory": { + "description": "Name of lab or department within the institute where the individual works.", + "type": "string", + "user_friendly": "Laboratory/Department", + "example": "Division of Vaccine Discovery; Department of Biology" + }, + "address": { + "description": "Street address where the individual works.", + "type": "string", + "example": "0000 Main Street, Nowheretown, MA, 12091", + "guidelines": "Include street name and number, city, country division, and postal code.", + "user_friendly": "Street address" + }, + "country": { + "description": "Country where the individual works.", + "type": "string", + "user_friendly": "Country", + "example": "USA" + }, + "corresponding_contributor": { + "description": "Whether the individual is a primary point of contact for the project.", + "type": "boolean", + "user_friendly": "Corresponding contributor", + "example": "Should be one of: yes, or no." + }, + "project_role": { + "description": "Primary role of the individual in the project.", + "type": "object", + "$ref": "module/ontology/contributor_role_ontology.json", + "example": "principal investigator; computational scientist", + "user_friendly": "Project role" + }, + "orcid_id": { + "description": "The individual's ORCID ID linked to previous work.", + "type": "string", + "example": "0000-1111-2222-3333", + "user_friendly": "ORCID ID" + } + } +} diff --git a/tests/resources/hca/module/project/funder.json b/tests/resources/hca/module/project/funder.json new file mode 100644 index 0000000..bb09978 --- /dev/null +++ b/tests/resources/hca/module/project/funder.json @@ -0,0 +1,45 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the project funding source.", + "additionalProperties": false, + "required": [ + "grant_id", + "organization" + ], + "title": "Funder", + "name": "funder", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/project/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/funder" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "grant_title": { + "description": "The name of the grant funding the project.", + "type": "string", + "example": "Study of single cells in the human body.", + "user_friendly": "Grant title", + "guidelines": "Enter a title of approximately 30 words." + }, + "grant_id": { + "description": "The unique grant identifier or reference.", + "type": "string", + "example": "BB/P0000001/1", + "user_friendly": "Grant ID" + }, + "organization": { + "description": "The name of the funding organization.", + "type": "string", + "example": "Biotechnology and Biological Sciences Research Council (BBSRC); California Institute of Regenerative Medicine (CIRM)", + "user_friendly": "Funding organization" + } + + } +} diff --git a/tests/resources/hca/module/project/publication.json b/tests/resources/hca/module/project/publication.json new file mode 100644 index 0000000..50f6faa --- /dev/null +++ b/tests/resources/hca/module/project/publication.json @@ -0,0 +1,67 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about a journal article, book, web page, or other external available documentation for a project.", + "additionalProperties": false, + "required": [ + "authors", + "title", + "official_hca_publication" + ], + "title": "Publication", + "name": "publication", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/project/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/publication" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "authors": { + "description": "A list of authors associated with the publication.", + "type": "array", + "example": "Doe JD", + "items": { + "type": "string" + }, + "user_friendly": "Authors", + "guidelines": "List each author in 'surname initials' format." + }, + "title": { + "description": "The title of the publication.", + "type": "string", + "user_friendly": "Publication title", + "example": "Study of single cells in the human body." + }, + "doi": { + "description": "The publication digital object identifier (doi) of the publication.", + "type": "string", + "example": "10.1016/j.cell.2016.07.054", + "user_friendly": "Publication DOI" + }, + "pmid": { + "description": "The PubMed ID of the publication.", + "type": "integer", + "example": "27565351", + "user_friendly": "Publication PMID" + }, + "url": { + "description": "A URL for the publication.", + "type": "string", + "user_friendly": "Publication URL", + "example": "https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5667944/" + }, + "official_hca_publication": { + "description": "Has the publication been accepted as an official HCA publication, according to the process described in https://www.humancellatlas.org/publications/ ?", + "type": "boolean", + "user_friendly": "Official HCA Publication", + "guidelines": "Should be one of: yes, or no.", + "example": "yes; no" + } + } +} diff --git a/tests/resources/hca/module/protocol/channel.json b/tests/resources/hca/module/protocol/channel.json new file mode 100644 index 0000000..de8bcd7 --- /dev/null +++ b/tests/resources/hca/module/protocol/channel.json @@ -0,0 +1,70 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about a single microscope channel.", + "additionalProperties": false, + "required": [ + "channel_id", + "excitation_wavelength", + "filter_range", + "exposure_time", + "multiplexed" + ], + "title": "Channel", + "name": "channel", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/protocol/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/channel" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "channel_id": { + "description": "User given ID. If there is an accompanying codebook, this name should correspond to the channel id used in the codebook.", + "type": "string", + "example": "1; A", + "user_friendly": "Channel ID" + }, + "excitation_wavelength": { + "description": "Excitation wavelength of the lightsource in nanometers.", + "type": "number", + "example": "640", + "user_friendly": "Excitation wavelength" + }, + "filter_range": { + "description": "Emission filter in nanometers.", + "type": "string", + "example": "461/70", + "user_friendly": "Filter range", + "guidelines": "Enter in CWL/BW format." + }, + "multiplexed": { + "description": "Whether multiple targets were detected simultaneously in this channel.", + "type": "string", + "enum":[ + "yes", + "no" + ], + "example": "Should be one of: yes, or no.", + "user_friendly": "Multiplexed experiment" + }, + "target_fluorophore": { + "description": "The name of the fluorophore this channel is designed to assay.", + "type": "string", + "example": "Alexa 647", + "user_friendly": "Target fluorophore" + }, + "exposure_time": { + "description": "Acquisition time for a single image per channel, in milliseconds.", + "type": "number", + "example": "400", + "user_friendly": "Exposure time", + "guidelines": "Enter value in milliseconds." + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/module/protocol/matrix.json b/tests/resources/hca/module/protocol/matrix.json new file mode 100644 index 0000000..1582be0 --- /dev/null +++ b/tests/resources/hca/module/protocol/matrix.json @@ -0,0 +1,67 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information relating to generation of matrices", + "additionalProperties": false, + "title": "Matrix", + "name": "matrix", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/protocol/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/matrix" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "data_normalization_methods": { + "description": "Method(s) used to normalize data in the matrix", + "type": "array", + "user_friendly": "Data normalization method(s)", + "items": { + "type": "string", + "enum": [ + "CPM (counts per million)", + "TPM (transcripts per kilobase million)", + "RPKM (reads per kilobase of exon per million reads mapped)", + "FPKM (fragments per kilobase of exon per million fragments mapped)", + "DESeq2's median of ratios", + "TMM (EdgeR's trimmed mean of M values)", + "SF (size factor)", + "UQ (Upper quartile)", + "Downsampling", + "other", + "unknown" + ] + }, + "guidelines": "Should be one of: CPM (counts per million), TPM (transcripts per kilobase million), RPKM(reads per kilobase of exon per million reads mapped), FPKM (fragments per kilobase of exon per million fragments mapped), DESeq2’s median of ratios, TMM (EdgeR’s trimmed mean of M values), SF (size factor), UQ (Upper quartile), Downsampling, unknown, other." + }, + "derivation_process": { + "description": "Type of computational tool used in generating the matrix object.", + "type": "array", + "user_friendly": "Derivation process", + "guidelines": "Should be one of: alignment, quantification, peak calling, peak annotation, gene filtering, cell filtering, merging, cell calling, ambient RNA correction, doublet removal, batch correction, depth normalization, other.", + "items": { + "type": "string", + "enum": [ + "alignment", + "quantification", + "peak calling", + "peak annotation", + "gene filtering", + "cell filtering", + "merging", + "cell calling", + "ambient RNA correction", + "doublet removal", + "batch correction", + "depth normalization", + "other" + ] + } + } + } +} diff --git a/tests/resources/hca/module/protocol/probe.json b/tests/resources/hca/module/protocol/probe.json new file mode 100644 index 0000000..e038309 --- /dev/null +++ b/tests/resources/hca/module/protocol/probe.json @@ -0,0 +1,99 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about probes used to detect targets.", + "additionalProperties": false, + "required": [ + "probe_label", + "target_label", + "assay_type" + ], + "title": "Probe", + "name": "probe", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/module/protocol/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/probe" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "probe_label": { + "description": "The label of a probe used to detect target in this experiment.", + "type": "string", + "example": "ACTA1; cFos", + "user_friendly": "Probe label" + }, + "probe_sequence": { + "pattern": "[ATGCUatgcu]+", + "description": "Sequence of a probe used to detect target.", + "type": "string", + "user_friendly": "Probe sequence", + "guidelines": "Only include transcript-specific hybridization region.", + "example": "AGGCTATAGCGGAGCTACG; aggctatagcggagctacg" + }, + "target_name": { + "description": "The name of the target molecule.", + "type": "string", + "example": "ACTA1_exon1; nuclear cFos", + "user_friendly": "Target name" + }, + "target_codebook_label": { + "description": "A label used in the codebook for the target.", + "type": "string", + "example": "AKT1; CFOS", + "user_friendly": "Target label in codebook", + "guidelines": "Leave blank if experiment did not use codebook." + }, + "target_label": { + "description": "An identifier for the target molecule.", + "type": "string", + "example": "CHEBI:85345; ENSG00000170345", + "user_friendly": "Target label", + "guidelines": "For small molecules this should be from the ChEBI ontology. For gene products this should be a standard gene or gene product identifier from e.g. Ensembl or UniProt." + }, + "subcellular_structure": { + "description": "Target subcellular structure.", + "type": "object", + "$ref": "module/ontology/cellular_component_ontology.json", + "user_friendly": "Target subcellular structure", + "guidelines": "This should be a term from the GO cell component ontology." + }, + "probe_reagents": { + "description": "Name of reagents used to construct the probe.", + "type": "object", + "$ref": "module/process/purchased_reagents.json", + "user_friendly": "Probe construction reagents" + }, + "assay_type": { + "description": "Type of assay used to detect target.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "example": "MERFISH; in situ sequencing", + "user_friendly": "Assay type" + }, + "fluorophore": { + "description": "Fluorophore used to detect target.", + "type": "array", + "items": { + "type": "string" + }, + "example": "Cy5; Alexa 488", + "user_friendly": "Fluorophore" + }, + "channel_label": { + "description": "Channel label used to assay signal.", + "type": "array", + "items": { + "type": "string" + }, + "example": "1; A", + "user_friendly": "Channel", + "guidelines": "Should be the same as in Channel tab." + } + } +} diff --git a/tests/resources/hca/property_migrations.json b/tests/resources/hca/property_migrations.json new file mode 100644 index 0000000..11d5dac --- /dev/null +++ b/tests/resources/hca/property_migrations.json @@ -0,0 +1,548 @@ +{ + "migrations": [ + { + "source_schema": "file_descriptor", + "property": "schema_major_version", + "effective_from": "2.0.0", + "reason": "Field won't be used", + "type": "deprecated property" + }, + { + "source_schema": "file_descriptor", + "property": "schema_minor_version", + "effective_from": "2.0.0", + "reason": "Field won't be used", + "type": "deprecated property" + }, + { + "source_schema": "analysis_process", + "property": "input_bundles", + "effective_from": "12.0.0", + "reason": "Field not used in DCP2", + "type": "deprecated property" + }, + { + "source_schema": "analysis_process", + "property": "reference_files", + "effective_from": "12.0.0", + "reason": "Linking reference files to analysis process", + "type": "new required property" + }, + { + "source_schema": "analysis_process", + "property": "reference_bundle", + "effective_from": "12.0.0", + "reason": "Field not used in DCP2", + "type": "deprecated property" + }, + { + "source_schema": "cell_suspension", + "property": "total_estimated_cells", + "target_schema": "cell_suspension", + "replaced_by": "estimated_cell_count", + "effective_from": "9.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "library_preparation_protocol", + "property": "library_construction_approach", + "target_schema": "library_preparation_protocol", + "replaced_by": "library_construction_method", + "effective_from": "5.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "sequencing_protocol", + "property": "sequencing_approach", + "target_schema": "sequencing_protocol", + "replaced_by": "method", + "effective_from": "10.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "dissociation_protocol", + "property": "dissociation_method", + "target_schema": "dissociation_protocol", + "replaced_by": "method", + "effective_from": "6.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "dissociation_protocol", + "property": "protocol_reagents", + "target_schema": "dissociation_protocol", + "replaced_by": "reagents", + "effective_from": "6.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "collection_protocol", + "property": "collection_method", + "target_schema": "collection_protocol", + "replaced_by": "method", + "effective_from": "9.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "collection_protocol", + "property": "protocol_reagents", + "target_schema": "collection_protocol", + "replaced_by": "reagents", + "effective_from": "9.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "sequence_file", + "property": "insdc_run", + "target_schema": "sequence_file", + "replaced_by": "insdc_run_accessions", + "effective_from": "8.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "specimen_from_organism", + "property": "state_of_specimen.gross_image", + "target_schema": "specimen_from_organism", + "replaced_by": "state_of_specimen.gross_images", + "effective_from": "8.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "specimen_from_organism", + "property": "state_of_specimen.microscopic_image", + "target_schema": "specimen_from_organism", + "replaced_by": "state_of_specimen.microscopic_images", + "effective_from": "8.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "process", + "property": "insdc_experiment.insdc_experiment", + "target_schema": "process", + "replaced_by": "insdc_experiment.insdc_experiment_accession", + "effective_from": "7.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "analysis_process", + "property": "outputs", + "effective_from": "9.0.0", + "reason": "Field not used and violated metadata entity model", + "type": "deprecated property" + }, + { + "source_schema": "cell_suspension", + "property": "plate_based_sequencing.cell_quality", + "target_schema": "cell_suspension", + "replaced_by": "plate_based_sequencing.well_quality", + "effective_from": "10.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "specimen_from_organism", + "property": "organ_part", + "target_schema": "specimen_from_organism", + "replaced_by": "organ_parts", + "effective_from": "9.0.0", + "reason": "Field change to array", + "type": "renamed property" + }, + { + "source_schema": "cell_suspension", + "property": "plate_based_sequencing.plate_id", + "target_schema": "cell_suspension", + "replaced_by": "plate_based_sequencing.plate_label", + "effective_from": "11.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "cell_suspension", + "property": "plate_based_sequencing.well_id", + "target_schema": "cell_suspension", + "replaced_by": "plate_based_sequencing.well_label", + "effective_from": "11.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "cell_line", + "property": "cell_line_type", + "target_schema": "cell_line", + "replaced_by": "type", + "effective_from": "12.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "project", + "property": "contributors.project_role", + "target_schema": "project", + "replaced_by": "contributors.project_role.text", + "effective_from": "12.0.0", + "reason": "Field standardization", + "type": "moved property" + }, + { + "source_schema": "project", + "property": "publications.publication_title", + "target_schema": "project", + "replaced_by": "publications.title", + "effective_from": "13.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "project", + "property": "publications.publication_url", + "target_schema": "project", + "replaced_by": "publications.url", + "effective_from": "13.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "cell_line", + "property": "publication.publication_title", + "target_schema": "cell_line", + "replaced_by": "publication.title", + "effective_from": "13.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "cell_line", + "property": "publication.publication_url", + "target_schema": "cell_line", + "replaced_by": "publication.url", + "effective_from": "13.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "differentiation_protocol", + "property": "differentiation_method", + "target_schema": "differentiation_protocol", + "replaced_by": "method", + "effective_from": "2.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "cell_line", + "property": "biomaterial_core.biosd_biomaterial", + "target_schema": "cell_line", + "replaced_by": "biomaterial_core.biosamples_accession", + "effective_from": "14.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "cell_line", + "property": "biomaterial_core.insdc_biomaterial", + "target_schema": "cell_line", + "replaced_by": "biomaterial_core.insdc_sample_accession", + "effective_from": "14.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "cell_suspension", + "property": "biomaterial_core.biosd_biomaterial", + "target_schema": "cell_suspension", + "replaced_by": "biomaterial_core.biosamples_accession", + "effective_from": "12.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "cell_suspension", + "property": "biomaterial_core.insdc_biomaterial", + "target_schema": "cell_suspension", + "replaced_by": "biomaterial_core.insdc_sample_accession", + "effective_from": "12.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "donor_organism", + "property": "biomaterial_core.biosd_biomaterial", + "target_schema": "donor_organism", + "replaced_by": "biomaterial_core.biosamples_accession", + "effective_from": "15.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "donor_organism", + "property": "biomaterial_core.insdc_biomaterial", + "target_schema": "donor_organism", + "replaced_by": "biomaterial_core.insdc_sample_accession", + "effective_from": "15.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "imaged_specimen", + "property": "biomaterial_core.biosd_biomaterial", + "target_schema": "imaged_specimen", + "replaced_by": "biomaterial_core.biosamples_accession", + "effective_from": "3.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "imaged_specimen", + "property": "biomaterial_core.insdc_biomaterial", + "target_schema": "imaged_specimen", + "replaced_by": "biomaterial_core.insdc_sample_accession", + "effective_from": "3.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "organoid", + "property": "biomaterial_core.biosd_biomaterial", + "target_schema": "organoid", + "replaced_by": "biomaterial_core.biosamples_accession", + "effective_from": "11.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "organoid", + "property": "biomaterial_core.insdc_biomaterial", + "target_schema": "organoid", + "replaced_by": "biomaterial_core.insdc_sample_accession", + "effective_from": "11.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "specimen_from_organism", + "property": "biomaterial_core.biosd_biomaterial", + "target_schema": "specimen_from_organism", + "replaced_by": "biomaterial_core.biosamples_accession", + "effective_from": "10.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "specimen_from_organism", + "property": "biomaterial_core.insdc_biomaterial", + "target_schema": "specimen_from_organism", + "replaced_by": "biomaterial_core.insdc_sample_accession", + "effective_from": "10.0.0", + "reason": "Field clarification", + "type": "renamed property" + }, + { + "source_schema": "enrichment_protocol", + "property": "enrichment_method", + "target_schema": "enrichment_protocol", + "replaced_by": "method", + "effective_from": "3.0.0", + "reason": "Adherence to style guide", + "type": "renamed property" + }, + { + "source_schema": "enrichment_protocol", + "property": "min_size_selected", + "target_schema": "enrichment_protocol", + "replaced_by": "minimum_size", + "effective_from": "3.0.0", + "reason": "Adherence to style guide", + "type": "renamed property" + }, + { + "source_schema": "enrichment_protocol", + "property": "max_size_selected", + "target_schema": "enrichment_protocol", + "replaced_by": "maximum_size", + "effective_from": "3.0.0", + "reason": "Adherence to style guide", + "type": "renamed property" + }, + { + "source_schema": "process", + "property": "process_core.process_location", + "target_schema": "process", + "replaced_by": "process_core.location", + "effective_from": "8.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "analysis_process", + "property": "process_core.process_location", + "target_schema": "analysis_process", + "replaced_by": "process_core.location", + "effective_from": "10.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "process", + "property": "process_core.operator", + "target_schema": "process", + "replaced_by": "process_core.operators", + "effective_from": "8.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "analysis_process", + "property": "process_core.operator", + "target_schema": "analysis_process", + "replaced_by": "process_core.operators", + "effective_from": "10.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "ipsc_induction_protocol", + "property": "ipsc_induction_method", + "target_schema": "ipsc_induction_protocol", + "replaced_by": "method", + "effective_from": "3.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "ipsc_induction_protocol", + "property": "ipsc_induction_factors", + "target_schema": "ipsc_induction_protocol", + "replaced_by": "reprogramming_factors", + "effective_from": "3.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "ipsc_induction_protocol", + "property": "protocol_reagents", + "target_schema": "ipsc_induction_protocol", + "replaced_by": "reagents", + "effective_from": "3.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "ipsc_induction_protocol", + "property": "ipsc_induction_produced_in_house", + "effective_from": "3.0.0", + "reason": "Redundant with process.location", + "type": "deprecated property" + }, + { + "source_schema": "cell_suspension", + "property": "selected_cell_type", + "target_schema": "cell_suspension", + "replaced_by": "selected_cell_types", + "effective_from": "13.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "analysis_file", + "property": "file_core.file_format", + "target_schema": "analysis_file", + "replaced_by": "file_core.format", + "effective_from": "6.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "image_file", + "property": "file_core.file_format", + "target_schema": "image_file", + "replaced_by": "file_core.format", + "effective_from": "2.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "reference_file", + "property": "file_core.file_format", + "target_schema": "reference_file", + "replaced_by": "file_core.format", + "effective_from": "3.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "sequence_file", + "property": "file_core.file_format", + "target_schema": "sequence_file", + "replaced_by": "file_core.format", + "effective_from": "9.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "supplementary_file", + "property": "file_core.file_format", + "target_schema": "supplementary_file", + "replaced_by": "file_core.format", + "effective_from": "2.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "project", + "property": "contributors.contact_name", + "target_schema": "project", + "replaced_by": "contributors.name", + "effective_from": "14.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "process", + "property": "process_type", + "target_schema": "process", + "replaced_by": "type", + "effective_from": "9.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "analysis_process", + "property": "process_type", + "target_schema": "analysis_process", + "replaced_by": "type", + "effective_from": "11.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "protocol", + "property": "protocol_type", + "target_schema": "protocol", + "replaced_by": "type", + "effective_from": "7.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + }, + { + "source_schema": "analysis_protocol", + "property": "protocol_type", + "target_schema": "analysis_protocol", + "replaced_by": "type", + "effective_from": "9.0.0", + "reason": "Schema consistency update", + "type": "renamed property" + } + ] +} \ No newline at end of file diff --git a/tests/resources/hca/system/file_descriptor.json b/tests/resources/hca/system/file_descriptor.json new file mode 100644 index 0000000..6d62f3d --- /dev/null +++ b/tests/resources/hca/system/file_descriptor.json @@ -0,0 +1,99 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Checksums and other information for asserting the integrity of a data file.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "content_type", + "size", + "sha256", + "crc32c", + "file_id", + "file_version", + "file_name" + ], + "title": "File descriptor", + "name": "file_descriptor", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^https?://schema.(.*)?humancellatlas.org/system/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/file_descriptor$" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}\\.[0-9]{1,}\\.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "file_descriptor" + ] + }, + "file_name": { + "description": "The object name of the data file relative to the staging area's `data/` directory", + "type": "string", + "user_friendly": "Staging file name", + "example": "1b6d8348-d6e9-406a-aa6a-7ee886e52bf9/IDC9_L004_R2.fastq.gz" + }, + "file_id": { + "description": "UUID that uniquely identifies each data file in its source", + "type": "string", + "user_friendly": "File UUID", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "file_version": { + "description": "The version of the file given in date time format", + "type": "string", + "user_friendly": "File version", + "example": "2020-05-01T04:26:07.021870Z", + "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\\.[0-9]{6}Z$" + }, + "content_type": { + "description": "An appropriate MIME type for this file.", + "type": "string", + "user_friendly": "Content type", + "example": "application/gzip" + }, + "size": { + "description": "The size of the file in bytes.", + "type": "integer", + "minimum": 0, + "user_friendly": "Size", + "example": 2147483648 + }, + "sha256": { + "description": "The SHA-256 hash of the file.", + "type": "string", + "pattern": "^[a-f0-9]{64}$", + "user_friendly": "SHA-256", + "example": "12998c017066eb0d2a70b94e6ed3192985855ce390f321bbdb832022888bd251" + }, + "crc32c": { + "description": "The CRC-32C code generated for this file.", + "type": "string", + "pattern": "^[a-f0-9]{8}$", + "user_friendly": "CRC32C", + "example": "0b83b575" + }, + "sha1": { + "description": "The SHA-1 hash of the file.", + "type": "string", + "pattern": "^[a-f0-9]{40}$", + "user_friendly": "SHA-1", + "example": "6e71b3cac15d32fe2d36c270887df9479c25c640" + }, + "s3_etag" : { + "description": "An AWS S3 ETag of this file", + "user_friendly": "S3 ETag", + "type": "string", + "example": "c92e5374ac0a53b228d4c1511c2d2842-63" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/system/license.json b/tests/resources/hca/system/license.json new file mode 100644 index 0000000..a957c50 --- /dev/null +++ b/tests/resources/hca/system/license.json @@ -0,0 +1,39 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the project license.", + "additionalProperties": false, + "title": "License", + "name": "license", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/system/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/license" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "identifier": { + "type": "string", + "description": "Identifier of the license under which this dataset is made available.", + "example": "CC-BY", + "user_friendly": "License identifier" + }, + "full_name": { + "type": "string", + "description": "Full name of the license under which this dataset is made available.", + "example": "Attribution 4.0 International (CC BY 4.0)", + "user_friendly": "License description" + }, + "url": { + "type": "string", + "description": "URL of the license under which this data is available.", + "example": "https://creativecommons.org/licenses/by/4.0/", + "user_friendly": "License URL" + } + } +} diff --git a/tests/resources/hca/system/links.json b/tests/resources/hca/system/links.json new file mode 100644 index 0000000..712a729 --- /dev/null +++ b/tests/resources/hca/system/links.json @@ -0,0 +1,270 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A schema for describing the links between entities in an experiment graph.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "links" + ], + "title": "Links", + "name": "links", + "type": "object", + "definitions": { + "input": { + "type": "object", + "description": "An input to a process", + "additionalProperties": false, + "required": [ + "input_type", + "input_id" + ], + "properties": { + "input_type": { + "description": "The concrete type of the input entity.", + "example": "cell_suspension", + "user_friendly": "Input type", + "type": "string" + }, + "input_id": { + "description": "UUID of the input entity.", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "user_friendly": "Input entity UUID", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + } + } + }, + "output": { + "type": "object", + "description": "An output from a process", + "additionalProperties": false, + "required": [ + "output_type", + "output_id" + ], + "properties": { + "output_type": { + "description": "The concrete type of the output entity.", + "example": "sequence_file", + "user_friendly": "Output type", + "type": "string" + }, + "output_id": { + "description": "UUID of the output entity.", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "user_friendly": "Output entity UUID", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + } + } + }, + "protocol_reference": { + "type": "object", + "description": "A protocol used in a process", + "additionalProperties": false, + "required": [ + "protocol_type", + "protocol_id" + ], + "properties": { + "protocol_type": { + "description": "The concrete type of protocol entity.", + "example": "enrichment_protocol", + "user_friendly": "Protocol type", + "type": "string", + "enum": [ + "analysis_protocol", + "aggregate_generation_protocol", + "collection_protocol", + "differentiation_protocol", + "dissociation_protocol", + "enrichment_protocol", + "ipsc_induction_protocol", + "imaging_preparation_protocol", + "imaging_protocol", + "library_preparation_protocol", + "sequencing_protocol", + "treatment_protocol" + ] + }, + "protocol_id": { + "description": "UUID of the protocol entity.", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "user_friendly": "Protocol entity UUID", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + } + } + }, + "process_link": { + "type": "object", + "additionalProperties": false, + "required": [ + "process_type", + "process_id", + "inputs", + "outputs", + "protocols", + "link_type" + ], + "properties": { + "process_type": { + "description": "The concrete type of the process described by this link.", + "example": "analysis", + "user_friendly": "Process type", + "type": "string" + }, + "process_id": { + "description": "UUID of the process described by this link.", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "user_friendly": "Process entity UUID", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "inputs": { + "description": "An array of inputs for this link", + "type": "array", + "items": { + "type": "object", + "$ref": "system/links.json#/definitions/input" + } + }, + "outputs": { + "description": "An array of outputs for this link.", + "type": "array", + "items": { + "type": "object", + "$ref": "system/links.json#/definitions/output" + } + }, + "protocols": { + "description": "An array of protocols for this link.", + "type": "array", + "items": { + "type": "object", + "$ref": "system/links.json#/definitions/protocol_reference" + } + }, + "link_type": { + "description": "The type of this link.", + "type": "string", + "enum": [ + "process_link" + ] + } + } + }, + "supplementary_file_reference": { + "type": "object", + "required": [ + "file_id", + "file_type" + ], + "additionalProperties": false, + "properties": { + "file_id": { + "description": "ID for this supplementary file entity", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "file_type": { + "description": "concrete type of this supplementary file entity", + "type": "string", + "enum": [ + "supplementary_file" + ] + } + } + }, + "entity": { + "type": "object", + "required": [ + "entity_id", + "entity_type" + ], + "additionalProperties": false, + "properties": { + "entity_id": { + "description": "ID of this entity", + "example": "111f222a-333b-444c-555d-eee63ddfccc7", + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$" + }, + "entity_type": { + "description": "The concrete type of this entity", + "type": "string", + "enum": [ + "project" + ] + } + } + }, + "supplementary_file_link": { + "type": "object", + "required": [ + "entity", + "files", + "link_type" + ], + "additionalProperties": false, + "properties": { + "entity": { + "description": "An entity that refers to this supplementary file", + "type": "object", + "$ref": "system/links.json#/definitions/entity" + }, + "files": { + "description": "An array of supplementary files", + "type": "array", + "items": { + "type": "object", + "$ref": "system/links.json#/definitions/supplementary_file_reference" + } + }, + "link_type": { + "description": "The type of this link.", + "type": "string", + "enum": [ + "supplementary_file_link" + ] + } + } + } + }, + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/system/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/links" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "links" + ] + }, + "links": { + "description": "An array of linking objects.", + "type": "array", + "items": { + "type": "object", + "oneOf": [ + { + "$ref": "system/links.json#/definitions/process_link" + }, + { + "$ref": "system/links.json#/definitions/supplementary_file_link" + } + ] + } + } + } +} diff --git a/tests/resources/hca/system/provenance.json b/tests/resources/hca/system/provenance.json new file mode 100644 index 0000000..298ddb6 --- /dev/null +++ b/tests/resources/hca/system/provenance.json @@ -0,0 +1,74 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Provenance information added or generated at time of ingest." , + "additionalProperties": false, + "required": [ + "document_id", + "submission_date" + ], + "title": "Provenance", + "name": "provenance", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/system/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/provenance" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_major_version": { + "description": "The major version number of the schema.", + "type": "integer", + "pattern": "^[0-9]{1,}$", + "user_friendly": "Schema major version", + "example": "4; 10" + }, + "schema_minor_version": { + "description": "The minor version number of the schema.", + "type": "integer", + "pattern": "^[0-9]{1,}$", + "user_friendly": "Schema minor version", + "example": "6; 15" + }, + "submission_date": { + "description": "When project was first submitted to database.", + "type": "string", + "format": "date-time", + "user_friendly": "Submission date" + }, + "submitter_id": { + "description": "ID of individual who first submitted project.", + "type": "string", + "user_friendly": "Submitter ID" + }, + "update_date": { + "description": "When project was last updated.", + "type": "string", + "format": "date-time", + "user_friendly": "Update date" + }, + "updater_id": { + "description": "ID of individual who last updated project.", + "type": "string", + "user_friendly": "Updater ID" + }, + "document_id": { + "description": "Identifier for document.", + "type": "string", + "pattern": ".{8}-.{4}-.{4}-.{4}-.{12}", + "comment": "This structure supports the current ingest API. It may change in the future.", + "user_friendly": "Document ID" + }, + "accession": { + "description": "A unique accession for this entity, provided by the broker.", + "type": "string", + "user_friendly": "Accession" + } + + } +} \ No newline at end of file diff --git a/tests/resources/hca/type/biomaterial/cell_line.json b/tests/resources/hca/type/biomaterial/cell_line.json new file mode 100644 index 0000000..ddc08a5 --- /dev/null +++ b/tests/resources/hca/type/biomaterial/cell_line.json @@ -0,0 +1,166 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the cell line or cell culture biomaterial.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "biomaterial_core", + "type", + "model_organ" + ], + "title": "Cell line", + "name": "cell_line", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/cell_line" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "biomaterial" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "biomaterial_core" : { + "description": "Core biomaterial-level information.", + "type": "object", + "$ref": "core/biomaterial/biomaterial_core.json", + "user_friendly": "Biomaterial core" + }, + "supplier": { + "description": "The supplier of the cell line.", + "type": "string", + "example": "HipSci; ATCC", + "user_friendly": "Supplier" + }, + "catalog_number": { + "description": "The supplier catalogue number for the cell line.", + "type": "string", + "example": "77650057", + "user_friendly": "Catalog number" + }, + "lot_number": { + "description": "The supplier lot or batch number for the cell line.", + "type": "string", + "example": "24.10.14", + "user_friendly": "Lot/batch number" + }, + "catalog_url": { + "description": "The supplier catalogue URL for the cell line.", + "type": "string", + "user_friendly": "Catalog URL", + "example": "www.phe-culturecollections.org.uk/products/celllines/ipsc/detail.jsp?refId=77650057&collection=ecacc_ipsc" + }, + "cell_cycle": { + "description": "The cell cycle phase if the cell line is synchronized growing cells or the phase is known.", + "type": "object", + "$ref": "module/ontology/cell_cycle_ontology.json", + "user_friendly": "Cell cycle" + }, + "type": { + "description": "The type of cell line.", + "type": "string", + "enum": [ + "primary", + "immortalized", + "stem cell", + "stem cell-derived", + "induced pluripotent", + "synthetic" + ], + "example": "Should be one of: primary, immortalized, stem cell, stem cell-derived, induced pluripotent, or synthetic.", + "user_friendly": "Cell line type" + }, + "model_organ": { + "description": "Organ for which this cell line is a model.", + "type": "object", + "$ref": "module/ontology/organ_ontology.json", + "user_friendly": "Organ model" + }, + "cell_morphology": { + "description": "Features relating to the morphology of the cells.", + "type": "object", + "$ref": "module/biomaterial/cell_morphology.json", + "user_friendly": "Cell morphology" + }, + "growth_conditions": { + "description": "Features relating to the growth and/or maintenance of the cell lines.", + "type": "object", + "$ref": "module/biomaterial/growth_conditions.json", + "user_friendly": "Growth conditions" + }, + "confluency": { + "description": "The percent a plate surface is covered by cells.", + "type": "number", + "example": 60, + "user_friendly": "Percent confluency" + }, + "cell_type": { + "description": "The cell type that the cell line represents.", + "type": "object", + "$ref": "module/ontology/cell_type_ontology.json", + "user_friendly": "Cell type" + }, + "karyotype": { + "description": "The karyotype of the cell line.", + "type": "string", + "user_friendly": "Karyotype", + "example": "sex chromosome complement of XY; del(2) (q11)" + }, + "tissue": { + "description": "The tissue that the cell line was derived from.", + "type": "object", + "$ref": "module/ontology/organ_part_ontology.json", + "user_friendly": "Tissue" + }, + "date_established": { + "description": "Date when the cell line was established.", + "type": "string", + "pattern": "^((19|20)\\d\\d){1}([- \\./][01]\\d){0,1}([- \\./][0-3]\\d){0,1}$", + "user_friendly": "Date established", + "example": "2017-03-19; 2002/03; 1995", + "guidelines": "Enter the date established in date format: yyyy-mm-dd. Supplying partial date is allowed." + }, + "disease": { + "description": "Short description of any disease association to the cell type.", + "type": "object", + "$ref": "module/ontology/disease_ontology.json", + "user_friendly": "Disease" + }, + "genus_species": { + "description": "The scientific binomial name for the species of the cell line.", + "type" : "array", + "items":{ + "$ref": "module/ontology/species_ontology.json" + }, + "user_friendly": "Genus species" + }, + "publication": { + "description": "A publication that cites the cell line creation.", + "type": "object", + "$ref": "module/project/publication.json", + "user_friendly": "Publication" + }, + "timecourse": { + "description": "Information relating to a timecourse associated with this cell line.", + "type": "object", + "$ref": "module/biomaterial/timecourse.json", + "user_friendly": "Timecourse" + } + } +} diff --git a/tests/resources/hca/type/biomaterial/cell_suspension.json b/tests/resources/hca/type/biomaterial/cell_suspension.json new file mode 100644 index 0000000..1c4a8e0 --- /dev/null +++ b/tests/resources/hca/type/biomaterial/cell_suspension.json @@ -0,0 +1,94 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the suspension of cells or nuclei derived from the collected or cultured specimen.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "biomaterial_core" + ], + "title": "Cell suspension", + "name": "cell_suspension", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/cell_suspension" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "biomaterial" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "biomaterial_core" : { + "description": "Core biomaterial-level information.", + "type": "object", + "$ref": "core/biomaterial/biomaterial_core.json", + "user_friendly": "Biomaterial core" + }, + "cell_morphology": { + "description": "Features relating to the morphology of cells in a biomaterial.", + "type": "object", + "$ref": "module/biomaterial/cell_morphology.json", + "user_friendly": "Cell morphology" + }, + "growth_conditions": { + "description": "Features relating to the growth and/or maintenance of a biomaterial.", + "type": "object", + "$ref": "module/biomaterial/growth_conditions.json", + "user_friendly": "Growth conditions" + }, + "genus_species": { + "description": "The scientific binomial name for the species of the suspension.", + "type" : "array", + "items":{ + "$ref": "module/ontology/species_ontology.json" + }, + "user_friendly": "Genus species" + }, + "selected_cell_types": { + "description" : "The cell type(s) selected to be present in the suspension.", + "type": "array", + "items": { + "$ref": "module/ontology/cell_type_ontology.json" + }, + "user_friendly": "Selected cell type(s)", + "guidelines": "Enter the cell type(s) selected for, not the cell type(s) determined to be present post-analysis." + }, + "estimated_cell_count": { + "description": "Estimated number of cells in the suspension.", + "type": "integer", + "maximum": 1000000000, + "minimum": 0, + "example": "1; 2100", + "user_friendly": "Estimated cell count", + "guidelines": "Enter 1 for well-based assays." + }, + "plate_based_sequencing" : { + "description": "Fields specific for plate-based sequencing experiments.", + "type": "object", + "$ref": "module/process/sequencing/plate_based_sequencing.json", + "user_friendly": "Plate-based sequencing" + }, + "timecourse": { + "description": "Information relating to a timecourse associated with this cell suspension.", + "type": "object", + "$ref": "module/biomaterial/timecourse.json", + "user_friendly": "Timecourse" + } + } +} diff --git a/tests/resources/hca/type/biomaterial/donor_organism.json b/tests/resources/hca/type/biomaterial/donor_organism.json new file mode 100644 index 0000000..ade0737 --- /dev/null +++ b/tests/resources/hca/type/biomaterial/donor_organism.json @@ -0,0 +1,189 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the donor from which a specimen was collected.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "biomaterial_core", + "is_living", + "sex", + "development_stage" + ], + "title": "Donor organism", + "name": "donor_organism", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/donor_organism" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "biomaterial" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "biomaterial_core" : { + "description": "Core biomaterial-level information.", + "type": "object", + "$ref": "core/biomaterial/biomaterial_core.json", + "user_friendly": "Biomaterial core" + }, + "human_specific": { + "description": "Fields specific to human (homo sapiens) organisms.", + "type": "object", + "$ref": "module/biomaterial/human_specific.json", + "user_friendly": "Human-specific" + }, + "mouse_specific": { + "description": "Fields specific to mouse (mus musculus) organisms.", + "type": "object", + "$ref": "module/biomaterial/mouse_specific.json", + "user_friendly": "Mouse-specific" + }, + "genus_species": { + "description": "The scientific binomial name for the species of the organism.", + "type" : "array", + "items":{ + "$ref": "module/ontology/species_ontology.json" + }, + "user_friendly": "Genus species" + }, + "sex": { + "description": "The biological sex of the organism.", + "type": "string", + "enum": [ + "female", + "male", + "mixed", + "unknown" + ], + "user_friendly": "Biological sex", + "example": "Should be one of: male, female, mixed, or unknown." + }, + "is_living": { + "description": "Whether organism was alive at time of biomaterial collection.", + "type": "string", + "enum": [ + "yes", + "no", + "unknown", + "not applicable" + ], + "user_friendly": "Alive at collection", + "example": "Should be one of: yes, no, not applicable, or unknown.", + "guidelines": "Enter yes if organism was alive at time of biomaterial collection, no if organism was dead, unknown if not known, and not applicable for ex vivo embryo." + }, + "organism_age": { + "description": "Age of organism in Age units measured since birth.", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "type": "string", + "user_friendly": "Age", + "example": "20; 45-65", + "guidelines": "Enter either a single value or a range of values. Indicate a range using a hyphen." + }, + "organism_age_unit": { + "description": "The unit in which Age is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Age unit" + }, + "development_stage": { + "description": "A classification of the developmental stage of the organism.", + "type": "object", + "$ref": "module/ontology/development_stage_ontology.json", + "user_friendly": "Development stage" + }, + "diseases": { + "description": "Short description of known disease(s) of the organism.", + "type": "array", + "items": { + "$ref": "module/ontology/disease_ontology.json" + }, + "user_friendly": "Known disease(s)", + "guidelines": "Enter 'normal' if no known disease." + }, + "death": { + "description": "Information about conditions of death of the organism.", + "type": "object", + "$ref": "module/biomaterial/death.json", + "user_friendly": "Death conditions" + }, + "familial_relationships": { + "description": "Information about other organisms related to this organism.", + "type": "array", + "items": { + "$ref": "module/biomaterial/familial_relationship.json" + }, + "user_friendly": "Familial relationship" + }, + "medical_history": { + "description": "Information about the medical history of the organism.", + "type": "object", + "$ref": "module/biomaterial/medical_history.json", + "user_friendly": "Medical history" + }, + "gestational_age": { + "description": "Gestational age of pregnancy in Gestational age units measured from the last menstrual period.", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "type": "string", + "user_friendly": "Gestational age", + "example": "22; 8-9", + "guidelines": "To calculate, add 2 weeks to embryonic post-ovulation age. Enter either a single value or indicate a range of values using a hyphen." + }, + "gestational_age_unit": { + "description": "The unit in which Gestational age is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Gestational age unit" + }, + "height": { + "description": "Height of organism in Height unit.", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "type": "string", + "user_friendly": "Height", + "example": "160; 120-140", + "guidelines": "Enter either a single value or a range of values. Indicate a range using a hyphen." + }, + "height_unit": { + "description": "The unit in which Height is expressed.", + "type": "object", + "$ref": "module/ontology/length_unit_ontology.json", + "user_friendly": "Height unit" + }, + "weight": { + "description": "Weight of organism in Weight unit.", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "type": "string", + "user_friendly": "Weight", + "example": "60; 40-60", + "guidelines": "Enter either a single value or a range of values. Indicate a range using a hyphen." + }, + "weight_unit": { + "description": "The unit in which Weight is expressed.", + "type": "object", + "$ref": "module/ontology/mass_unit_ontology.json", + "user_friendly": "Weight unit" + }, + "timecourse": { + "description": "Information relating to a timecourse associated with this biomaterial.", + "type": "object", + "$ref": "module/biomaterial/timecourse.json", + "user_friendly": "Timecourse" + } + } +} diff --git a/tests/resources/hca/type/biomaterial/imaged_specimen.json b/tests/resources/hca/type/biomaterial/imaged_specimen.json new file mode 100644 index 0000000..b0b6d2b --- /dev/null +++ b/tests/resources/hca/type/biomaterial/imaged_specimen.json @@ -0,0 +1,70 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about a tissue specimen after it has been sectioned and prepared for imaging.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "biomaterial_core", + "slice_thickness" + ], + "title": "Imaged specimen", + "name": "imaged_specimen", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/imaged_specimen" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "biomaterial" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "biomaterial_core" : { + "description": "Core biomaterial-level information.", + "type": "object", + "$ref": "core/biomaterial/biomaterial_core.json", + "user_friendly": "Biomaterial core" + }, + "overview_images": { + "description": "List of filenames of photographs of specimen.", + "type": "array", + "items": { + "pattern": "^.*.jpg$|^.*.jpeg$|^.*.tiff$|^.*.png$", + "type": "string" + }, + "user_friendly": "Gross image", + "example": "my_image_file.jpg; overview_image.tiff", + "guidelines": "Must be of format JPEG, TIFF, or PNG." + }, + "slice_thickness": { + "description": "Thickness of the imaged slice in micrometres.", + "type" : "number", + "example": "14", + "user_friendly": "Imaged slice thickness" + }, + "internal_anatomical_structures": { + "description": "Internal (landmark) structures visible in the overview image that are informative about the broader anatomical context/location of the sample.", + "type": "array", + "items": { + "$ref": "module/ontology/organ_part_ontology.json" + }, + "user_friendly": "Internal tissue structures" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/type/biomaterial/organoid.json b/tests/resources/hca/type/biomaterial/organoid.json new file mode 100644 index 0000000..b50a8d1 --- /dev/null +++ b/tests/resources/hca/type/biomaterial/organoid.json @@ -0,0 +1,119 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about an organoid biomaterial.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "biomaterial_core", + "model_organ" + ], + "title": "Organoid", + "name": "organoid", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/organoid" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "biomaterial" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "biomaterial_core" : { + "description": "Core biomaterial-level information.", + "type": "object", + "$ref": "core/biomaterial/biomaterial_core.json", + "user_friendly": "Biomaterial core" + }, + "genus_species": { + "description": "The scientific binomial name for the species of the organoid.", + "type" : "array", + "items":{ + "$ref": "module/ontology/species_ontology.json" + }, + "user_friendly": "Genus species" + }, + "model_organ": { + "description": "Organ for which this organoid is a model system.", + "type": "object", + "$ref": "module/ontology/organ_ontology.json", + "user_friendly": "Organ model" + }, + "model_organ_part": { + "description": "Organ part for which this organoid is a model system.", + "type": "object", + "$ref": "module/ontology/organ_part_ontology.json", + "user_friendly": "Organ part model" + }, + "age": { + "description": "Age of the organoid in Organoid age unit measured from when cell aggregates started differentiating to desired organoid model.", + "type": "number", + "example": 55, + "user_friendly": "Organoid age" + }, + "age_unit": { + "description": "The unit in which Organoid age is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Organoid age unit" + }, + "size": { + "description": "Size of the organoid in Organoid size unit.", + "type": "number", + "example": 4, + "user_friendly": "Organoid size" + }, + "size_unit": { + "description": "The unit in which the Organoid size is expressed.", + "type": "object", + "$ref": "module/ontology/length_unit_ontology.json", + "user_friendly": "Organoid size unit" + }, + "morphology": { + "description": "General description of the organoid morphology.", + "type": "string", + "example": "Epithelial monolayer with budding crypt-like domains; Optic cup structure", + "user_friendly": "Organoid morphology" + }, + "embedded_in_matrigel": { + "description": "Whether the organoid is embedded in a matrigel.", + "type": "boolean", + "example": "Should be one of: yes, no.", + "user_friendly": "Embeddded in matrigel" + }, + "growth_environment": { + "description": "Growth environment in which the organoid is grown.", + "type": "string", + "example": "matrigel; liquid suspension; adherent", + "user_friendly": "Growth environment" + }, + "input_aggregate_cell_count": { + "description": "Estimated number of cells per input cell aggregate.", + "type": "number", + "example": 10000, + "user_friendly": "Input aggregate cell count" + }, + "stored_oxygen_levels": { + "description": "Percent oxygen level organoid was stored in prior to sequencing.", + "type": "number", + "example": 75, + "user_friendly": "Stored oxygen level" + } + } +} diff --git a/tests/resources/hca/type/biomaterial/specimen_from_organism.json b/tests/resources/hca/type/biomaterial/specimen_from_organism.json new file mode 100644 index 0000000..b5c6420 --- /dev/null +++ b/tests/resources/hca/type/biomaterial/specimen_from_organism.json @@ -0,0 +1,111 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the specimen that was collected from the donor organism.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "biomaterial_core", + "organ" + ], + "title": "Specimen from organism", + "name": "specimen_from_organism", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/biomaterial/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/specimen_from_organism" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "biomaterial" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "biomaterial_core" : { + "description": "Core biomaterial-level information.", + "type": "object", + "$ref": "core/biomaterial/biomaterial_core.json", + "user_friendly": "Biomaterial core" + }, + "genus_species": { + "description": "The scientific binomial name for the species of the specimen.", + "type" : "array", + "items":{ + "$ref": "module/ontology/species_ontology.json" + }, + "user_friendly": "Genus species" + }, + "organ": { + "description": "The organ that the biomaterial came from.", + "type": "object", + "$ref": "module/ontology/organ_ontology.json", + "guidelines": "Blood and connective tissue are considered organs.", + "user_friendly": "Organ" + }, + "organ_parts": { + "description": "A term for a specific part of the organ that the biomaterial came from.", + "type": "array", + "items": { + "$ref": "module/ontology/organ_part_ontology.json" + }, + "guidelines": "The term organ part is very broadly defined here.", + "user_friendly": "Organ part" + }, + "diseases": { + "description": "Short description of known disease(s) of the specimen.", + "type": "array", + "items": { + "$ref": "module/ontology/disease_ontology.json" + }, + "user_friendly": "Known disease(s)", + "guidelines": "Enter normal if no known diseases." + }, + "state_of_specimen": { + "description": "State of the specimen at the time of collection.", + "type": "object", + "$ref": "module/biomaterial/state_of_specimen.json", + "user_friendly": "State of specimen" + }, + "preservation_storage": { + "description": "Information about how a specimen was preserved and/or stored over a period of time.", + "type": "object", + "$ref": "module/biomaterial/preservation_storage.json", + "user_friendly": "Preservation/Storage" + }, + "collection_time": { + "description": "When the biomaterial was collected.", + "type": "string", + "user_friendly": "Time of collection", + "example": "2016-01-21T00:00:00Z; 2016-03", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ. Supplying partial date is allowed.", + "oneOf": [ + { + "format": "date-time" + }, + { + "pattern": "^((19|20)\\d\\d){1}([- \\./][01]\\d){0,1}([- \\./][0-3]\\d){0,1}$" + } + ] + }, + "purchased_specimen": { + "description": "Information about a purchased specimen.", + "type": "object", + "$ref": "module/process/purchased_reagents.json", + "user_friendly": "Purchased specimen" + } + } +} diff --git a/tests/resources/hca/type/file/analysis_file.json b/tests/resources/hca/type/file/analysis_file.json new file mode 100644 index 0000000..5cdfc93 --- /dev/null +++ b/tests/resources/hca/type/file/analysis_file.json @@ -0,0 +1,53 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A file analysis results produced by a secondary analysis pipeline.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "file_core" + ], + "title": "Analysis file", + "name": "analysis_file", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/type/file/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/analysis_file" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "file" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "file_core" : { + "description": "Core file-level information.", + "type": "object", + "$ref": "core/file/file_core.json", + "user_friendly": "File core" + }, + "matrix_cell_count": { + "description": "Number of cells analyzed in a matrix file.", + "type": "integer", + "maximum": 1000000000, + "minimum": 0, + "example": "1; 2100", + "user_friendly": "Matrix cell count", + "guidelines": "If the analysis file is a matrix containing cells, enter the exact number of cells in the matrix." + } + } +} diff --git a/tests/resources/hca/type/file/image_file.json b/tests/resources/hca/type/file/image_file.json new file mode 100644 index 0000000..0d90ffa --- /dev/null +++ b/tests/resources/hca/type/file/image_file.json @@ -0,0 +1,44 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about an image file generated by an imaging experiment.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "file_core" + ], + "title": "Image file", + "name": "image_file", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/type/file/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/image_file" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "file" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "file_core" : { + "description": "Core file-level information.", + "type": "object", + "$ref": "core/file/file_core.json", + "user_friendly": "File core" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/type/file/reference_file.json b/tests/resources/hca/type/file/reference_file.json new file mode 100644 index 0000000..1e6da4f --- /dev/null +++ b/tests/resources/hca/type/file/reference_file.json @@ -0,0 +1,92 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A reference file used by a secondary reference pipeline.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "file_core", + "ncbi_taxon_id", + "genus_species", + "assembly_type", + "reference_type", + "reference_version" + ], + "title": "Reference file", + "name": "reference_file", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/type/file/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/reference_file" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "file" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "file_core" : { + "description": "Core file-level information.", + "type": "object", + "$ref": "core/file/file_core.json", + "user_friendly": "File core" + }, + "ncbi_taxon_id" : { + "description": "A taxonomy ID (taxonID) from NCBI.", + "type": "integer", + "user_friendly": "NCBI taxon ID", + "example": "9606; 10090", + "guidelines": "NCBI taxonIDs can be looked up at https://www.ncbi.nlm.nih.gov/taxonomy." + }, + "genus_species": { + "description": "The scientific binomial name for the species of this reference.", + "type": "object", + "$ref": "module/ontology/species_ontology.json", + "user_friendly": "Genus species" + }, + "reference_type": { + "description": "The type of the reference file.", + "type": "string", + "enum": [ + "genome sequence", + "transcriptome sequence", + "annotation reference", + "transcriptome index", + "genome sequence index" + ], + "user_friendly": "Reference type", + "example": "Should be one of: genome sequence, transcriptome sequence, annotation reference, transcriptome index, or genome sequence index." + }, + "assembly_type": { + "description": "The assembly type of the genome reference file.", + "type": "string", + "enum": [ + "primary assembly", + "complete assembly", + "patch assembly" + ], + "user_friendly": "Genome assembly type", + "example": "Should be one of: primary assembly, complete assembly, or patch assembly." + }, + "reference_version": { + "description": "The genome version of the reference file.", + "type": "string", + "example": "GencodeV27; Ensembl 87", + "user_friendly": "Reference version" + } + } +} diff --git a/tests/resources/hca/type/file/sequence_file.json b/tests/resources/hca/type/file/sequence_file.json new file mode 100644 index 0000000..0ea0c0c --- /dev/null +++ b/tests/resources/hca/type/file/sequence_file.json @@ -0,0 +1,91 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A file of read sequences generated by a sequencing experiment.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "file_core", + "read_index" + ], + "title": "Sequence file", + "name": "sequence_file", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/type/file/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/sequence_file" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "file" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "file_core" : { + "description": "Core file-level information.", + "type": "object", + "$ref": "core/file/file_core.json", + "user_friendly": "File core" + }, + "read_index": { + "description": "The sequencing read this file represents.", + "type": "string", + "example": "Should be one of: read1, read2, index1, index2", + "enum": [ + "read1", + "read2", + "read3", + "read4", + "index1", + "index2", + "single-end, non-indexed" + ], + "user_friendly": "Read index", + "guidelines": "If a sequencing experiment is single-end, enter 'read1'." + }, + "lane_index": { + "description": "The lane that this file was sequenced from.", + "type": "integer", + "example": 1, + "user_friendly": "Lane index" + }, + "read_length": { + "description": "The length of a sequenced read in this file, in nucleotides.", + "type": "integer", + "example": 51, + "user_friendly": "Read length" + }, + "insdc_run_accessions": { + "description": "An International Nucleotide Sequence Database Collaboration (INSDC) run accession.", + "type": "array", + "items": { + "pattern": "^[D|E|S]RR[0-9]+$", + "type": "string" + }, + "user_friendly": "INSDC run accession", + "example": "SRR0000000", + "guidelines": "Enter accession if run has been archived. Accession can be from the DDBJ, NCBI, or EMBL-EBI and must start with DRR, SRR, or ERR, respectively." + }, + "library_prep_id" : { + "description": "A unique ID for the library preparation.", + "type": "string", + "example": "tech_rep_group_001", + "user_friendly": "Library preparation ID", + "guidelines": "Indicate which samples are from the same library preparation by providing a unique identifier for each library preparation." + } + } +} diff --git a/tests/resources/hca/type/file/supplementary_file.json b/tests/resources/hca/type/file/supplementary_file.json new file mode 100644 index 0000000..312b60d --- /dev/null +++ b/tests/resources/hca/type/file/supplementary_file.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Supplementary files belonging to a project.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "file_core" + ], + "title": "Supplementary file", + "name": "supplementary_file", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/type/file/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/supplementary_file" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "file" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "file_core" : { + "description": "Core file-level information.", + "type": "object", + "$ref": "core/file/file_core.json", + "user_friendly": "File core" + }, + "file_description" : { + "description": "A short description of the file contents.", + "type": "string", + "example": "Protocol for FACS enrichment; Image of spleen sample collection location", + "user_friendly": "File description", + "guidelines": "File description could include information about how the file was generated." + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/type/process/analysis/analysis_process.json b/tests/resources/hca/type/process/analysis/analysis_process.json new file mode 100644 index 0000000..cdfcd16 --- /dev/null +++ b/tests/resources/hca/type/process/analysis/analysis_process.json @@ -0,0 +1,220 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the analysis process.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "process_core", + "type", + "reference_files", + "timestamp_start_utc", + "timestamp_stop_utc", + "tasks", + "inputs", + "analysis_run_type" + ], + "title": "Analysis process", + "name": "analysis_process", + "type": "object", + "definitions": { + "task": { + "additionalProperties": false, + "required": [ + "task_name", + "start_time", + "stop_time", + "disk_size", + "docker_image", + "cpus", + "memory", + "zone" + ], + "type": "object", + "properties": { + "disk_size": { + "description": "Name of the disk volume mounted to the VM for the task.", + "type": "string", + "example": "local-disk 11 HDD", + "user_friendly": "Disk name", + "guidelines": "Indicate both disk type and disk size." + }, + "task_name": { + "description": "Name of the task.", + "type": "string", + "example": "CollectDuplicationMetrics; RSEMExpression", + "user_friendly": "Task name" + }, + "zone": { + "description": "Name of the Google Cloud zone where the task was run.", + "type": "string", + "example": "us-central1-b; europe-north1-a", + "user_friendly": "Zone" + }, + "log_err": { + "description": "Path where standard error is logged.", + "type": "string", + "user_friendly": "Log error" + }, + "start_time": { + "description": "Date and time when the task started.", + "type": "string", + "format": "date-time", + "example": "2019-04-23T20:25:25.969Z", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ.", + "user_friendly": "Start time" + }, + "cpus": { + "description": "Number of CPUs used to run this task.", + "type": "integer", + "example": 2, + "user_friendly": "CPUs" + }, + "log_out": { + "description": "Path where standard output is logged.", + "type": "string", + "user_friendly": "Log out" + }, + "stop_time": { + "description": "Date and time when the task finished.", + "type": "string", + "format": "date-time", + "example": "2019-04-23T20:28:29.830Z", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ.", + "user_friendly": "Stop time" + }, + "memory": { + "description": "Amount of memory allocated for this task.", + "type": "string", + "example": "7.5 GB", + "user_friendly": "Memory" + }, + "docker_image": { + "description": "Name of docker image where the task is stored and executed.", + "type": "string", + "example": "quay.io/humancellatlas/secondary-analysis-picard:v0.2.2-2.10.10", + "user_friendly": "Docker image" + } + } + }, + "parameter": { + "additionalProperties": false, + "required": [ + "parameter_name", + "parameter_value" + ], + "type": "object", + "properties": { + "checksum": { + "description": "MD5 checksum of the file.", + "type": "string", + "user_friendly": "Checksum", + "example": "e09a986c2e630130b1849d4bf9a94c06" + }, + "parameter_name": { + "description": "Name of parameter.", + "type": "string", + "example": "stranded; rsem_ref_index", + "user_friendly": "Parameter name" + }, + "parameter_value": { + "description": "Path to file for or value of parameter.", + "type": "string", + "example": "NONE; gs://hca-dcp-mint-test-data/reference/GRCh38_Gencode/gencode_v27_primary.tar", + "user_friendly": "Parameter value" + } + } + } + }, + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/process/analysis/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/analysis_process" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "process" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "process_core" : { + "description": "Core process-level information.", + "type": "object", + "$ref": "core/process/process_core.json", + "user_friendly": "Process core" + }, + "type": { + "description": "The type of process.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Process type" + }, + "inputs": { + "description": "Input parameters used in the pipeline run.", + "type": "array", + "items": { + "type": "object", + "$ref": "type/process/analysis/analysis_process.json#/definitions/parameter" + }, + "user_friendly": "Input parameters" + }, + "tasks": { + "description": "Information about steps in the workflow.", + "type": "array", + "items": { + "type": "object", + "$ref": "type/process/analysis/analysis_process.json#/definitions/task" + }, + "user_friendly": "Workflow tasks" + }, + "timestamp_start_utc": { + "description": "Initial start time of the full pipeline in UTC.", + "type": "string", + "format": "date-time", + "user_friendly": "Start timestamp (UTC)", + "example": "2018-01-21T09:34:27Z", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ." + }, + "timestamp_stop_utc": { + "description": "Terminal stop time of the full pipeline in UTC.", + "type": "string", + "format": "date-time", + "user_friendly": "Stop timestamp (UTC)", + "example": "2018-01-21T11:35:01Z", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ." + }, + "analysis_run_type": { + "description": "Whether the analysis was run or was copied forward as an optimization.", + "type": "string", + "enum": [ + "run", + "copy-forward" + ], + "user_friendly": "Analysis run type", + "example": "Should be one of: run, or copy-forward." + }, + "reference_files": { + "description": "UUID of the file entities that contain the reference genome used in running the pipeline.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$", + "example": "b816d2d6-5f10-4447-4194-3d0a804454d6" + }, + "user_friendly": "Reference files" + } + } +} \ No newline at end of file diff --git a/tests/resources/hca/type/process/process.json b/tests/resources/hca/type/process/process.json new file mode 100644 index 0000000..e20f855 --- /dev/null +++ b/tests/resources/hca/type/process/process.json @@ -0,0 +1,106 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about a process completed in the experiment.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "process_core" + ], + "title": "Process", + "name": "process", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/process/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/process" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "process" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "process_core" : { + "description": "Core process-level information.", + "type": "object", + "$ref": "core/process/process_core.json", + "user_friendly": "Process core" + }, + "start_time": { + "description": "Date and time the process started.", + "type": "string", + "oneOf": [ + { + "format": "date-time" + }, + { + "pattern": "^((19|20)\\d\\d){1}([- \\./][01]\\d){0,1}([- \\./][0-3]\\d){0,1}$" + } + ], + "user_friendly": "Start time", + "example": "2019-01-16T12:00:00Z; 2019/01/16", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ." + }, + "end_time": { + "description": "Date and time the process ended.", + "type": "string", + "oneOf": [ + { + "format": "date-time" + }, + { + "pattern": "^((19|20)\\d\\d){1}([- \\./][01]\\d){0,1}([- \\./][0-3]\\d){0,1}$" + } + ], + "user_friendly": "End time", + "example": "2019-01-16T12:00:00Z; 2019/01/16", + "guidelines": "Enter the time in date-time format: yyyy-mm-ddThh:mm:ssZ." + }, + "length_of_time": { + "description": "Length of time the process took to execute in Length of time unit.", + "pattern": "^[0-9]+\\.?[0-9]*-?[0-9]*\\.?[0-9]*$", + "type": "string", + "user_friendly": "Length of time", + "example": "10; 55-60", + "guidelines": "Enter a single value or a range of values separated by a hyphen." + }, + "length_of_time_unit": { + "description": "The unit in which Length of time is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Length of time unit" + }, + "type": { + "description": "The type of process.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Process type" + }, + "deviation_from_protocol": { + "description": "A deviation from the protocol provided.", + "type": "string", + "user_friendly": "Deviation from protocol", + "example": "Skipped ACK lysis step; Used 100um filter instead of 40um filter" + }, + "insdc_experiment" : { + "description": "An International Nucleotide Sequence Database Collaboration (INSDC) experiment accession.", + "type": "object", + "$ref": "module/process/sequencing/insdc_experiment.json", + "user_friendly": "INSDC experiment accession" + } + } +} diff --git a/tests/resources/hca/type/project/project.json b/tests/resources/hca/type/project/project.json new file mode 100644 index 0000000..99a96b4 --- /dev/null +++ b/tests/resources/hca/type/project/project.json @@ -0,0 +1,161 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A project entity contains information about the overall project.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "project_core", + "funders" + ], + "title": "Project", + "name": "project", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern": "^(http|https)://schema.(.*?)humancellatlas.org/type/project/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/project" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "project" + ] + }, + "provenance": { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "project_core": { + "description": "Core project-level information.", + "type": "object", + "$ref": "core/project/project_core.json", + "user_friendly": "Project core" + }, + "contributors": { + "description": "People contributing to any aspect of the project.", + "type": "array", + "items": { + "$ref": "module/project/contact.json" + }, + "user_friendly": "Contributors" + }, + "supplementary_links": { + "description": "External link(s) pointing to code, supplementary data files, or analysis files associated with the project which will not be uploaded.", + "type": "array", + "example": "https://github.com/czbiohub/tabula-muris;%20http://celltag.org/", + "items": { + "type": "string" + }, + "user_friendly": "Supplementary link(s)" + }, + "publications": { + "description": "Publications resulting from this project.", + "type": "array", + "items": { + "$ref": "module/project/publication.json" + }, + "user_friendly": "Publications" + }, + "insdc_project_accessions": { + "description": "An International Nucleotide Sequence Database Collaboration (INSDC) project accession.", + "type": "array", + "items": { + "type": "string", + "pattern": "^[D|E|S]RP[0-9]+$" + }, + "example": "SRP000000", + "user_friendly": "INSDC project accession", + "guidelines": "Enter accession if project has been archived. Accession can be from the DDBJ, NCBI, or EMBL-EBI and must start with DRP, SRP, or ERP, respectively." + }, + "ega_accessions": { + "description": "A list of accessions referring to EGA (European Genome-Phenome Archive) datasets or studies.", + "type": "array", + "items": { + "type": "string", + "pattern": "^EGA[DS][0-9]{11}$" + }, + "example": "EGAS00000000001; EGAD00000000002", + "guidelines": "Enter any EGA study or dataset accessions that relate to the project. Should start with EGAD or EGAS, study accession preferred.", + "user_friendly": "EGA Study/Dataset Accession(s)" + }, + "dbgap_accessions": { + "description": "A list of database of Genotypes and Phenotypes (dbGaP) study accessions.", + "type": "array", + "items": { + "type": "string", + "pattern": "^phs[0-9]{6}(\\.v[0-9])?(\\.p[0-9])?$" + }, + "example": "phs001997.v1.p1; phs001836", + "guidelines": "Enter any dbGaP study accessions that relate to this project. Should start with phs, can contain the specific version information.", + "user_friendly": "dbGaP Study Accession(s)" + }, + "geo_series_accessions": { + "description": "A Gene Expression Omnibus (GEO) series accession.", + "type": "array", + "items": { + "type": "string", + "pattern": "^GSE.*$" + }, + "example": "GSE00000", + "user_friendly": "GEO series accession", + "guidelines": "Enter accession if project has been archived. Accession must start with GSE." + }, + "array_express_accessions": { + "description": "An ArrayExpress accession.", + "type": "array", + "items": { + "type": "string", + "pattern": "^E-....-.*$" + }, + "example": "E-AAAA-00", + "user_friendly": "ArrayExpress accession", + "guidelines": "Enter accession if project has been archived. Accession must start with E-." + }, + "insdc_study_accessions": { + "description": "An International Nucleotide Sequence Database Collaboration (INSDC) study accession.", + "type": "array", + "items": { + "type": "string", + "pattern": "^PRJ[E|N|D][a-zA-Z][0-9]+$" + }, + "example": "PRJNA000000", + "user_friendly": "INSDC study accession", + "guidelines": "Enter accession if study has been archived. Accession can be from the DDBJ, NCBI, or EMBL-EBI and must start with PRJD, PRJN, or PRJE, respectively." + }, + "biostudies_accessions": { + "description": "A BioStudies study accession.", + "type": "array", + "items": { + "type": "string", + "pattern": "^S-[A-Z]{4}[0-9]+$" + }, + "example": "S-EXMP1; S-HCAS33", + "user_friendly": "BioStudies accession", + "guidelines": "Enter accession if study has been archived." + }, + "funders": { + "description": "Funding source(s) supporting the project.", + "type": "array", + "items": { + "$ref": "module/project/funder.json" + }, + "user_friendly": "Funding source(s)" + }, + "estimated_cell_count": { + "description": "An estimated number of cells in this project", + "type": "integer", + "example": "10000; 2100000", + "user_friendly": "Estimated cell count" + } + } +} diff --git a/tests/resources/hca/type/protocol/analysis/analysis_protocol.json b/tests/resources/hca/type/protocol/analysis/analysis_protocol.json new file mode 100644 index 0000000..4ddcbfa --- /dev/null +++ b/tests/resources/hca/type/protocol/analysis/analysis_protocol.json @@ -0,0 +1,63 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the analysis protocol.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "type" + ], + "title": "Analysis protocol", + "name": "analysis_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/analysis/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/analysis_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "type": { + "description": "The type of protocol.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Protocol type" + }, + "computational_method": { + "description": "A URI to a versioned workflow and versioned execution environment in a GA4GH-compliant repository.", + "type": "string", + "user_friendly": "Computational method", + "example": "SmartSeq2SingleCell; 10x" + }, + "matrix": { + "description": "Information related to protocols that output a matrix.", + "type": "object", + "$ref": "module/protocol/matrix.json", + "user_friendly": "Matrix" + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/aggregate_generation_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/aggregate_generation_protocol.json new file mode 100644 index 0000000..89d051f --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/aggregate_generation_protocol.json @@ -0,0 +1,57 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about how cultured cells are developed into cell aggregates.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "formation_method" + ], + "title": "Aggregate generation protocol", + "name": "aggregate_generation_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/aggregate_generation_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core": { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "formation_method": { + "description": "Method used to form cell aggregates.", + "type": "string", + "example": "rocking; suspension cultures; hanging drops; spinner flasks", + "user_friendly": "Aggregate formation method" + }, + "cell_uniformity": { + "description": "Description of the cell aggregates uniformity after formation.", + "type": "string", + "example": "Mostly homogenous embryoid bodies of variable cell numbers; Low-homogeneity in morphology and size", + "user_friendly": "Aggregate cell uniformity" + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/collection_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/collection_protocol.json new file mode 100644 index 0000000..fa15842 --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/collection_protocol.json @@ -0,0 +1,60 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the biomaterial collection protocol.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "method" + ], + "title": "Collection protocol", + "name": "collection_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/collection_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "method": { + "description": "Method used to collect the biomaterial.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Collection method" + }, + "reagents": { + "description": "A list of purchased reagents used in this protocol.", + "type": "array", + "items": { + "type": "object", + "$ref": "module/process/purchased_reagents.json" + }, + "user_friendly": "Protocol reagents" + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/differentiation_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/differentiation_protocol.json new file mode 100644 index 0000000..cc6e96b --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/differentiation_protocol.json @@ -0,0 +1,98 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about how a cell is differentiated to a desired cell type or organoid.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "method" + ], + "title": "Differentiation protocol", + "name": "differentiation_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/differentiation_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core": { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "method": { + "description": "Method applied to cell culture to induce a specific differentiation response.", + "type": "string", + "user_friendly": "Differentiation method", + "comment": "Consider making this an ontology in the future.", + "example": "Embryoid Body; Monolayer; Inductive Co-Culture" + }, + "media":{ + "description": "Culture media used to induce a specific differentiation response.", + "type": "string", + "user_friendly": "Differentiation media", + "example": "RPMI 1640 + B27; Neurobasal Media; StemPro-34 Serum-Free Medium" + }, + "small_molecules":{ + "description": "Small molecules added to stem cell medium to induce a specific differentiation response.", + "type": "string", + "user_friendly": "Small molecules", + "example": "Retinoic Acid; CHIR99021 (GSK-inhibitor); Activin A; BMP4" + }, + "target_cell_yield": { + "description": "Percent of target cells obtained after directed differentiation of origin cell.", + "type": "number", + "example": 95, + "user_friendly": "Percent target cell yield" + }, + "reagents": { + "description": "A list of purchased reagents used in the differentiation protocol.", + "type": "array", + "items": { + "type": "object", + "$ref": "module/process/purchased_reagents.json" + }, + "user_friendly": "Differentiation reagents" + }, + "target_pathway": { + "description": "Targeted pathway for specific differentiation response.", + "type": "string", + "user_friendly": "Target pathway", + "example": "Wnt pathway; Hedgehog signaling pathway", + "comment": "Consider making this an ontology in the future." + }, + "validation_method": { + "description": "Method used to validate origin cell successfully differentiated to target cell.", + "type": "string", + "user_friendly": "Differentiation validation method", + "example": "Pancreatic Cell DTZ Detection Assay; qPCR; Flow Cytometry; Immunocytochemistry Staining" + }, + "validation_result": { + "description": "Result confirming successful differentiation to target cell type.", + "type": "string", + "user_friendly": "Validation result", + "example": "CD103 Positive; Nestin Positive; HCN4 Positive; CD11C Negative" + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/dissociation_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/dissociation_protocol.json new file mode 100644 index 0000000..3a87aad --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/dissociation_protocol.json @@ -0,0 +1,60 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the dissociation protocol used to separate individual cells or nuclei.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "method" + ], + "title": "Dissociation protocol", + "name": "dissociation_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/dissociation_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "method": { + "description": "How cells or organelles were dissociated.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Dissociation method" + }, + "reagents": { + "description": "A list of purchased reagents used in this protocol.", + "type": "array", + "items": { + "type": "object", + "$ref": "module/process/purchased_reagents.json" + }, + "user_friendly": "Protocol reagents" + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/enrichment_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/enrichment_protocol.json new file mode 100644 index 0000000..88b923c --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/enrichment_protocol.json @@ -0,0 +1,74 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about how a biomaterial is enriched for a feature or characteristic of interest.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "method" + ], + "title": "Enrichment protocol", + "name": "enrichment_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/enrichment_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "method": { + "description": "The method by which enrichment was achieved.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Enrichment method" + }, + "markers": { + "description": "A list of markers used to enrich for or against certain cells.", + "type": "string", + "example": "CD4+ CD8-; HLA-G+", + "user_friendly": "Markers", + "guidelines": "Format as a space-delimited list of markers with +/- where + means enriched for and - means enriched against." + }, + "minimum_size": { + "description": "Minimum cell or organelle size passing selection, in microns.", + "type": "number", + "maximum": 10000, + "minimum": 0.01, + "user_friendly": "Minimum size selected", + "example": 70 + }, + "maximum_size": { + "description": "Maximum cell or organelle size passing selection, in microns.", + "type": "number", + "maximum": 10000, + "minimum": 0.01, + "user_friendly": "Maximum size selected", + "example": 90 + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/ipsc_induction_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/ipsc_induction_protocol.json new file mode 100644 index 0000000..cdfbda4 --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/ipsc_induction_protocol.json @@ -0,0 +1,107 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about how a biomaterial is treated to become an induced pluripotent stem cell.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "method" + ], + "title": "iPSC induction protocol", + "name": "ipsc_induction_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/ipsc_induction_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core": { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "method": { + "description": "Induction method applied to primary cell culture to induce pluripotent stem cell generation.", + "type": "string", + "enum": [ + "lentivirus", + "sendai virus", + "Gun particle", + "piggyBac transposon", + "miRNA viral", + "adenovirus", + "cre-loxP", + "plasmid", + "retroviral" + ], + "user_friendly": "Induction method", + "comment": "Consider making this field an ontology in the future", + "example": "Should be one of: lentivirus, sendai virus, Gun particle, piggyBac transposon, miRNA viral, adenovirus, cre-loxP, plasmid, or retroviral." + }, + "reprogramming_factors": { + "description": "Reprogramming factors added to primary cell culture to induce pluripotency.", + "type": "string", + "user_friendly": "Reprogramming factors", + "example": "POU5F1; SOX2; KLF4; c-MYC" + }, + "ipsc_induction_kit": { + "description": "Kit used to induce pluripotent stem cell generation.", + "type": "object", + "$ref": "module/process/purchased_reagents.json", + "user_friendly": "Induction kit" + }, + "pluripotency_test": { + "description": "Description of how pluripotency was tested in induced pluripotent stem cells.", + "type": "string", + "user_friendly": "Pluripotency test", + "example": "Teratoma formation; PluriTest; Rt-PCR" + }, + "percent_pluripotency": { + "description": "Percent of iPSCs that passed the pluripotency test.", + "type": "number", + "example": 97.2, + "user_friendly": "Percent pluripotency" + }, + "pluripotency_vector_removed": { + "description": "Whether a viral vector was removed after induction.", + "type": "string", + "enum": [ + "yes", + "no", + "unknown" + ], + "user_friendly": "Pluripotent vector removed", + "example": "Should be one of: yes, no, or unknown." + }, + "reagents": { + "description": "Additional purchased reagents used in this protocol.", + "type": "array", + "items": { + "type": "object", + "$ref": "module/process/purchased_reagents.json" + }, + "user_friendly": "Additional reagents" + } + } +} diff --git a/tests/resources/hca/type/protocol/biomaterial_collection/treatment_protocol.json b/tests/resources/hca/type/protocol/biomaterial_collection/treatment_protocol.json new file mode 100644 index 0000000..cb3473f --- /dev/null +++ b/tests/resources/hca/type/protocol/biomaterial_collection/treatment_protocol.json @@ -0,0 +1,77 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about how cells are subjected to a treatment or stimulus, such as an immune activator or a drug.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "method" + ], + "title": "Treatment protocol", + "name": "treatment_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/biomaterial_collection/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/treatment_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core": { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "method": { + "description": "Method applied to cell culture to induce a specific treatment response.", + "type": "array", + "items":{ + "$ref": "module/ontology/treatment_method_ontology.json" + }, + "user_friendly": "Treatment method" + }, + "media":{ + "description": "Culture media used to induce a specific treatment response.", + "type": "string", + "user_friendly": "Treatment media", + "example": "RPMI 1640; Complete Medium" + }, + "reagents": { + "description": "A list of purchased reagents used in the treatment protocol.", + "type": "array", + "items": { + "type": "object", + "$ref": "module/process/purchased_reagents.json" + }, + "user_friendly": "Treatment reagents" + }, + "target_pathway": { + "description": "Targeted pathway for specific treatment response.", + "type": "array", + "items":{ + "$ref": "module/ontology/target_pathway_ontology.json" + }, + "user_friendly": "Target pathway", + "example": "insulin signalling pathway; immune cell activation; chemokine signalling pathway." + } + } +} diff --git a/tests/resources/hca/type/protocol/imaging/imaging_preparation_protocol.json b/tests/resources/hca/type/protocol/imaging/imaging_preparation_protocol.json new file mode 100644 index 0000000..b86950a --- /dev/null +++ b/tests/resources/hca/type/protocol/imaging/imaging_preparation_protocol.json @@ -0,0 +1,126 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the preparation protocol of the imaged specimen used in an imaging experiment.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core" + ], + "dependencies": { + "permeabilisation_time": ["permeabilisation_time_unit"], + "permeabilisation_time_unit": ["permeabilisation_time"] + }, + "title": "Imaging preparation protocol", + "name": "imaging_preparation_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/imaging/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/imaging_preparation_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "fresh_slicing_method" : { + "description": "The method by which fresh tissue was sliced.", + "type": "string", + "user_friendly": "Fresh slicing method", + "example": "vibrotome" + }, + "imaged_slice_thickness": { + "description": "Thickness of the imaged slice in micrometres.", + "type" : "number", + "example": "10", + "user_friendly": "Imaged slice thickness" + }, + "final_slicing_method" : { + "description": "The method by which the final slice was obtained.", + "type": "string", + "user_friendly": "Final slicing method", + "example": "cryosectioning" + }, + "post_resection_interval" : { + "description": "Length of time between surgical resection and fresh slicing of tissue.", + "type": "number", + "user_friendly": "Time between resection and fresh slicing", + "example": "5" + }, + "post_resection_interval_unit": { + "description": "The unit of time in which the post resection interval is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Post resection interval time unit", + "example": "day" + }, + "pre_final_slice_preservation_method": { + "description": "Tissue preservation method used prior to final slicing.", + "type": "object", + "$ref": "module/biomaterial/preservation_storage.json", + "user_friendly": "Pre-final slice preservation method", + "example": "freezing" + }, + "post_final_slicing_interval": { + "description": "Length of time between secondary slicing and hybridization.", + "type" : "number", + "example": "7", + "user_friendly": "Post final slicing interval" + }, + "post_final_slicing_interval_unit": { + "description": "The unit of time in which the post final slicing interval is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Post final slicing interval time unit", + "example": "day" + }, + "fiducial_marker": { + "description": "Fiducial markers for the alignment of images taken across multiple rounds of imaging.", + "type" : "string", + "user_friendly": "Fiducial marker", + "example": "beads" + }, + "expansion_factor": { + "description": "Factor by which the imaged tissue was expanded in one dimension.", + "type" : "number", + "example": "3", + "user_friendly": "Expansion factor" + }, + "permeabilisation_time": { + "description": "The permeabilisation time in time units that the tissue was exposed to.", + "type": "number", + "example": "12", + "user_friendly": "Permeabilisation time" + }, + "permeabilisation_time_unit": { + "description": "The unit in which permeabilisation time is expressed.", + "type": "object", + "$ref": "module/ontology/time_unit_ontology.json", + "user_friendly": "Permeabilisation time unit" + } + } +} + + + diff --git a/tests/resources/hca/type/protocol/imaging/imaging_protocol.json b/tests/resources/hca/type/protocol/imaging/imaging_protocol.json new file mode 100644 index 0000000..dbb080a --- /dev/null +++ b/tests/resources/hca/type/protocol/imaging/imaging_protocol.json @@ -0,0 +1,145 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the imaging protocol.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "microscopy_technique", + "magnification" + ], + "title": "Imaging Protocol", + "name": "imaging_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/imaging/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/imaging_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "microscope_setup_description": { + "description": "Description of the microscope setup.", + "type": "string", + "user_friendly": "Microscope setup description", + "example": "Motorized stage (SCAN IM 112 x 74, Marzhauser), sCMOS camera (Zyla 4.2; Andor), 60x, Plan-Apo, 1.3 NA, silicone oil objective (UPLSAPO60XS2; Olympus).", + "guidelines": "Include manufacturer and model information about the stand, camera, and objective." + }, + "microscopy_technique": { + "description": "The type of microscopy.", + "type": "object", + "$ref": "module/ontology/microscopy_ontology.json", + "user_friendly": "Microscopy technique" + }, + "magnification": { + "description": "Magnification of the objective used for imaging.", + "type": "string", + "user_friendly": "Magnification", + "example": "60x; 100x" + }, + "numerical_aperture": { + "description": "Numerical aperture of the objective.", + "type": "number", + "user_friendly": "Numerical aperture", + "example": "1.3; 0.75" + }, + "immersion_medium_type": { + "description": "Immersion medium used for imaging.", + "type": "string", + "user_friendly": "Immersion medium", + "example": "oil; air" + }, + "immersion_medium_refractive_index": { + "description": "Refractive index of the immersion medium used for imaging.", + "type": "number", + "user_friendly": "Refractive index of the immersion medium", + "example": "1.5; 1" + }, + "pixel_size": { + "description": "Pixel size in nanometers.", + "type": "number", + "user_friendly": "Pixel size", + "example": "109" + }, + "number_of_tiles": { + "description": "Number of XY tiles in the experiment.", + "type": "integer", + "user_friendly": "Number of tiles", + "example": "2000" + }, + "tile_size_y": { + "description": "Y size of the tile in micrometers.", + "type": "number", + "user_friendly": "Tile size Y", + "example": "100" + }, + "tile_size_x": { + "description": "X size of the tile in micrometers.", + "type": "number", + "user_friendly": "Tile size X", + "example": "100" + }, + "z_stack_step_size": { + "description": "Z-stack step size in nanometers.", + "type": "number", + "user_friendly": "Z stack step size", + "example": "200" + }, + "number_of_z_steps": { + "description": "Number of steps in a Z stack.", + "type": "integer", + "user_friendly": "Number of Z steps", + "example": "40" + }, + "overlapping_tiles": { + "description": "Whether tiles were collected with overlap.", + "type": "string", + "user_friendly": "Overlapping tiles", + "example": "Should be one of: yes, or no.", + "enum": [ + "yes", + "no" + ] + }, + "channel": { + "description": "Information about each channel used in the imaging protocol.", + "type": "array", + "items": { + "$ref": "module/protocol/channel.json" + }, + "user_friendly": "Channel" + }, + "probe": { + "description": "Information about each probe in the imaging experiment.", + "type": "array", + "items": { + "$ref": "module/protocol/probe.json" + }, + "user_friendly": "Probe" + } + } +} diff --git a/tests/resources/hca/type/protocol/protocol.json b/tests/resources/hca/type/protocol/protocol.json new file mode 100644 index 0000000..a247b94 --- /dev/null +++ b/tests/resources/hca/type/protocol/protocol.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the protocol.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core" + ], + "title": "Protocol", + "name": "protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "type": { + "description": "The type of protocol.", + "type": "object", + "$ref": "module/ontology/process_type_ontology.json", + "user_friendly": "Protocol type", + "example": "sample enrichment" + } + } +} diff --git a/tests/resources/hca/type/protocol/sequencing/library_preparation_protocol.json b/tests/resources/hca/type/protocol/sequencing/library_preparation_protocol.json new file mode 100644 index 0000000..d6e5be9 --- /dev/null +++ b/tests/resources/hca/type/protocol/sequencing/library_preparation_protocol.json @@ -0,0 +1,179 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about how a sequencing library was prepared.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "library_construction_method", + "input_nucleic_acid_molecule", + "nucleic_acid_source", + "end_bias", + "strand" + ], + "title": "Library preparation protocol", + "name": "library_preparation_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/sequencing/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/library_preparation_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "cell_barcode": { + "description": "Information about cell identifier barcodes.", + "type": "object", + "$ref": "module/process/sequencing/barcode.json", + "user_friendly": "Cell barcode" + }, + "spatial_barcode": { + "description": "Information about spatial barcodes.", + "type": "object", + "$ref": "module/process/sequencing/barcode.json", + "user_friendly": "Spatial barcode" + }, + "input_nucleic_acid_molecule": { + "description": "Starting nucleic acid molecule isolated for sequencing.", + "type": "object", + "$ref": "module/ontology/biological_macromolecule_ontology.json", + "user_friendly": "Input nucleic acid molecule" + }, + "nucleic_acid_source": { + "description": "Source cells or organelles from which nucleic acid molecules were collected.", + "type": "string", + "enum": [ + "bulk cell", + "single cell", + "single nucleus", + "bulk nuclei", + "mitochondria" + ], + "user_friendly": "Nucleic acid source", + "example": "Should be one of: single cell, bulk cell, single nucleus, bulk nuclei, or mitochondria." + }, + "library_construction_method": { + "description": "The general method for sequencing library construction.", + "type": "object", + "$ref": "module/ontology/library_construction_ontology.json", + "user_friendly": "Library construction method" + }, + "library_construction_kit": { + "description": "Name of kit used to construct the sequencing library.", + "type": "object", + "$ref": "module/process/purchased_reagents.json", + "user_friendly": "Library construction kit" + }, + "nucleic_acid_conversion_kit": { + "description": "Name of kit used to convert RNA to DNA for sequencing.", + "type": "object", + "$ref": "module/process/purchased_reagents.json", + "user_friendly": "Nucleic acid conversion kit" + }, + "end_bias": { + "description": "The type of tag or end bias the library has.", + "type": "string", + "example": "Should be one of: 3 prime tag, 3 prime end bias, 5 prime tag, 5 prime end bias, or full length.", + "enum": [ + "3 prime tag", + "3 prime end bias", + "5 prime tag", + "5 prime end bias", + "full length" + ], + "user_friendly": "End bias", + "guidelines": "Enter 'full length' if there is no tag or end bias." + }, + "primer": { + "description": "Primer used for cDNA synthesis from RNA.", + "type": "string", + "enum": [ + "poly-dT", + "random" + ], + "user_friendly": "Primer", + "example": "Should be one of: poly-dT, or random." + }, + "strand": { + "description": "Library strandedness.", + "type": "string", + "enum": [ + "first", + "second", + "unstranded", + "not provided" + ], + "example": "Should be one of: first, second, unstranded, or not provided.", + "user_friendly": "Strand", + "guidelines": "Enter 'first' if sequenced molecule is only the strand generated during first strand synthesis. Enter 'second' if sequenced molecule is only the strand generated during second strand synthesis. Enter 'unstranded' if both strands were sequenced." + }, + "spike_in_kit": { + "description": "Information about a spike-in kit.", + "type": "object", + "$ref": "module/process/purchased_reagents.json", + "user_friendly": "Spike-in kit" + }, + "spike_in_dilution": { + "description": "Dilution of spike-in.", + "type": "integer", + "maximum": 1000000, + "minimum": 1, + "user_friendly": "Spike-in dilution", + "example": 100 + }, + "umi_barcode": { + "description": "Information about unique molecular identifier (UMI) barcodes.", + "type": "object", + "$ref": "module/process/sequencing/barcode.json", + "user_friendly": "UMI barcode" + }, + "library_preamplification_method": { + "description": "The method used to amplify RNA prior to adaptor ligation.", + "type": "object", + "$ref": "module/ontology/library_amplification_ontology.json", + "user_friendly": "Library pre-amplification method" + }, + "cdna_library_amplification_method": { + "description": "The method used to amplify cDNA library prior to sequencing.", + "type": "object", + "$ref": "module/ontology/library_amplification_ontology.json", + "user_friendly": "cDNA library amplification method" + }, + "nominal_length": { + "description": "Average (insert) size of the fragments being sequenced.", + "type": "integer", + "user_friendly": "Nominal length", + "example": 250 + }, + "nominal_sdev": { + "description": "Standard deviation of the (insert) size of the fragments being sequenced.", + "type": "integer", + "user_friendly": "Nominal standard deviation", + "example": 30 + } + } +} diff --git a/tests/resources/hca/type/protocol/sequencing/sequencing_protocol.json b/tests/resources/hca/type/protocol/sequencing/sequencing_protocol.json new file mode 100644 index 0000000..9e85111 --- /dev/null +++ b/tests/resources/hca/type/protocol/sequencing/sequencing_protocol.json @@ -0,0 +1,78 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "Information about the sequencing protocol.", + "additionalProperties": false, + "required": [ + "describedBy", + "schema_type", + "protocol_core", + "instrument_manufacturer_model", + "paired_end", + "method" + ], + "title": "Sequencing protocol", + "name": "sequencing_protocol", + "type": "object", + "properties": { + "describedBy": { + "description": "The URL reference to the schema.", + "type": "string", + "pattern" : "^(http|https)://schema.(.*?)humancellatlas.org/type/protocol/sequencing/(([0-9]{1,}.[0-9]{1,}.[0-9]{1,})|([a-zA-Z]*?))/sequencing_protocol" + }, + "schema_version": { + "description": "The version number of the schema in major.minor.patch format.", + "type": "string", + "pattern": "^[0-9]{1,}.[0-9]{1,}.[0-9]{1,}$", + "example": "4.6.1" + }, + "schema_type": { + "description": "The type of the metadata schema entity.", + "type": "string", + "enum": [ + "protocol" + ] + }, + "provenance" : { + "description": "Provenance information provided by the system.", + "type": "object", + "$ref": "system/provenance.json" + }, + "protocol_core" : { + "description": "Core protocol-level information.", + "type": "object", + "$ref": "core/protocol/protocol_core.json", + "user_friendly": "Protocol core" + }, + "instrument_manufacturer_model": { + "description": "The manufacturer and model of the sequencer.", + "type": "object", + "$ref": "module/ontology/instrument_ontology.json", + "user_friendly": "Instrument manufacturer and model" + }, + "local_machine_name": { + "description": "Local name for the particular machine used for sequencing.", + "type": "string", + "user_friendly": "Local machine name", + "example": "Machine1; HSMA-20" + }, + "paired_end": { + "description": "Whether the sequenced molecule was sequenced from both ends.", + "type": "boolean", + "example": "Should be one of: yes, or no.", + "guidelines": "If 3' 10x v2 was used, enter no.", + "user_friendly": "Paired end" + }, + "method": { + "description": "The general method for sequencing.", + "type": "object", + "$ref": "module/ontology/sequencing_ontology.json", + "user_friendly": "Sequencing method" + }, + "s10x": { + "description": "Fields specific for 10x experiments.", + "type": "object", + "$ref": "module/process/sequencing/S10x.json", + "user_friendly": "10x-specific" + } + } +} diff --git a/tests/resources/hca/update_log.csv b/tests/resources/hca/update_log.csv new file mode 100644 index 0000000..3231ff1 --- /dev/null +++ b/tests/resources/hca/update_log.csv @@ -0,0 +1 @@ +Schema,Change type,Change message,Version,Date diff --git a/tests/resources/hca/versions.json b/tests/resources/hca/versions.json new file mode 100644 index 0000000..e1caa7a --- /dev/null +++ b/tests/resources/hca/versions.json @@ -0,0 +1,139 @@ +{ + "last_update_date": "2022-10-31T11:11:44Z", + "version_numbers": { + "core": { + "biomaterial": { + "biomaterial_core": "8.2.0" + }, + "file": { + "file_core": "6.4.0" + }, + "process": { + "process_core": "10.0.0" + }, + "project": { + "project_core": "7.0.5" + }, + "protocol": { + "protocol_core": "5.2.5" + } + }, + "module": { + "biomaterial": { + "cell_morphology": "6.1.7", + "death": "5.5.1", + "familial_relationship": "6.0.3", + "growth_conditions": "6.4.2", + "human_specific": "1.0.11", + "medical_history": "5.2.8", + "mouse_specific": "1.0.8", + "preservation_storage": "6.1.1", + "state_of_specimen": "6.0.0", + "timecourse": "2.0.2" + }, + "ontology": { + "biological_macromolecule_ontology": "5.3.5", + "cell_cycle_ontology": "5.3.6", + "cell_type_ontology": "5.3.6", + "cellular_component_ontology": "1.0.5", + "contributor_role_ontology": "2.0.0", + "development_stage_ontology": "5.3.6", + "disease_ontology": "5.4.0", + "enrichment_ontology": "1.2.6", + "ethnicity_ontology": "5.3.9", + "file_content_ontology": "1.1.0", + "file_format_ontology": "1.0.0", + "instrument_ontology": "5.3.6", + "length_unit_ontology": "5.3.5", + "library_amplification_ontology": "1.2.5", + "library_construction_ontology": "1.2.5", + "mass_unit_ontology": "5.3.5", + "microscopy_ontology": "1.0.5", + "organ_ontology": "5.3.7", + "organ_part_ontology": "5.3.5", + "process_type_ontology": "5.3.5", + "protocol_type_ontology": "5.3.5", + "sequencing_ontology": "1.1.5", + "species_ontology": "5.3.5", + "strain_ontology": "5.3.6", + "target_pathway_ontology": "1.0.0", + "time_unit_ontology": "5.3.5", + "treatment_method_ontology": "1.0.0" + }, + "process": { + "purchased_reagents": "6.1.0", + "sequencing": { + "10x": "1.0.5", + "barcode": "5.2.7", + "insdc_experiment": "2.0.0", + "plate_based_sequencing": "3.0.0" + } + }, + "project": { + "contact": "9.0.0", + "funder": "2.0.0", + "publication": "7.0.0" + }, + "protocol": { + "channel": "2.0.4", + "matrix": "2.0.0", + "probe": "1.1.1" + } + }, + "system": { + "file_descriptor": "2.0.0", + "license": "1.0.0", + "links": "3.1.0", + "provenance": "1.1.0" + }, + "type": { + "biomaterial": { + "cell_line": "15.1.0", + "cell_suspension": "13.3.0", + "donor_organism": "15.6.1", + "imaged_specimen": "3.3.0", + "organoid": "11.3.0", + "specimen_from_organism": "10.5.0" + }, + "file": { + "analysis_file": "6.5.0", + "image_file": "2.5.0", + "reference_file": "3.5.0", + "sequence_file": "9.5.0", + "supplementary_file": "2.5.0" + }, + "process": { + "analysis": { + "analysis_process": "12.0.0" + }, + "process": "9.2.0" + }, + "project": { + "project": "17.0.0" + }, + "protocol": { + "analysis": { + "analysis_protocol": "10.0.0" + }, + "biomaterial_collection": { + "aggregate_generation_protocol": "2.1.0", + "collection_protocol": "9.2.0", + "differentiation_protocol": "2.2.0", + "dissociation_protocol": "6.2.0", + "enrichment_protocol": "3.1.0", + "ipsc_induction_protocol": "3.2.0", + "treatment_protocol": "1.0.0" + }, + "imaging": { + "imaging_preparation_protocol": "2.3.0", + "imaging_protocol": "11.4.0" + }, + "protocol": "7.1.0", + "sequencing": { + "library_preparation_protocol": "6.3.1", + "sequencing_protocol": "10.1.0" + } + } + } + } +} \ No newline at end of file diff --git a/tests/resources/reproschema.ofn b/tests/resources/reproschema.ofn new file mode 100644 index 0000000..7c6f1dc --- /dev/null +++ b/tests/resources/reproschema.ofn @@ -0,0 +1,443 @@ +Prefix(owl:=) +Prefix(rdf:=) +Prefix(xml:=) +Prefix(xsd:=) +Prefix(nidm:=) +Prefix(prov:=) +Prefix(rdfs:=) +Prefix(skos:=) +Prefix(schema:=) +Prefix(reproschema:=) + + +Ontology( +Declaration(Class(nidm:Assessment)) +Declaration(Class(nidm:DataElement)) +Declaration(Class(schema:CreativeWork)) +Declaration(Class(reproschema:Activity)) +Declaration(Class(reproschema:AdditionalNoteObj)) +Declaration(Class(reproschema:AdditionalProperty)) +Declaration(Class(reproschema:AllowExport)) +Declaration(Class(reproschema:AllowReplay)) +Declaration(Class(reproschema:AutoAdvance)) +Declaration(Class(reproschema:Choice)) +Declaration(Class(reproschema:ComputeSpecification)) +Declaration(Class(reproschema:DisableBack)) +Declaration(Class(reproschema:DontKnow)) +Declaration(Class(reproschema:Field)) +Declaration(Class(reproschema:MessageSpecification)) +Declaration(Class(reproschema:OverrideProperty)) +Declaration(Class(reproschema:Participant)) +Declaration(Class(reproschema:Protocol)) +Declaration(Class(reproschema:Response)) +Declaration(Class(reproschema:ResponseActivity)) +Declaration(Class(reproschema:ResponseOption)) +Declaration(Class(reproschema:Skipped)) +Declaration(Class(reproschema:SoftwareAgent)) +Declaration(Class(reproschema:TimedOut)) +Declaration(Class(reproschema:UnitOption)) +Declaration(Class(prov:Activity)) +Declaration(Class(prov:Agent)) +Declaration(Class(prov:Entity)) +Declaration(Class(prov:Person)) +Declaration(Class(prov:Plan)) +Declaration(Class(prov:SoftwareAgent)) +Declaration(NamedIndividual(reproschema:Activity)) +Declaration(NamedIndividual(reproschema:Field)) +Declaration(NamedIndividual(reproschema:Participant)) +Declaration(NamedIndividual(reproschema:Protocol)) +Declaration(NamedIndividual(reproschema:Response)) +Declaration(NamedIndividual(reproschema:ResponseActivity)) +Declaration(NamedIndividual(reproschema:SoftwareAgent)) +Declaration(AnnotationProperty(schema:domainIncludes)) +Declaration(AnnotationProperty(schema:rangeIncludes)) +Declaration(AnnotationProperty(schema:sameAs)) + + +############################ +# Classes +############################ + +# Class: reproschema:Activity (Activity) + +AnnotationAssertion(rdfs:comment reproschema:Activity "An assessment in a protocol.") +AnnotationAssertion(rdfs:label reproschema:Activity "Activity") +SubClassOf(reproschema:Activity schema:CreativeWork) + +# Class: reproschema:AdditionalNoteObj (Additional Notes Object) + +AnnotationAssertion(rdfs:comment reproschema:AdditionalNoteObj "A set of objects to define notes in a field. For example, most Redcap and NDA data dictionaries have notes for each item which needs to be captured in reproschema") +AnnotationAssertion(rdfs:label reproschema:AdditionalNoteObj "Additional Notes Object") + +# Class: reproschema:AdditionalProperty (Additional properties) + +AnnotationAssertion(rdfs:comment reproschema:AdditionalProperty "An object to describe the various properties added to assessments and fields.") +AnnotationAssertion(rdfs:label reproschema:AdditionalProperty "Additional properties") + +# Class: reproschema:AllowExport (Allow export) + +AnnotationAssertion(rdfs:comment reproschema:AllowExport "Indicates (by boolean) if data can be exported or not.") +AnnotationAssertion(rdfs:label reproschema:AllowExport "Allow export") + +# Class: reproschema:AllowReplay (Allow replay) + +AnnotationAssertion(rdfs:comment reproschema:AllowReplay "Indicates (by boolean) if items can be replayed or not.") +AnnotationAssertion(rdfs:label reproschema:AllowReplay "Allow replay") + +# Class: reproschema:AutoAdvance (Auto advance) + +AnnotationAssertion(rdfs:comment reproschema:AutoAdvance "Indicates (by boolean) if assessments in a protocol can auto advance or not.") +AnnotationAssertion(rdfs:label reproschema:AutoAdvance "Auto advance") + +# Class: reproschema:Choice (Response choice) + +AnnotationAssertion(rdfs:comment reproschema:Choice "An object to describe a response option.") +AnnotationAssertion(rdfs:label reproschema:Choice "Response choice") + +# Class: reproschema:ComputeSpecification (Compute Specification) + +AnnotationAssertion(rdfs:comment reproschema:ComputeSpecification "An object to define computations in an activity or protocol.") +AnnotationAssertion(rdfs:label reproschema:ComputeSpecification "Compute Specification") + +# Class: reproschema:DisableBack (Disable redo) + +AnnotationAssertion(rdfs:comment reproschema:DisableBack "Indicates (by boolean) if we can go back to a completed assessment in a protocol.") +AnnotationAssertion(rdfs:label reproschema:DisableBack "Disable redo") + +# Class: reproschema:DontKnow (Do not know) + +AnnotationAssertion(rdfs:comment reproschema:DontKnow "An element to describe the choice when response is not known.") +AnnotationAssertion(rdfs:label reproschema:DontKnow "Do not know") + +# Class: reproschema:Field (Field) + +AnnotationAssertion(rdfs:comment reproschema:Field "An item in an assessment.") +AnnotationAssertion(rdfs:label reproschema:Field "Field") +SubClassOf(reproschema:Field schema:CreativeWork) + +# Class: reproschema:MessageSpecification (Message Specification) + +AnnotationAssertion(rdfs:comment reproschema:MessageSpecification "An object to define messages in an activity or protocol.") +AnnotationAssertion(rdfs:label reproschema:MessageSpecification "Message Specification") + +# Class: reproschema:OverrideProperty (Additional properties) + +AnnotationAssertion(rdfs:comment reproschema:OverrideProperty "An object to override the various properties added to assessments and fields.") +AnnotationAssertion(rdfs:label reproschema:OverrideProperty "Additional properties") + +# Class: reproschema:Participant (Participant) + +AnnotationAssertion(rdfs:comment reproschema:Participant "An Agent describing characteristics associated with a participant.") +AnnotationAssertion(rdfs:label reproschema:Participant "Participant") +SubClassOf(reproschema:Participant prov:Agent) + +# Class: reproschema:Protocol (Protocol) + +AnnotationAssertion(rdfs:comment reproschema:Protocol "A representation of a study which comprises one or more assessments.") +AnnotationAssertion(rdfs:label reproschema:Protocol "Protocol") +SubClassOf(reproschema:Protocol schema:CreativeWork) + +# Class: reproschema:Response (Response) + +AnnotationAssertion(rdfs:comment reproschema:Response "Describes the response of an item.") +AnnotationAssertion(rdfs:label reproschema:Response "Response") +SubClassOf(reproschema:Response schema:CreativeWork) + +# Class: reproschema:ResponseActivity (ResponseActivity) + +AnnotationAssertion(rdfs:comment reproschema:ResponseActivity "Captures information about some action that took place. It also links to information (entities) that were used during the activity") +AnnotationAssertion(rdfs:label reproschema:ResponseActivity "ResponseActivity") +SubClassOf(reproschema:ResponseActivity schema:CreativeWork) + +# Class: reproschema:ResponseOption (Response option) + +AnnotationAssertion(rdfs:comment reproschema:ResponseOption "An element (object or by URL)to describe the properties of response of the Field item.") +AnnotationAssertion(rdfs:label reproschema:ResponseOption "Response option") + +# Class: reproschema:Skipped (Skipped) + +AnnotationAssertion(rdfs:comment reproschema:Skipped "An element to describe the choice when the item is skipped.") +AnnotationAssertion(rdfs:label reproschema:Skipped "Skipped") + +# Class: reproschema:SoftwareAgent (Software Agent) + +AnnotationAssertion(rdfs:comment reproschema:SoftwareAgent "Captures information about some action that took place. It also links to information (entities) that were used during the activity") +AnnotationAssertion(rdfs:label reproschema:SoftwareAgent "Software Agent") + +# Class: reproschema:TimedOut (Response timed out) + +AnnotationAssertion(rdfs:comment reproschema:TimedOut "A boolean element to describe if the response did not occur within the prescribed time.") +AnnotationAssertion(rdfs:label reproschema:TimedOut "Response timed out") + +# Class: reproschema:UnitOption (Unit options) + +AnnotationAssertion(rdfs:comment reproschema:UnitOption "An object to represent a human displayable name alongside the more formal value for units.") +AnnotationAssertion(rdfs:label reproschema:UnitOption "Unit options") + + +############################ +# Named Individuals +############################ + +# Individual: reproschema:Activity (Activity) + +ClassAssertion(nidm:Assessment reproschema:Activity) +ClassAssertion(prov:Entity reproschema:Activity) +ClassAssertion(prov:Plan reproschema:Activity) + +# Individual: reproschema:Field (Field) + +ClassAssertion(nidm:DataElement reproschema:Field) +ClassAssertion(prov:Entity reproschema:Field) + +# Individual: reproschema:Participant (Participant) + +ClassAssertion(prov:Person reproschema:Participant) + +# Individual: reproschema:Protocol (Protocol) + +ClassAssertion(prov:Entity reproschema:Protocol) +ClassAssertion(prov:Plan reproschema:Protocol) + +# Individual: reproschema:Response (Response) + +ClassAssertion(prov:Entity reproschema:Response) + +# Individual: reproschema:ResponseActivity (ResponseActivity) + +ClassAssertion(prov:Activity reproschema:ResponseActivity) + +# Individual: reproschema:SoftwareAgent (Software Agent) + +ClassAssertion(prov:SoftwareAgent reproschema:SoftwareAgent) + + +AnnotationAssertion(schema:domainIncludes nidm:subject_id reproschema:Participant) +AnnotationAssertion(rdfs:comment nidm:subject_id "The identifier of a participant") +AnnotationAssertion(rdfs:label nidm:subject_id "Participant identifier") +AnnotationAssertion(schema:domainIncludes schema:about reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:about reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:about reproschema:Protocol) +AnnotationAssertion(rdfs:comment schema:about "The subject matter of the Field.") +AnnotationAssertion(schema:domainIncludes schema:associatedMedia reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:associatedMedia reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:associatedMedia reproschema:Protocol) +AnnotationAssertion(rdfs:comment schema:associatedMedia "A media object that encodes this CreativeWork. This property is a synonym for encoding.") +AnnotationAssertion(rdfs:label schema:associatedMedia "associatedMedia") +AnnotationAssertion(schema:domainIncludes schema:citation reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:description reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:description reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:description reproschema:Protocol) +AnnotationAssertion(schema:domainIncludes schema:image reproschema:Choice) +AnnotationAssertion(schema:domainIncludes schema:image reproschema:Field) +AnnotationAssertion(rdfs:comment schema:image "An image of the item. This can be a URL or a fully described ImageObject.") +AnnotationAssertion(rdfs:label schema:image "image") +AnnotationAssertion(schema:domainIncludes schema:inLanguage reproschema:ResponseActivity) +AnnotationAssertion(schema:domainIncludes schema:isPartOf reproschema:Field) +AnnotationAssertion(schema:rangeIncludes schema:isPartOf reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:maxValue reproschema:ResponseOption) +AnnotationAssertion(schema:domainIncludes schema:minValue reproschema:ResponseOption) +AnnotationAssertion(schema:domainIncludes schema:name reproschema:Choice) +AnnotationAssertion(schema:domainIncludes schema:question reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:readonlyValue reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:schemaVersion reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:schemaVersion reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:schemaVersion reproschema:Protocol) +AnnotationAssertion(schema:domainIncludes schema:url reproschema:SoftwareAgent) +AnnotationAssertion(schema:domainIncludes schema:value reproschema:Choice) +AnnotationAssertion(schema:domainIncludes schema:value reproschema:Response) +AnnotationAssertion(schema:rangeIncludes schema:value schema:Boolean) +AnnotationAssertion(schema:rangeIncludes schema:value schema:Number) +AnnotationAssertion(schema:rangeIncludes schema:value schema:StructuredValue) +AnnotationAssertion(schema:rangeIncludes schema:value schema:Text) +AnnotationAssertion(schema:rangeIncludes schema:value schema:URL) +AnnotationAssertion(schema:rangeIncludes schema:value reproschema:DontKnow) +AnnotationAssertion(schema:rangeIncludes schema:value reproschema:Skipped) +AnnotationAssertion(schema:domainIncludes schema:valueRequired reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes schema:valueRequired reproschema:OverrideProperty) +AnnotationAssertion(schema:domainIncludes schema:version reproschema:Activity) +AnnotationAssertion(schema:domainIncludes schema:version reproschema:Field) +AnnotationAssertion(schema:domainIncludes schema:version reproschema:Protocol) +AnnotationAssertion(schema:domainIncludes schema:version reproschema:SoftwareAgent) +AnnotationAssertion(schema:domainIncludes reproschema:addProperties reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:addProperties reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:addProperties reproschema:AdditionalProperty) +AnnotationAssertion(rdfs:comment reproschema:addProperties "An array of objects to describe the various properties added to assessments and fields.") +AnnotationAssertion(rdfs:label reproschema:addProperties "addProperties") +AnnotationAssertion(schema:domainIncludes reproschema:additionalNotesObj reproschema:Field) +AnnotationAssertion(schema:rangeIncludes reproschema:additionalNotesObj reproschema:AdditionalNoteObj) +AnnotationAssertion(rdfs:comment reproschema:additionalNotesObj "A set of objects to define notes in a field. For example, most Redcap and NDA data dictionaries have notes for each item which needs to be captured in reproschema.") +AnnotationAssertion(rdfs:label reproschema:additionalNotesObj "additional notes") +AnnotationAssertion(schema:domainIncludes reproschema:allow reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:allow reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:allow schema:Thing) +AnnotationAssertion(rdfs:comment reproschema:allow "An array of items indicating properties allowed on an activity or protocol ") +AnnotationAssertion(rdfs:label reproschema:allow "allow") +AnnotationAssertion(schema:domainIncludes reproschema:choices reproschema:ResponseOption) +AnnotationAssertion(schema:rangeIncludes reproschema:choices schema:URL) +AnnotationAssertion(schema:rangeIncludes reproschema:choices reproschema:Choice) +AnnotationAssertion(schema:sameAs reproschema:choices schema:itemListElement) +AnnotationAssertion(rdfs:comment reproschema:choices "An array to list the available options for response of the Field item.") +AnnotationAssertion(rdfs:label reproschema:choices "choices") +AnnotationAssertion(schema:domainIncludes reproschema:column reproschema:AdditionalNoteObj) +AnnotationAssertion(schema:rangeIncludes reproschema:column rdf:langString) +AnnotationAssertion(rdfs:comment reproschema:column "An element to define the column name where the note was taken from.") +AnnotationAssertion(rdfs:label reproschema:column "column") +AnnotationAssertion(schema:domainIncludes reproschema:compute reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:compute reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:compute reproschema:ComputeSpecification) +AnnotationAssertion(rdfs:comment reproschema:compute "An array of objects indicating computations in an activity or protocol and maps it to the corresponding Field item. scoring logic is a subset of all computations that could be performed and not all computations will be scoring. For example, one may want to do conversion from one unit to another. ") +AnnotationAssertion(rdfs:label reproschema:compute "computation") +AnnotationAssertion(schema:domainIncludes reproschema:cronTable reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:cronTable reproschema:Protocol) +AnnotationAssertion(schema:domainIncludes reproschema:datumType reproschema:ResponseOption) +AnnotationAssertion(schema:rangeIncludes reproschema:datumType schema:Text) +AnnotationAssertion(schema:rangeIncludes reproschema:datumType schema:URL) +AnnotationAssertion(rdfs:comment reproschema:datumType "Indicates what type of datum the response is (e.g. range,count,scalar etc.) for the Field item.") +AnnotationAssertion(rdfs:label reproschema:datumType "datumType") +AnnotationAssertion(schema:domainIncludes reproschema:inputType reproschema:Field) +AnnotationAssertion(schema:rangeIncludes reproschema:inputType schema:Text) +AnnotationAssertion(rdfs:comment reproschema:inputType "An element to describe the input type of a Field item.") +AnnotationAssertion(rdfs:label reproschema:inputType "inputType") +AnnotationAssertion(schema:domainIncludes reproschema:isAbout reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:isAbout reproschema:OverrideProperty) +AnnotationAssertion(schema:domainIncludes reproschema:isAbout reproschema:Response) +AnnotationAssertion(schema:rangeIncludes reproschema:isAbout reproschema:Activity) +AnnotationAssertion(schema:rangeIncludes reproschema:isAbout reproschema:Field) +AnnotationAssertion(rdfs:comment reproschema:isAbout "A pointer to the node describing the item.") +AnnotationAssertion(rdfs:label reproschema:isAbout "isAbout") +AnnotationAssertion(schema:domainIncludes reproschema:isVis reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:isVis reproschema:OverrideProperty) +AnnotationAssertion(schema:rangeIncludes reproschema:isVis schema:Boolean) +AnnotationAssertion(schema:rangeIncludes reproschema:isVis schema:Text) +AnnotationAssertion(rdfs:comment reproschema:isVis "An element to describe (by boolean or conditional statement) visibility conditions of items in an assessment.") +AnnotationAssertion(rdfs:label reproschema:isVis "visibility") +AnnotationAssertion(schema:domainIncludes reproschema:jsExpression reproschema:ComputeSpecification) +AnnotationAssertion(schema:domainIncludes reproschema:jsExpression reproschema:MessageSpecification) +AnnotationAssertion(schema:rangeIncludes reproschema:jsExpression schema:Boolean) +AnnotationAssertion(schema:rangeIncludes reproschema:jsExpression schema:Text) +AnnotationAssertion(rdfs:comment reproschema:jsExpression "A JavaScript expression for computations.") +AnnotationAssertion(rdfs:comment reproschema:jsExpression "A JavaScript expression to compute a score from other variables.") +AnnotationAssertion(rdfs:label reproschema:jsExpression "JavaScript Expression") +AnnotationAssertion(schema:domainIncludes reproschema:landingPage reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:landingPage schema:Text) +AnnotationAssertion(schema:rangeIncludes reproschema:landingPage schema:URL) +AnnotationAssertion(rdfs:comment reproschema:landingPage "An element (by URL) to point to the protocol readme or landing page.") +AnnotationAssertion(rdfs:label reproschema:landingPage "Landing page content") +AnnotationAssertion(schema:domainIncludes reproschema:limit reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:limit reproschema:OverrideProperty) +AnnotationAssertion(schema:rangeIncludes reproschema:limit schema:Text) +AnnotationAssertion(rdfs:comment reproschema:limit "An element to limit the duration (uses ISO 8601) this activity is allowed to be completed by once activity is available.") +AnnotationAssertion(rdfs:label reproschema:limit "limit") +AnnotationAssertion(schema:domainIncludes reproschema:maxRetakes reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:maxRetakes reproschema:OverrideProperty) +AnnotationAssertion(schema:rangeIncludes reproschema:maxRetakes schema:Number) +AnnotationAssertion(rdfs:comment reproschema:maxRetakes "Defines number of times the item is allowed to be redone.") +AnnotationAssertion(rdfs:label reproschema:maxRetakes "maxRetakes") +AnnotationAssertion(schema:domainIncludes reproschema:message reproschema:MessageSpecification) +AnnotationAssertion(schema:rangeIncludes reproschema:message schema:Text) +AnnotationAssertion(schema:rangeIncludes reproschema:message rdf:langString) +AnnotationAssertion(rdfs:comment reproschema:message "The message to be conditionally displayed for an item. ") +AnnotationAssertion(rdfs:label reproschema:message "Message") +AnnotationAssertion(schema:domainIncludes reproschema:messages reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:messages reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:messages reproschema:MessageSpecification) +AnnotationAssertion(rdfs:comment reproschema:messages "An array of objects to define conditional messages in an activity or protocol.") +AnnotationAssertion(rdfs:label reproschema:messages "messages") +AnnotationAssertion(schema:domainIncludes reproschema:multipleChoice reproschema:ResponseOption) +AnnotationAssertion(schema:rangeIncludes reproschema:multipleChoice schema:Boolean) +AnnotationAssertion(rdfs:comment reproschema:multipleChoice "Indicates (by bool) if response for the Field item has one or more answer.") +AnnotationAssertion(rdfs:label reproschema:multipleChoice "Multiple choice response expectation") +AnnotationAssertion(schema:domainIncludes reproschema:order reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:order reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:order schema:URL) +AnnotationAssertion(schema:rangeIncludes reproschema:order reproschema:Activity) +AnnotationAssertion(schema:rangeIncludes reproschema:order reproschema:Field) +AnnotationAssertion(rdfs:comment reproschema:order "An ordered list to describe the order in which the items of an assessment or protocol appear in the user interface.") +AnnotationAssertion(rdfs:label reproschema:order "Order") +AnnotationAssertion(schema:domainIncludes reproschema:overrideProperties reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:overrideProperties reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:overrideProperties reproschema:OverrideProperty) +AnnotationAssertion(rdfs:comment reproschema:overrideProperties "An array of objects to override the various properties added to assessments and fields.") +AnnotationAssertion(rdfs:label reproschema:overrideProperties "overrideProperties") +AnnotationAssertion(schema:domainIncludes reproschema:preamble reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:preamble reproschema:Field) +AnnotationAssertion(schema:rangeIncludes reproschema:preamble schema:Text) +AnnotationAssertion(schema:rangeIncludes reproschema:preamble rdf:langString) +AnnotationAssertion(rdfs:comment reproschema:preamble "The preamble for an assessment") +AnnotationAssertion(rdfs:label reproschema:preamble "Preamble") +AnnotationAssertion(schema:domainIncludes reproschema:randomMaxDelay reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:randomMaxDelay reproschema:OverrideProperty) +AnnotationAssertion(schema:rangeIncludes reproschema:randomMaxDelay schema:Text) +AnnotationAssertion(rdfs:comment reproschema:randomMaxDelay "Present activity/item within some random offset of activity available time up to the maximum specified by this ISO 8601 duration") +AnnotationAssertion(rdfs:label reproschema:randomMaxDelay "randomMaxDelay") +AnnotationAssertion(schema:domainIncludes reproschema:responseOptions reproschema:Field) +AnnotationAssertion(schema:rangeIncludes reproschema:responseOptions schema:URL) +AnnotationAssertion(schema:rangeIncludes reproschema:responseOptions reproschema:ResponseOption) +AnnotationAssertion(rdfs:comment reproschema:responseOptions "An element (object or by URL)to describe the properties of response of the Field item.") +AnnotationAssertion(rdfs:label reproschema:responseOptions "Response options") +AnnotationAssertion(schema:domainIncludes reproschema:schedule reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:schedule reproschema:OverrideProperty) +AnnotationAssertion(schema:rangeIncludes reproschema:schedule schema:Schedule) +AnnotationAssertion(schema:rangeIncludes reproschema:schedule schema:Text) +AnnotationAssertion(rdfs:comment reproschema:schedule "An element to set make activity available/repeat info using ISO 8601 repeating interval format.") +AnnotationAssertion(rdfs:label reproschema:schedule "Schedule") +AnnotationAssertion(schema:domainIncludes reproschema:shuffle reproschema:Activity) +AnnotationAssertion(schema:domainIncludes reproschema:shuffle reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes reproschema:shuffle schema:boolean) +AnnotationAssertion(rdfs:comment reproschema:shuffle "An element (bool) to determine if the list of items is shuffled or in order.") +AnnotationAssertion(rdfs:label reproschema:shuffle "Shuffle") +AnnotationAssertion(schema:domainIncludes reproschema:source reproschema:AdditionalNoteObj) +AnnotationAssertion(schema:rangeIncludes reproschema:source rdf:langString) +AnnotationAssertion(rdfs:comment reproschema:source "An element to define the source (eg. RedCap, NDA) where the note was taken from.") +AnnotationAssertion(rdfs:label reproschema:source "source") +AnnotationAssertion(schema:rangeIncludes reproschema:statusOptions schema:Text) +AnnotationAssertion(rdfs:comment reproschema:statusOptions "Provides information on whether or not a field item wants to be accompanied by the additional status option(s) defined in “statusOptions”") +AnnotationAssertion(rdfs:label reproschema:statusOptions "Status options") +AnnotationAssertion(schema:domainIncludes reproschema:unitOptions reproschema:ResponseOption) +AnnotationAssertion(schema:rangeIncludes reproschema:unitOptions reproschema:UnitOption) +AnnotationAssertion(rdfs:comment reproschema:unitOptions "A list of objects to represent a human displayable name alongside the more formal value for units.") +AnnotationAssertion(rdfs:label reproschema:unitOptions "unitOptions") +AnnotationAssertion(schema:domainIncludes reproschema:value reproschema:AdditionalNoteObj) +AnnotationAssertion(schema:domainIncludes reproschema:value reproschema:UnitOption) +AnnotationAssertion(schema:rangeIncludes reproschema:value schema:Boolean) +AnnotationAssertion(schema:rangeIncludes reproschema:value schema:Number) +AnnotationAssertion(schema:rangeIncludes reproschema:value schema:StructuredValue) +AnnotationAssertion(schema:rangeIncludes reproschema:value schema:Text) +AnnotationAssertion(schema:rangeIncludes reproschema:value schema:URL) +AnnotationAssertion(schema:sameAs reproschema:value schema:value) +AnnotationAssertion(rdfs:comment reproschema:value "The value for each option in choices or in additionalNotesObj") +AnnotationAssertion(rdfs:label reproschema:value "value") +AnnotationAssertion(schema:domainIncludes reproschema:valueType reproschema:ResponseOption) +AnnotationAssertion(schema:rangeIncludes reproschema:valueType schema:Text) +AnnotationAssertion(schema:rangeIncludes reproschema:valueType rdf:langString) +AnnotationAssertion(rdfs:comment reproschema:valueType "The type of the response of an item. For example, string, integer, etc.") +AnnotationAssertion(rdfs:label reproschema:valueType "The type of the response") +AnnotationAssertion(schema:domainIncludes reproschema:variableName reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes reproschema:variableName reproschema:ComputeSpecification) +AnnotationAssertion(schema:domainIncludes reproschema:variableName reproschema:OverrideProperty) +AnnotationAssertion(schema:rangeIncludes reproschema:variableName schema:Text) +AnnotationAssertion(rdfs:comment reproschema:variableName "The name used to represent an item.") +AnnotationAssertion(rdfs:label reproschema:variableName "variableName") +AnnotationAssertion(schema:domainIncludes skos:altLabel reproschema:Activity) +AnnotationAssertion(schema:domainIncludes skos:altLabel reproschema:Field) +AnnotationAssertion(schema:domainIncludes skos:altLabel reproschema:Protocol) +AnnotationAssertion(schema:rangeIncludes skos:altLabel schema:Text) +AnnotationAssertion(rdfs:comment skos:altLabel "The alternate label.") +AnnotationAssertion(rdfs:label skos:altLabel "alternate label") +AnnotationAssertion(schema:domainIncludes skos:prefLabel reproschema:Activity) +AnnotationAssertion(schema:domainIncludes skos:prefLabel reproschema:AdditionalProperty) +AnnotationAssertion(schema:domainIncludes skos:prefLabel reproschema:Field) +AnnotationAssertion(schema:domainIncludes skos:prefLabel reproschema:OverrideProperty) +AnnotationAssertion(schema:domainIncludes skos:prefLabel reproschema:Protocol) +AnnotationAssertion(schema:domainIncludes skos:prefLabel reproschema:UnitOption) +AnnotationAssertion(schema:rangeIncludes skos:prefLabel schema:Text) +AnnotationAssertion(rdfs:comment skos:prefLabel "The preferred label.") +AnnotationAssertion(rdfs:label skos:prefLabel "preferred label") +AnnotationAssertion(schema:domainIncludes prov:endedAtTime reproschema:ResponseActivity) +AnnotationAssertion(schema:domainIncludes prov:generated reproschema:ResponseActivity) +AnnotationAssertion(schema:domainIncludes prov:startedAtTime reproschema:ResponseActivity) +AnnotationAssertion(schema:domainIncludes prov:used reproschema:ResponseActivity) +AnnotationAssertion(schema:domainIncludes prov:wasAttributedTo reproschema:Response) +AnnotationAssertion(schema:rangeIncludes prov:wasAttributedTo reproschema:Participant) +) \ No newline at end of file diff --git a/tests/resources/reproschema.ttl b/tests/resources/reproschema.ttl new file mode 100644 index 0000000..29ccea7 --- /dev/null +++ b/tests/resources/reproschema.ttl @@ -0,0 +1,436 @@ +@prefix nidm: . +@prefix prov: . +@prefix rdf: . +@prefix rdfs: . +@prefix reproschema: . +@prefix schema: . +@prefix skos: . + +reproschema:Activity a nidm:Assessment, + rdfs:Class, + prov:Entity, + prov:Plan ; + rdfs:label "Activity" ; + rdfs:comment "An assessment in a protocol." ; + rdfs:subClassOf schema:CreativeWork . + +reproschema:AdditionalNoteObj a rdfs:Class ; + rdfs:label "Additional Notes Object" ; + rdfs:comment "A set of objects to define notes in a field. For example, most Redcap and NDA data dictionaries have notes for each item which needs to be captured in reproschema" . + +reproschema:AdditionalProperty a rdfs:Class ; + rdfs:label "Additional properties" ; + rdfs:comment "An object to describe the various properties added to assessments and fields." . + +reproschema:AllowExport a rdfs:Class ; + rdfs:label "Allow export" ; + rdfs:comment "Indicates (by boolean) if data can be exported or not." . + +reproschema:AllowReplay a rdfs:Class ; + rdfs:label "Allow replay" ; + rdfs:comment "Indicates (by boolean) if items can be replayed or not." . + +reproschema:AutoAdvance a rdfs:Class ; + rdfs:label "Auto advance" ; + rdfs:comment "Indicates (by boolean) if assessments in a protocol can auto advance or not." . + +reproschema:Choice a rdfs:Class ; + rdfs:label "Response choice" ; + rdfs:comment "An object to describe a response option." . + +reproschema:ComputeSpecification a rdfs:Class ; + rdfs:label "Compute Specification" ; + rdfs:comment "An object to define computations in an activity or protocol." . + +reproschema:DisableBack a rdfs:Class ; + rdfs:label "Disable redo" ; + rdfs:comment "Indicates (by boolean) if we can go back to a completed assessment in a protocol." . + +reproschema:DontKnow a rdfs:Class ; + rdfs:label "Do not know" ; + rdfs:comment "An element to describe the choice when response is not known." . + +reproschema:Field a nidm:DataElement, + rdfs:Class, + prov:Entity ; + rdfs:label "Field" ; + rdfs:comment "An item in an assessment." ; + rdfs:subClassOf schema:CreativeWork . + +reproschema:MessageSpecification a rdfs:Class ; + rdfs:label "Message Specification" ; + rdfs:comment "An object to define messages in an activity or protocol." . + +reproschema:OverrideProperty a rdfs:Class ; + rdfs:label "Additional properties" ; + rdfs:comment "An object to override the various properties added to assessments and fields." . + +reproschema:Participant a rdfs:Class, + prov:Person ; + rdfs:label "Participant" ; + rdfs:comment "An Agent describing characteristics associated with a participant." ; + rdfs:subClassOf prov:Agent . + +reproschema:Protocol a rdfs:Class, + prov:Entity, + prov:Plan ; + rdfs:label "Protocol" ; + rdfs:comment "A representation of a study which comprises one or more assessments." ; + rdfs:subClassOf schema:CreativeWork . + +reproschema:Response a rdfs:Class, + prov:Entity ; + rdfs:label "Response" ; + rdfs:comment "Describes the response of an item." ; + rdfs:subClassOf schema:CreativeWork . + +reproschema:ResponseActivity a rdfs:Class, + prov:Activity ; + rdfs:label "ResponseActivity" ; + rdfs:comment "Captures information about some action that took place. It also links to information (entities) that were used during the activity" ; + rdfs:subClassOf schema:CreativeWork . + +reproschema:ResponseOption a rdfs:Class ; + rdfs:label "Response option" ; + rdfs:comment "An element (object or by URL)to describe the properties of response of the Field item." . + +reproschema:Skipped a rdfs:Class ; + rdfs:label "Skipped" ; + rdfs:comment "An element to describe the choice when the item is skipped." . + +reproschema:SoftwareAgent a rdfs:Class, + prov:SoftwareAgent ; + rdfs:label "Software Agent" ; + rdfs:comment "Captures information about some action that took place. It also links to information (entities) that were used during the activity" . + +reproschema:TimedOut a rdfs:Class ; + rdfs:label "Response timed out" ; + rdfs:comment "A boolean element to describe if the response did not occur within the prescribed time." . + +reproschema:UnitOption a rdfs:Class ; + rdfs:label "Unit options" ; + rdfs:comment "An object to represent a human displayable name alongside the more formal value for units." . + +nidm:subject_id rdfs:label "Participant identifier" ; + schema:domainIncludes reproschema:Participant ; + rdfs:comment "The identifier of a participant" . + +schema:about a rdf:Property ; + schema:domainIncludes reproschema:Activity, + reproschema:Field, + reproschema:Protocol ; + rdfs:comment "The subject matter of the Field." . + +schema:associatedMedia a rdf:Property ; + rdfs:label "associatedMedia" ; + schema:domainIncludes reproschema:Activity, + reproschema:Field, + reproschema:Protocol ; + rdfs:comment "A media object that encodes this CreativeWork. This property is a synonym for encoding." . + +schema:citation schema:domainIncludes reproschema:Activity . + +schema:description schema:domainIncludes reproschema:Activity, + reproschema:Field, + reproschema:Protocol . + +schema:image a rdf:Property ; + rdfs:label "image" ; + schema:domainIncludes reproschema:Choice, + reproschema:Field ; + rdfs:comment "An image of the item. This can be a URL or a fully described ImageObject." . + +schema:inLanguage schema:domainIncludes reproschema:ResponseActivity . + +schema:isPartOf a rdf:Property ; + schema:domainIncludes reproschema:Field ; + schema:rangeIncludes reproschema:Activity . + +schema:maxValue schema:domainIncludes reproschema:ResponseOption . + +schema:minValue schema:domainIncludes reproschema:ResponseOption . + +schema:name schema:domainIncludes reproschema:Choice . + +schema:question a rdf:Property ; + schema:domainIncludes reproschema:Field . + +schema:readonlyValue a rdf:Property ; + schema:domainIncludes reproschema:Field . + +schema:schemaVersion a rdf:Property ; + schema:domainIncludes reproschema:Activity, + reproschema:Field, + reproschema:Protocol . + +schema:url schema:domainIncludes reproschema:SoftwareAgent . + +schema:valueRequired schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty . + +schema:version a rdf:Property ; + schema:domainIncludes reproschema:Activity, + reproschema:Field, + reproschema:Protocol, + reproschema:SoftwareAgent . + +reproschema:addProperties a rdf:Property ; + rdfs:label "addProperties" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes reproschema:AdditionalProperty ; + rdfs:comment "An array of objects to describe the various properties added to assessments and fields." . + +reproschema:additionalNotesObj a rdf:Property ; + rdfs:label "additional notes" ; + schema:domainIncludes reproschema:Field ; + schema:rangeIncludes reproschema:AdditionalNoteObj ; + rdfs:comment "A set of objects to define notes in a field. For example, most Redcap and NDA data dictionaries have notes for each item which needs to be captured in reproschema." . + +reproschema:allow a rdf:Property ; + rdfs:label "allow" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes schema:Thing ; + rdfs:comment "An array of items indicating properties allowed on an activity or protocol " . + +reproschema:choices a rdf:Property ; + rdfs:label "choices" ; + schema:domainIncludes reproschema:ResponseOption ; + schema:rangeIncludes schema:URL, + reproschema:Choice ; + schema:sameAs schema:itemListElement ; + rdfs:comment "An array to list the available options for response of the Field item." . + +reproschema:column a rdf:Property ; + rdfs:label "column" ; + schema:domainIncludes reproschema:AdditionalNoteObj ; + schema:rangeIncludes rdf:langString ; + rdfs:comment "An element to define the column name where the note was taken from." . + +reproschema:compute a rdf:Property ; + rdfs:label "computation" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes reproschema:ComputeSpecification ; + rdfs:comment "An array of objects indicating computations in an activity or protocol and maps it to the corresponding Field item. scoring logic is a subset of all computations that could be performed and not all computations will be scoring. For example, one may want to do conversion from one unit to another. " . + +reproschema:cronTable schema:domainIncludes reproschema:Activity, + reproschema:Protocol . + +reproschema:datumType a rdf:Property ; + rdfs:label "datumType" ; + schema:domainIncludes reproschema:ResponseOption ; + schema:rangeIncludes schema:Text, + schema:URL ; + rdfs:comment "Indicates what type of datum the response is (e.g. range,count,scalar etc.) for the Field item." . + +reproschema:inputType a rdf:Property ; + rdfs:label "inputType" ; + schema:domainIncludes reproschema:Field ; + schema:rangeIncludes schema:Text ; + rdfs:comment "An element to describe the input type of a Field item." . + +reproschema:isAbout a rdf:Property ; + rdfs:label "isAbout" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty, + reproschema:Response ; + schema:rangeIncludes reproschema:Activity, + reproschema:Field ; + rdfs:comment "A pointer to the node describing the item." . + +reproschema:isVis a rdf:Property ; + rdfs:label "visibility" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty ; + schema:rangeIncludes schema:Boolean, + schema:Text ; + rdfs:comment "An element to describe (by boolean or conditional statement) visibility conditions of items in an assessment." . + +reproschema:jsExpression a rdf:Property ; + rdfs:label "JavaScript Expression" ; + schema:domainIncludes reproschema:ComputeSpecification, + reproschema:MessageSpecification ; + schema:rangeIncludes schema:Boolean, + schema:Text ; + rdfs:comment "A JavaScript expression for computations.", + "A JavaScript expression to compute a score from other variables." . + +reproschema:landingPage a rdf:Property ; + rdfs:label "Landing page content" ; + schema:domainIncludes reproschema:Protocol ; + schema:rangeIncludes schema:Text, + schema:URL ; + rdfs:comment "An element (by URL) to point to the protocol readme or landing page." . + +reproschema:limit a rdf:Property ; + rdfs:label "limit" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty ; + schema:rangeIncludes schema:Text ; + rdfs:comment "An element to limit the duration (uses ISO 8601) this activity is allowed to be completed by once activity is available." . + +reproschema:maxRetakes a rdf:Property ; + rdfs:label "maxRetakes" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty ; + schema:rangeIncludes schema:Number ; + rdfs:comment "Defines number of times the item is allowed to be redone." . + +reproschema:message a rdf:Property ; + rdfs:label "Message" ; + schema:domainIncludes reproschema:MessageSpecification ; + schema:rangeIncludes schema:Text, + rdf:langString ; + rdfs:comment "The message to be conditionally displayed for an item. " . + +reproschema:messages a rdf:Property ; + rdfs:label "messages" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes reproschema:MessageSpecification ; + rdfs:comment "An array of objects to define conditional messages in an activity or protocol." . + +reproschema:multipleChoice a rdf:Property ; + rdfs:label "Multiple choice response expectation" ; + schema:domainIncludes reproschema:ResponseOption ; + schema:rangeIncludes schema:Boolean ; + rdfs:comment "Indicates (by bool) if response for the Field item has one or more answer." . + +reproschema:order a rdf:Property ; + rdfs:label "Order" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes schema:URL, + reproschema:Activity, + reproschema:Field ; + rdfs:comment "An ordered list to describe the order in which the items of an assessment or protocol appear in the user interface." . + +reproschema:overrideProperties a rdf:Property ; + rdfs:label "overrideProperties" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes reproschema:OverrideProperty ; + rdfs:comment "An array of objects to override the various properties added to assessments and fields." . + +reproschema:preamble a rdf:Property ; + rdfs:label "Preamble" ; + schema:domainIncludes reproschema:Activity, + reproschema:Field ; + schema:rangeIncludes schema:Text, + rdf:langString ; + rdfs:comment "The preamble for an assessment" . + +reproschema:randomMaxDelay a rdf:Property ; + rdfs:label "randomMaxDelay" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty ; + schema:rangeIncludes schema:Text ; + rdfs:comment "Present activity/item within some random offset of activity available time up to the maximum specified by this ISO 8601 duration" . + +reproschema:responseOptions a rdf:Property ; + rdfs:label "Response options" ; + schema:domainIncludes reproschema:Field ; + schema:rangeIncludes schema:URL, + reproschema:ResponseOption ; + rdfs:comment "An element (object or by URL)to describe the properties of response of the Field item." . + +reproschema:schedule a rdf:Property ; + rdfs:label "Schedule" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:OverrideProperty ; + schema:rangeIncludes schema:Schedule, + schema:Text ; + rdfs:comment "An element to set make activity available/repeat info using ISO 8601 repeating interval format." . + +reproschema:shuffle a rdf:Property ; + rdfs:label "Shuffle" ; + schema:domainIncludes reproschema:Activity, + reproschema:Protocol ; + schema:rangeIncludes schema:boolean ; + rdfs:comment "An element (bool) to determine if the list of items is shuffled or in order." . + +reproschema:source a rdf:Property ; + rdfs:label "source" ; + schema:domainIncludes reproschema:AdditionalNoteObj ; + schema:rangeIncludes rdf:langString ; + rdfs:comment "An element to define the source (eg. RedCap, NDA) where the note was taken from." . + +reproschema:statusOptions a rdf:Property ; + rdfs:label "Status options" ; + schema:rangeIncludes schema:Text ; + rdfs:comment "Provides information on whether or not a field item wants to be accompanied by the additional status option(s) defined in “statusOptions”" . + +reproschema:unitOptions a rdf:Property ; + rdfs:label "unitOptions" ; + schema:domainIncludes reproschema:ResponseOption ; + schema:rangeIncludes reproschema:UnitOption ; + rdfs:comment "A list of objects to represent a human displayable name alongside the more formal value for units." . + +reproschema:value a rdf:Property ; + rdfs:label "value" ; + schema:domainIncludes reproschema:AdditionalNoteObj, + reproschema:UnitOption ; + schema:rangeIncludes schema:Boolean, + schema:Number, + schema:StructuredValue, + schema:Text, + schema:URL ; + schema:sameAs schema:value ; + rdfs:comment "The value for each option in choices or in additionalNotesObj" . + +reproschema:valueType a rdf:Property ; + rdfs:label "The type of the response" ; + schema:domainIncludes reproschema:ResponseOption ; + schema:rangeIncludes schema:Text, + rdf:langString ; + rdfs:comment "The type of the response of an item. For example, string, integer, etc." . + +reproschema:variableName a rdf:Property ; + rdfs:label "variableName" ; + schema:domainIncludes reproschema:AdditionalProperty, + reproschema:ComputeSpecification, + reproschema:OverrideProperty ; + schema:rangeIncludes schema:Text ; + rdfs:comment "The name used to represent an item." . + +skos:altLabel a rdf:Property ; + rdfs:label "alternate label" ; + schema:domainIncludes reproschema:Activity, + reproschema:Field, + reproschema:Protocol ; + schema:rangeIncludes schema:Text ; + rdfs:comment "The alternate label." . + +skos:prefLabel a rdf:Property ; + rdfs:label "preferred label" ; + schema:domainIncludes reproschema:Activity, + reproschema:AdditionalProperty, + reproschema:Field, + reproschema:OverrideProperty, + reproschema:Protocol, + reproschema:UnitOption ; + schema:rangeIncludes schema:Text ; + rdfs:comment "The preferred label." . + +prov:endedAtTime schema:domainIncludes reproschema:ResponseActivity . + +prov:generated schema:domainIncludes reproschema:ResponseActivity . + +prov:startedAtTime schema:domainIncludes reproschema:ResponseActivity . + +prov:used schema:domainIncludes reproschema:ResponseActivity . + +prov:wasAttributedTo schema:domainIncludes reproschema:Response ; + schema:rangeIncludes reproschema:Participant . + +schema:value schema:domainIncludes reproschema:Choice, + reproschema:Response ; + schema:rangeIncludes schema:Boolean, + schema:Number, + schema:StructuredValue, + schema:Text, + schema:URL, + reproschema:DontKnow, + reproschema:Skipped . diff --git a/tests/resources/test-anon-individual.ofn b/tests/resources/test-anon-individual.ofn new file mode 100644 index 0000000..d906c26 --- /dev/null +++ b/tests/resources/test-anon-individual.ofn @@ -0,0 +1,123 @@ +Prefix(:=) +Prefix(sh:=) +Prefix(dct:=) +Prefix(owl:=) +Prefix(rdf:=) +Prefix(xml:=) +Prefix(xsd:=) +Prefix(rdfs:=) +Prefix(vaem:=) + + +Ontology( +Annotation( "admin") +Annotation(dct:contributor "admin") +Annotation(dct:created "2024-07-16T13:56:07.545Z"^^xsd:dateTime) +Annotation(dct:creator "admin") +Annotation(dct:modified "2024-07-17T13:31:13.848Z"^^xsd:dateTime) +Annotation(dct:title "Test Ontology"@en) +Annotation( ) +Annotation(vaem:namespace ) +Annotation(rdfs:label "Test Ontology"@en) +Annotation(owl:priorVersion ) +Annotation(owl:versionInfo "0.2") + +Declaration(Class(sh:NodeShape)) +Declaration(Class()) +Declaration(Class()) +Declaration(ObjectProperty()) +Declaration(DataProperty()) +Declaration(NamedIndividual()) +Declaration(NamedIndividual()) +Declaration(AnnotationProperty()) +Declaration(AnnotationProperty(dct:contributor)) +Declaration(AnnotationProperty(dct:created)) +Declaration(AnnotationProperty(dct:creator)) +Declaration(AnnotationProperty(dct:modified)) +Declaration(AnnotationProperty(dct:title)) +Declaration(AnnotationProperty()) +Declaration(AnnotationProperty(vaem:namespace)) +Declaration(AnnotationProperty(sh:class)) +Declaration(AnnotationProperty(sh:datatype)) +Declaration(AnnotationProperty(sh:path)) +Declaration(AnnotationProperty(sh:property)) +Declaration(AnnotationProperty(sh:targetClass)) + +############################ +# Object Properties +############################ + +# Object Property: (contains) + +AnnotationAssertion( "admin") +AnnotationAssertion(dct:contributor "admin") +AnnotationAssertion(dct:created "2024-07-17T13:31:13.848Z"^^xsd:dateTime) +AnnotationAssertion(dct:creator "admin") +AnnotationAssertion(dct:modified "2024-07-17T13:31:13.848Z"^^xsd:dateTime) +AnnotationAssertion(rdfs:isDefinedBy ) +AnnotationAssertion(rdfs:label "contains") + + +############################ +# Data Properties +############################ + +# Data Property: (name) + +AnnotationAssertion( "admin") +AnnotationAssertion(dct:contributor "admin") +AnnotationAssertion(dct:created "2024-07-16T13:57:08.281Z"^^xsd:dateTime) +AnnotationAssertion(dct:creator "admin") +AnnotationAssertion(dct:modified "2024-07-16T13:57:08.281Z"^^xsd:dateTime) +AnnotationAssertion(rdfs:isDefinedBy ) +AnnotationAssertion(rdfs:label "name") + + + +############################ +# Classes +############################ + +# Class: (Person) + +AnnotationAssertion( "admin") +AnnotationAssertion(dct:contributor "admin") +AnnotationAssertion(dct:created "2024-07-16T13:57:08.281Z"^^xsd:dateTime) +AnnotationAssertion(dct:creator "admin") +AnnotationAssertion(dct:modified "2024-07-16T13:57:08.281Z"^^xsd:dateTime) +AnnotationAssertion(rdfs:isDefinedBy ) +AnnotationAssertion(rdfs:label "Person"@en) + +# Class: (Team) + +AnnotationAssertion( "admin") +AnnotationAssertion(dct:contributor "admin") +AnnotationAssertion(dct:created "2024-07-17T13:31:13.848Z"^^xsd:dateTime) +AnnotationAssertion(dct:creator "admin") +AnnotationAssertion(dct:modified "2024-07-17T13:31:13.848Z"^^xsd:dateTime) +AnnotationAssertion(rdfs:isDefinedBy ) +AnnotationAssertion(rdfs:label "Team"@en) + + +############################ +# Named Individuals +############################ + +# Individual: () + +AnnotationAssertion(sh:property _:genid2147483649) +AnnotationAssertion(sh:targetClass ) +ClassAssertion(sh:NodeShape ) + +# Individual: () + +AnnotationAssertion(sh:property _:genid2147483648) +AnnotationAssertion(sh:targetClass ) +ClassAssertion(sh:NodeShape ) + + +AnnotationAssertion(sh:class _:genid2147483648 ) +AnnotationAssertion(sh:path _:genid2147483648 ) +AnnotationAssertion(sh:datatype _:genid2147483649 xsd:string) +AnnotationAssertion(sh:path _:genid2147483649 rdfs:label) +) \ No newline at end of file diff --git a/tests/resources/test.kwalify.yaml b/tests/resources/test.kwalify.yaml new file mode 100644 index 0000000..a913c49 --- /dev/null +++ b/tests/resources/test.kwalify.yaml @@ -0,0 +1,71 @@ +type: map +mapping: + "id": + type: str + required: true + "title": + type: str + required: true + "preferred label": + type: str + required: true + "type": + type: str + required: true + enum: [blacklist, binning subset, ribbon, tag] + "status": + type: str + required: true + enum: [active, obsolete] + "description": + type: str + required: true + "taxon": + - type: map + mapping: + "id": + type: str + required: true + pattern: /NCBITaxon\:\d+/ + "label": + type: str + required: true + "github": + - type: map + mapping: + "tracker": + type: string + required: true+ + pattern: /https:\/\/github\.com\/geneontology[^\s]+/ + "contact": + - type: map + mapping: + "email": + type: str + required: true + pattern: /[^\s]+@[^\s]+\.[^\s]+/ + "label": + type: str + required: true + "contributors": + - type: map + mapping: + "email": + type: str + required: true + pattern: /[^\s]+@[^\s]+\.[^\s]+/ + "label": + type: str + required: true + "orcid": + type: str + required: false + pattern: /https:\/\/orcid.org\/\d{4}\-\d{4}\-\d{4}\-\d{4}/ + "github": + type: str + required: false + + + + + diff --git a/tests/resources/test2.kwalify.yaml b/tests/resources/test2.kwalify.yaml new file mode 100644 index 0000000..59ee1c9 --- /dev/null +++ b/tests/resources/test2.kwalify.yaml @@ -0,0 +1,149 @@ +#### +#### Use kwalify and this schema to validate the config files. +#### Example: +#### kwalify -E -m ./metadata/datasets.schema.yaml +#### kwalify -E -f ./metadata/datasets.schema.yaml ./metadata/FOO.yaml +#### +#### To convert to JSON once passed: +#### ./node_modules/yamljs/bin/yaml2json -p ./metadata/datasets.yaml > ./metadata/datasets.json +#### +type: map +mapping: + "id": + type: str + required: true + unique: true + "label": + type: str + required: true + unique: true + "description": + type: str + required: true + unique: true + "project_name": + type: str + required: false + unique: false + "contact_email": + type: str + required: false + unique: false + "project_url": + type: str + required: false + unique: false + "funding_source": + type: str + required: false + unique: false + "email_report": + type: str + required: false + unique: false + "filter_out": + type: map + required: false + mapping: + "evidence": + type: seq + required: false + sequence: + - type: str + pattern: /ECO:[0-9]{7}/ + "evidence_reference": + type: seq + required: false + sequence: + - type: map + mapping: + "evidence": + type: str + required: true + pattern: /ECO:[0-9]{7}/ + "reference": + type: str + required: true + "annotation_properties": + type: seq + required: false + sequence: + - type: str + "datasets": + type: seq + required: true + sequence: + - type: map + mapping: + "id": + type: str + required: true + unique: true + "label": + type: str + required: true + unique: true + "description": + type: str + required: true + unique: true + "url": + type: str + required: false + unique: true + "type": + type: str + required: true + unique: false + "dataset": + type: str + required: true + unique: false + "submitter": + type: str + required: true + unique: false + "compression": + type: str + required: false + unique: false + enum: ['', gzip] + "source": + type: str + required: false + unique: false + "mirror_of": + type: str + required: false + unique: false + "species_code": + type: str + required: false + unique: false + "merges_into": + type: str + required: false + unique: false + "import": + type: bool + required: false + "entity_type": + type: str + required: false + unique: false + "aggregates": + type: str + required: false + unique: false + "status": + type: str + required: false + unique: false + "taxa": + type: seq + required: false + sequence: + - type: str + "exclude": + type: bool + required: false diff --git a/tests/test_generalizers/test_csv_data_generalizer.py b/tests/test_generalizers/test_csv_data_generalizer.py index d7f83b6..b85d789 100644 --- a/tests/test_generalizers/test_csv_data_generalizer.py +++ b/tests/test_generalizers/test_csv_data_generalizer.py @@ -68,6 +68,10 @@ def test_infer_range(self): (['5.999', '7.955', '7.990', '6.990'], "float"), (["2mm", "3m", "4 mm"], "measurement"), (["true", "false"], "boolean"), + (["2024-01-01", "2023-12-31"], "date"), + (["2024-01-01T12:30:00", "2023-12-31T08:15:00"], "datetime"), + (["2024-01-01", "2023-12-31T08:15:00"], "datetime"), + (["2024-01-01", "not-a-date"], "string"), ] for values, expected in cases: self.assertEqual(infer_range({}, values, {}), expected, f"Failed on {values}") diff --git a/tests/test_importers/test_cadsr_importer.py b/tests/test_importers/test_cadsr_importer.py new file mode 100644 index 0000000..da1ea8e --- /dev/null +++ b/tests/test_importers/test_cadsr_importer.py @@ -0,0 +1,35 @@ +import os + +from linkml.generators import PythonGenerator, OwlSchemaGenerator +from linkml_runtime import SchemaView + +from schema_automator.importers.cadsr_import_engine import CADSRImportEngine +from schema_automator.utils import write_schema +from tests import INPUT_DIR, OUTPUT_DIR + +IDS = ["996", "12137353", "2724331", "2721353", "2179609"] +OUT = os.path.join(OUTPUT_DIR, "cadsr-cde-example.yaml") +OWL_OUT = os.path.join(OUTPUT_DIR, "cadsr-cde-example.owl.ttl") + + +def test_cadsr_import(): + ie = CADSRImportEngine() + paths = [os.path.join(INPUT_DIR, f"cadsr-cde-{i}.json") for i in IDS] + schema = ie.convert(paths, id="https://w3id.org/linkml/cadsr", name="cadsr_schema") + assert schema + write_schema(schema, OUT) + py_str = PythonGenerator(OUT).serialize() + assert py_str + _sv = SchemaView(schema) + with open(OWL_OUT, "w", encoding="utf-8") as stream: + owlgen = OwlSchemaGenerator(OUT, add_root_classes=True, metaclasses=False, type_objects=False) + stream.write(owlgen.serialize()) + + +def test_cadsr_to_table(): + ie = CADSRImportEngine() + paths = [os.path.join(INPUT_DIR, f"cadsr-cde-{i}.json") for i in IDS] + rows = list(ie.as_rows(paths)) + assert rows + for row in rows: + print(row) diff --git a/tests/test_importers/test_dbml_importer.py b/tests/test_importers/test_dbml_importer.py new file mode 100644 index 0000000..ca3bb70 --- /dev/null +++ b/tests/test_importers/test_dbml_importer.py @@ -0,0 +1,72 @@ +import pytest +from linkml_runtime.linkml_model import SchemaDefinition +from schema_automator.importers.dbml_import_engine import DbmlImportEngine + +# Sample DBML content for testing +DBML_SAMPLE = """ +Table Users { + id int [primary key, not null] + email varchar [unique, not null] + username varchar +} + +Table Orders { + order_id int [not null] + user_id int [not null] + product_id int [not null] + quantity int +} + +Table Countries { + code varchar [primary key, not null] + name varchar [not null] +} +""" + +@pytest.fixture +def dbml_file(tmp_path): + """ + Fixture to create a temporary DBML file. + """ + dbml_path = tmp_path / "test.dbml" + dbml_path.write_text(DBML_SAMPLE) + print(dbml_path) + return dbml_path + +@pytest.fixture +def importer(): + """ + Fixture to initialize the DbmlImportEngine. + """ + return DbmlImportEngine() + +def test_dbml_to_linkml_conversion(dbml_file, importer): + """ + Test the basic conversion of DBML to a LinkML schema. + """ + schema = importer.convert(file=str(dbml_file), name="TestSchema") + + # Assert the schema object is created + assert isinstance(schema, SchemaDefinition) + + # Check that expected classes are present + assert "Users" in schema.classes + assert "Orders" in schema.classes + + # Check that expected slots are present + assert "id" in schema.slots + assert schema.slots["id"].identifier + assert schema.slots["id"].required + + +def test_primary_key_handling(dbml_file, importer): + """ + Test correct handling of primary keys and required attributes. + """ + schema = importer.convert(file=str(dbml_file), name="TestSchema") + + # Check that primary keys are marked as required and identifiers + users_class = schema.classes["Users"] + assert "id" in users_class.slots + assert schema.slots["id"].identifier + assert schema.slots["id"].required diff --git a/tests/test_importers/test_jsonschema_importer.py b/tests/test_importers/test_jsonschema_importer.py index 5407c32..169a68d 100644 --- a/tests/test_importers/test_jsonschema_importer.py +++ b/tests/test_importers/test_jsonschema_importer.py @@ -4,6 +4,9 @@ import unittest import os +from pathlib import Path + +from linkml_runtime import SchemaView from linkml_runtime.utils.compile_python import compile_python from schema_automator.importers.jsonschema_import_engine import JsonSchemaImportEngine @@ -64,7 +67,7 @@ def test_convert_dosdp(self): axiom_type_options = schema.enums['axiom_type_options'] self.assertIn('equivalentTo', axiom_type_options.permissible_values) self.assertIn('axiom_type', schema.slots) - self.assertIn('printf_clause', schema.classes) + self.assertIn('PrintfClause', schema.classes) def test_convert_vrs(self): """Test JSONSchema conversion.""" @@ -93,3 +96,29 @@ def test_obo_registry(self): self.assertIn('activity_status', schema.slots) self.assertEqual('activity_status_options', schema.slots['activity_status'].range) + def test_import_hca_project(self): + """This also tests the ability to import a whole project. + + Note that the following modifications were made: + + - changed 10x to S10x + - modified links to remove name clashes with classes + + - renamed protocol to protocol_reference + - renamed supplementary_file to supplementary_file_reference + + """ + ie = JsonSchemaImportEngine(use_attributes=True) + import_path = Path(INPUT_DIR) / "hca" + export_path = Path(OUTPUT_DIR) / "hca" + root_path = ie.import_project(import_path, export_path, name="hca") + sv = SchemaView(root_path) + c = sv.get_class("OrganPartOntology") + ont_slot = c.attributes["ontology"] + rng = ont_slot.range + edef = sv.get_enum(rng) + self.assertEqual(2, len(edef.include)) + self.assertIsNotNone(ont_slot.title) + jsonschema_str = JsonSchemaGenerator(root_path).serialize() + + diff --git a/tests/test_importers/test_kwalify_importer.py b/tests/test_importers/test_kwalify_importer.py new file mode 100644 index 0000000..12b9c9c --- /dev/null +++ b/tests/test_importers/test_kwalify_importer.py @@ -0,0 +1,53 @@ +# -*- coding: utf-8 -*- + +import os +from pathlib import Path + +import pytest +from linkml.generators.pythongen import PythonGenerator +from linkml_runtime import SchemaView +from schema_automator.importers.kwalify_import_engine import KwalifyImportEngine +from schema_automator.utils import write_schema +from tests import INPUT_DIR, OUTPUT_DIR + + +EXPECTED_TEST1 = """ + status: + range: MySchema_status_enum + required: true + description: + range: string + required: true + taxon: + range: Taxon + required: false +""" + + +@pytest.mark.parametrize('test_input,schema_id, schema_name,class_name,expected', [ + ("test2", None, None, None, None), + ("test", None, None, None, None), + ("test", None, "my_schema", None, [EXPECTED_TEST1]), +]) +def test_kwalify_import(test_input, schema_id, schema_name, class_name, expected): + """ + Test importing kwalify + """ + ie = KwalifyImportEngine() + in_path = Path(INPUT_DIR) / f"{test_input}.kwalify.yaml" + out_path = str(Path(OUTPUT_DIR) / f"{test_input}-from-kwalify.yaml") + schema = ie.convert(in_path, + id=schema_id, name=schema_name, + class_name=class_name) + write_schema(schema, out_path) + schema_str = open(out_path).read() + py_str = PythonGenerator(out_path).serialize() + assert py_str is not None + _sv = SchemaView(schema) + if expected: + for e in expected: + assert e in schema_str + + + + diff --git a/tests/test_importers/test_owl_importer.py b/tests/test_importers/test_owl_importer.py index d6e392a..77b72b6 100644 --- a/tests/test_importers/test_owl_importer.py +++ b/tests/test_importers/test_owl_importer.py @@ -17,10 +17,10 @@ OUTSCHEMA_ENHANCED = os.path.join(OUTPUT_DIR, 'prov-from-owl.enhanced.yaml') class TestOwlImporter(unittest.TestCase): - """PROV """ + """Tests OWL conversion """ def test_from_owl(self): - """Test OWL conversion.""" + """Test OWL conversion on reproschema.""" oie = OwlImportEngine() schema = oie.convert(PROV, name='prov') write_schema(schema, OUTSCHEMA) @@ -28,4 +28,12 @@ def test_from_owl(self): with open(OUTSCHEMA_ENHANCED, 'w') as stream: stream.write(s) + def test_anon_individuals(self): + """ + Test that anonymous individuals are handled correctly + """ + oie = OwlImportEngine() + schema = oie.convert(os.path.join(INPUT_DIR, 'test-anon-individual.ofn'), name='anon_individuals') + write_schema(schema, os.path.join(OUTPUT_DIR, 'anon-individual-from-owl.yaml')) + diff --git a/tests/test_importers/test_rdfs_importer.py b/tests/test_importers/test_rdfs_importer.py new file mode 100644 index 0000000..9e4f020 --- /dev/null +++ b/tests/test_importers/test_rdfs_importer.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- + +# Monkey patching jsonobj to fix windows issue +import platform + +if platform.system() == "Windows": + from jsonasobj2 import JsonObj + if not hasattr(JsonObj, 'values'): + def _values(self): + return { + k: v for k, v in self.__dict__.items() + if not callable(v) and not k.startswith('_') + }.values() + JsonObj.values = _values + +from io import StringIO +import unittest +import os +import pytest +import yaml +from linkml_runtime import SchemaView + +from schema_automator.importers.owl_import_engine import OwlImportEngine +from linkml.generators.yamlgen import YAMLGenerator +from schema_automator.importers.rdfs_import_engine import RdfsImportEngine + +from schema_automator.utils.schemautils import write_schema +from tests import INPUT_DIR, OUTPUT_DIR + +REPRO = os.path.join(INPUT_DIR, 'reproschema.ttl') +OUTSCHEMA = os.path.join(OUTPUT_DIR, 'reproschema-from-ttl.yaml') +FOAF = os.path.join(INPUT_DIR, 'foaf_snippet.ttl') + +def test_import_foaf(): + engine = RdfsImportEngine() + schema = engine.convert(FOAF) + sv = SchemaView(schema) + assert sv.get_slot("knows").range == "Person" + assert sv.schema.default_prefix == "foaf" + assert "foaf" in sv.schema.prefixes + +def test_comment_description(): + """ + rdfs:comment should be converted to description + """ + rdf = StringIO(""" + @prefix rdfs: . + + a rdfs:Class ; + rdfs:comment "A class." . + """) + engine = RdfsImportEngine() + schema = engine.convert(rdf) + sv = SchemaView(schema) + cls = sv.get_class("Class") + assert cls.description == "A class." + +def test_infer_prefix(): + """ + If the schema has no name, id or default prefix, the importer should infer them from prefix usage in the schema. + """ + rdf = StringIO(""" + @prefix rdfs: . + @prefix foo: . + + foo:Class a rdfs:Class ; + rdfs:comment "A class." . + + foo:prop a rdfs:Property ; + rdfs:comment "A property." . + """) + engine = RdfsImportEngine() + schema = engine.convert(rdf) + # Although not explicitly provided, the importer should realise that the prefix is "foo" + assert schema.default_prefix == "foo" + assert schema.id == "https://foo.com/" + assert schema.name == "foo" + +def test_from_rdfs(): + """Test OWL conversion.""" + oie = RdfsImportEngine() + schema = oie.convert(REPRO, default_prefix='reproschema', identifier='id') + write_schema(schema, OUTSCHEMA) + # roundtrip + s = YAMLGenerator(OUTSCHEMA).serialize() + sv = SchemaView(OUTSCHEMA) + activity = sv.get_class("Activity") + assert activity + assert activity.name == "Activity" + assert activity.is_a == "CreativeWork" + slots = sv.class_induced_slots(activity.name) + assert len(slots) == 18 + slot_names = [s.name for s in slots] + assert "messages" in slot_names diff --git a/tests/test_importers/test_sql_importer.py b/tests/test_importers/test_sql_importer.py index 531505d..2cbe60d 100644 --- a/tests/test_importers/test_sql_importer.py +++ b/tests/test_importers/test_sql_importer.py @@ -35,9 +35,9 @@ def setUp(self) -> None: sb = SchemaBuilder() sb.add_class('Person', ['id', 'name', 'email', 'age', 'knows']) - sb.add_slot(SlotDefinition('id', identifier=True)) - sb.add_slot(SlotDefinition('age', range='integer')) - sb.add_slot(SlotDefinition('knows', range='Person', multivalued=True)) + sb.add_slot(SlotDefinition('id', identifier=True), replace_if_present=True) + sb.add_slot(SlotDefinition('age', range='integer'), replace_if_present=True) + sb.add_slot(SlotDefinition('knows', range='Person', multivalued=True), replace_if_present=True) sb.add_defaults() schema = sb.schema #print(yaml_dumper.dumps(schema)) @@ -67,7 +67,11 @@ def test_from_sql(self): for c in schemaview.all_classes().values(): self.assertIn(c.name, schemaview_rt.all_classes()) for s in schemaview.class_induced_slots(c.name): - self.assertIn(s.name, schemaview_rt.all_slots()) + if s.name == "knows": + # these slots are moved to join tables + self.assertNotIn(s.name, schemaview_rt.all_slots().keys()) + else: + self.assertIn(s.name, schemaview_rt.all_slots().keys()) person = schemaview_rt.get_class('Person') person_knows_join = schemaview_rt.get_class('Person_knows') id_slot = person.attributes['id'] @@ -75,7 +79,7 @@ def test_from_sql(self): self.assertTrue(id_slot.identifier) self.assertEqual('integer', age_slot.range) self.assertEqual('Person', person_knows_join.attributes['Person_id'].range) - self.assertEqual('Person', person_knows_join.attributes['knows'].range) + self.assertEqual('Person', person_knows_join.attributes['knows_id'].range) diff --git a/tests/test_importers/test_tabular_importer.py b/tests/test_importers/test_tabular_importer.py new file mode 100644 index 0000000..84cf92b --- /dev/null +++ b/tests/test_importers/test_tabular_importer.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +import unittest +import os +from pathlib import Path + +import pandas as pd + +from schema_automator.importers.tabular_import_engine import TableImportEngine +from schema_automator.utils import write_schema +from tests import INPUT_DIR, OUTPUT_DIR + +OUT = os.path.join(OUTPUT_DIR, "BioMRLs.yaml") +INPUT_HTML = os.path.join(INPUT_DIR, "BioMRLs-table.html") + + +class TestTableImporter(unittest.TestCase): + """Tests import from tables data packages """ + + def setUp(self) -> None: + pass + + def test_html_import(self): + """ + Test importing a table from HTML via BS + """ + ie = TableImportEngine(parent="BioMRL", + element_type="enum", + columns=["permissible_value", "description"]) + # this doesn't work on windows: + dfs = pd.read_html(Path(f"{INPUT_HTML}").as_uri()) + schema = ie.import_from_dataframe(dfs[0]) + write_schema(schema, OUT) + + + + + +