diff --git a/Makefile b/Makefile index dcc90975..8b10c17d 100644 --- a/Makefile +++ b/Makefile @@ -12,6 +12,7 @@ WGET = /usr/bin/env wget --timestamping --no-verbose .DEFAULT_GOAL := all SHELL := bash +RUN = poetry run .PHONY: all all: install format test clean @@ -29,12 +30,12 @@ install-full: .PHONY: test test: install - poetry run python -m pytest tests + $(RUN) python -m pytest tests .PHONY: docs docs: install-full - poetry run typer src/monarch_ingest/main.py utils docs --name ingest --output docs/CLI.md + $(RUN) typer src/monarch_ingest/main.py utils docs --name ingest --output docs/CLI.md .PHONY: clean @@ -47,18 +48,11 @@ clean: .PHONY: lint lint: install-full - poetry run flake8 --exit-zero --max-line-length 120 src/monarch_ingest/ tests/ - poetry run black --check --diff monarch_ingest tests - poetry run isort --check-only --diff monarch_ingest tests + $(RUN) ruff check --diff --exit-zero src/ tests/ + $(RUN) black --check --diff -l 120 src/ tests/ .PHONY: format format: install-full - poetry run autoflake \ - --recursive \ - --remove-all-unused-imports \ - --remove-unused-variables \ - --ignore-init-module-imports \ - --in-place monarch_ingest tests - poetry run isort monarch_ingest tests - poetry run black monarch_ingest tests + $(RUN) ruff check --fix --exit-zero src/ tests/ + $(RUN) black -l 120 src/ tests/ diff --git a/docs/Create-an-Ingest/4. Implement.md b/docs/Create-an-Ingest/4. Implement.md index d8ebe23e..1cb7a4b3 100644 --- a/docs/Create-an-Ingest/4. Implement.md +++ b/docs/Create-an-Ingest/4. Implement.md @@ -7,7 +7,7 @@ Most Koza scripts can run in flat mode, which means that the transform code itse Start with the imports, and make sure to set the source_name, which will be used for communicating with the reader and writer. ```python -from koza.cli_runner import koza_app +from koza.cli_utils import koza_app from biolink.pydanticmodel_v2 import Gene # The source name is used for reading and writing diff --git a/docs/Create-an-Ingest/5. Test.md b/docs/Create-an-Ingest/5. Test.md index fc13f3e5..aef2be90 100644 --- a/docs/Create-an-Ingest/5. Test.md +++ b/docs/Create-an-Ingest/5. Test.md @@ -8,7 +8,7 @@ First, set up your basic fixtures, taking care to set the correct source name an ```python import pytest -from koza.cli_runner import get_translation_table +from koza.cli_utils import get_translation_table @pytest.fixture def tt(): diff --git a/ingest_template/example_test.py b/ingest_template/example_test.py index 0f7f109d..d11ab6a5 100644 --- a/ingest_template/example_test.py +++ b/ingest_template/example_test.py @@ -1,5 +1,5 @@ import pytest -from koza.cli_runner import get_translation_table +from koza.cli_utils import get_translation_table @pytest.fixture diff --git a/ingest_template/source-file-template-csv.py b/ingest_template/source-file-template-csv.py index 9e6005da..8fd0127d 100644 --- a/ingest_template/source-file-template-csv.py +++ b/ingest_template/source-file-template-csv.py @@ -1,7 +1,7 @@ from typing import List from biolink.pydanticmodel_v2 import Gene -from koza.cli_runner import koza_app +from koza.cli_utils import koza_app # You've got 'NCBI_Gene:' and you want 'NCBIGene:'? clean it up. curie_cleaner = koza_app.curie_cleaner diff --git a/ingest_template/source-file-template-json.py b/ingest_template/source-file-template-json.py index 7a16e05b..f95e170b 100644 --- a/ingest_template/source-file-template-json.py +++ b/ingest_template/source-file-template-json.py @@ -7,7 +7,7 @@ GeneToPhenotypicFeatureAssociation, PhenotypicFeature, ) -from koza.cli_runner import koza_app +from koza.cli_utils import koza_app # include logging if necessary from loguru import logger diff --git a/poetry.lock b/poetry.lock index 2a0a3446..2d6e80f2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "alabaster" @@ -72,13 +72,13 @@ tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "p [[package]] name = "babel" -version = "2.14.0" +version = "2.15.0" description = "Internationalization utilities" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, + {file = "Babel-2.15.0-py3-none-any.whl", hash = "sha256:08706bdad8d0a3413266ab61bd6c34d0c28d6e1e7badf40a2cebe67644e2e1fb"}, + {file = "babel-2.15.0.tar.gz", hash = "sha256:8daf0e265d05768bc6c7a314cf1321e9a123afc328cc635c18622a2f30a04413"}, ] [package.extras] @@ -107,60 +107,53 @@ lxml = ["lxml"] [[package]] name = "biolink-model" -version = "0.0.0" +version = "4.2.1" description = "The Biolink Model is a high-level data model designed to standardize types and relationships in biological knowledgebases." optional = false -python-versions = "^3.9" -files = [] -develop = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "biolink_model-4.2.1-py3-none-any.whl", hash = "sha256:dae399cb8a81e9360300abcb1d6bf38c29efc790e8a0732dacb7d501aee84ab0"}, + {file = "biolink_model-4.2.1.tar.gz", hash = "sha256:9defa7af163a64b98fa9dd026c3ce10523ea302ec5c2e035c4067134106915e1"}, +] [package.dependencies] beautifulsoup4 = ">=4.0.0" -curies = "^0.7.4" -prefixmaps = "^0.2.0" -pytest = "^7.3.1" -pyyaml = "^6.0.1" -stringcase = "^1.2.0" -yamllint = "^1.35.1" - -[package.extras] -docs = [] - -[package.source] -type = "git" -url = "https://github.com/biolink/biolink-model" -reference = "master" -resolved_reference = "d44c32ffef2c9141fd19d62a4a25b9ee945a5b8e" +curies = ">=0.7.4,<0.8.0" +prefixmaps = ">=0.2.3,<0.3.0" +pytest = ">=8.1.1,<9.0.0" +pyyaml = ">=6.0.1,<7.0.0" +stringcase = ">=1.2.0,<2.0.0" +yamllint = ">=1.35.1,<2.0.0" [[package]] name = "black" -version = "24.3.0" +version = "24.4.2" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7d5e026f8da0322b5662fa7a8e752b3fa2dac1c1cbc213c3d7ff9bdd0ab12395"}, - {file = "black-24.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9f50ea1132e2189d8dff0115ab75b65590a3e97de1e143795adb4ce317934995"}, - {file = "black-24.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2af80566f43c85f5797365077fb64a393861a3730bd110971ab7a0c94e873e7"}, - {file = "black-24.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:4be5bb28e090456adfc1255e03967fb67ca846a03be7aadf6249096100ee32d0"}, - {file = "black-24.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4f1373a7808a8f135b774039f61d59e4be7eb56b2513d3d2f02a8b9365b8a8a9"}, - {file = "black-24.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:aadf7a02d947936ee418777e0247ea114f78aff0d0959461057cae8a04f20597"}, - {file = "black-24.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c02e4ea2ae09d16314d30912a58ada9a5c4fdfedf9512d23326128ac08ac3d"}, - {file = "black-24.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:bf21b7b230718a5f08bd32d5e4f1db7fc8788345c8aea1d155fc17852b3410f5"}, - {file = "black-24.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:2818cf72dfd5d289e48f37ccfa08b460bf469e67fb7c4abb07edc2e9f16fb63f"}, - {file = "black-24.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4acf672def7eb1725f41f38bf6bf425c8237248bb0804faa3965c036f7672d11"}, - {file = "black-24.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7ed6668cbbfcd231fa0dc1b137d3e40c04c7f786e626b405c62bcd5db5857e4"}, - {file = "black-24.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:56f52cfbd3dabe2798d76dbdd299faa046a901041faf2cf33288bc4e6dae57b5"}, - {file = "black-24.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:79dcf34b33e38ed1b17434693763301d7ccbd1c5860674a8f871bd15139e7837"}, - {file = "black-24.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e19cb1c6365fd6dc38a6eae2dcb691d7d83935c10215aef8e6c38edee3f77abd"}, - {file = "black-24.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65b76c275e4c1c5ce6e9870911384bff5ca31ab63d19c76811cb1fb162678213"}, - {file = "black-24.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:b5991d523eee14756f3c8d5df5231550ae8993e2286b8014e2fdea7156ed0959"}, - {file = "black-24.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c45f8dff244b3c431b36e3224b6be4a127c6aca780853574c00faf99258041eb"}, - {file = "black-24.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6905238a754ceb7788a73f02b45637d820b2f5478b20fec82ea865e4f5d4d9f7"}, - {file = "black-24.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7de8d330763c66663661a1ffd432274a2f92f07feeddd89ffd085b5744f85e7"}, - {file = "black-24.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:7bb041dca0d784697af4646d3b62ba4a6b028276ae878e53f6b4f74ddd6db99f"}, - {file = "black-24.3.0-py3-none-any.whl", hash = "sha256:41622020d7120e01d377f74249e677039d20e6344ff5851de8a10f11f513bf93"}, - {file = "black-24.3.0.tar.gz", hash = "sha256:a0c9c4a0771afc6919578cec71ce82a3e31e054904e7197deacbc9382671c41f"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] @@ -180,33 +173,33 @@ uvloop = ["uvloop (>=0.15.2)"] [[package]] name = "bmt" -version = "1.1.3" +version = "1.4.1" description = "Biolink Model Toolkit: A Python API for working with the Biolink Model" optional = false -python-versions = ">=3.9,<4.0" +python-versions = "<4.0,>=3.9" files = [ - {file = "bmt-1.1.3-py3-none-any.whl", hash = "sha256:7818da7f8debc807e80bbe181af70edb525ac3c7115bee86021607dcbaa0c372"}, - {file = "bmt-1.1.3.tar.gz", hash = "sha256:605ebffaec269dbf335b2a3ac0da575cc5299e98cfecfac0d6eff514a317983b"}, + {file = "bmt-1.4.1-py3-none-any.whl", hash = "sha256:94016f64cdca85a65a83c45667313ffc83da9af31a3dab7b14e868c4cb6ab0bb"}, + {file = "bmt-1.4.1.tar.gz", hash = "sha256:deb6dd64c6a57a77e727af6629b880116858d7303ec88e90723a488fac775735"}, ] [package.dependencies] deprecation = ">=2.1.0,<3.0.0" -linkml-runtime = ">=1.5.0,<2.0.0" +linkml-runtime = ">=1.6.3,<2.0.0" stringcase = ">=1.2.0,<2.0.0" [[package]] name = "boto3" -version = "1.34.71" +version = "1.34.106" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.34.71-py3-none-any.whl", hash = "sha256:7ce8c9a50af2f8a159a0dd86b40011d8dfdaba35005a118e51cd3ac72dc630f1"}, - {file = "boto3-1.34.71.tar.gz", hash = "sha256:d786e7fbe3c4152866199786468a625dc77b9f27294cd7ad4f63cd2e0c927287"}, + {file = "boto3-1.34.106-py3-none-any.whl", hash = "sha256:d3be4e1dd5d546a001cd4da805816934cbde9d395316546e9411fec341ade5cf"}, + {file = "boto3-1.34.106.tar.gz", hash = "sha256:6165b8cf1c7e625628ab28b32f9027064c8f5e5fca1c38d7fc228cd22069a19f"}, ] [package.dependencies] -botocore = ">=1.34.71,<1.35.0" +botocore = ">=1.34.106,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -215,13 +208,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.71" +version = "1.34.106" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.71-py3-none-any.whl", hash = "sha256:3bc9e23aee73fe6f097823d61f79a8877790436038101a83fa96c7593e8109f8"}, - {file = "botocore-1.34.71.tar.gz", hash = "sha256:c58f9ed71af2ea53d24146187130541222d7de8c27eb87d23f15457e7b83d88b"}, + {file = "botocore-1.34.106-py3-none-any.whl", hash = "sha256:4baf0e27c2dfc4f4d0dee7c217c716e0782f9b30e8e1fff983fce237d88f73ae"}, + {file = "botocore-1.34.106.tar.gz", hash = "sha256:921fa5202f88c3e58fdcb4b3acffd56d65b24bca47092ee4b27aa988556c0be6"}, ] [package.dependencies] @@ -230,7 +223,7 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""} [package.extras] -crt = ["awscrt (==0.19.19)"] +crt = ["awscrt (==0.20.9)"] [[package]] name = "cachetools" @@ -464,13 +457,13 @@ test = ["codacy-coverage", "coveralls", "dict_hash", "pytest", "pytest-cov", "ra [[package]] name = "curies" -version = "0.7.8" +version = "0.7.9" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." optional = false python-versions = ">=3.8" files = [ - {file = "curies-0.7.8-py3-none-any.whl", hash = "sha256:a60b2559f08557176b0a3df1f7c47ec7cd8ae4e0695f23fc6574825d2ccd17eb"}, - {file = "curies-0.7.8.tar.gz", hash = "sha256:d208ad40b5e40b532285c917f116001f9e887a48dda54e6eedd10e514ea6aa1a"}, + {file = "curies-0.7.9-py3-none-any.whl", hash = "sha256:e4c5beb91642376953c94db0ee2fb5d2b011c3b16749516436114ba61442f260"}, + {file = "curies-0.7.9.tar.gz", hash = "sha256:3b63c5fea7b0e967629a3a384b1a8c59b56c503487c1dcbacddeab59e25db4d8"}, ] [package.dependencies] @@ -619,16 +612,6 @@ files = [ {file = "duckdb-0.9.2.tar.gz", hash = "sha256:3843afeab7c3fc4a4c0b53686a4cc1d9cdbdadcbb468d60fef910355ecafd447"}, ] -[[package]] -name = "editorconfig" -version = "0.12.4" -description = "EditorConfig File Locator and Interpreter for Python" -optional = false -python-versions = "*" -files = [ - {file = "EditorConfig-0.12.4.tar.gz", hash = "sha256:24857fa1793917dd9ccf0c7810a07e05404ce9b823521c7dce22a4fb5d125f80"}, -] - [[package]] name = "elastic-transport" version = "8.13.0" @@ -649,13 +632,13 @@ develop = ["aiohttp", "furo", "httpx", "mock", "opentelemetry-api", "opentelemet [[package]] name = "elasticsearch" -version = "8.13.0" +version = "8.13.1" description = "Python client for Elasticsearch" optional = false python-versions = ">=3.7" files = [ - {file = "elasticsearch-8.13.0-py3-none-any.whl", hash = "sha256:4aaf49253e974eb500f01136a487bdd0f09d3cafd37a0456eff6acfff0c9199b"}, - {file = "elasticsearch-8.13.0.tar.gz", hash = "sha256:e4ebebb22d09f0ef839c26b6aa98e19ccd636bcb77f08c12b562b02cacd5e744"}, + {file = "elasticsearch-8.13.1-py3-none-any.whl", hash = "sha256:ba2b3f8b30a7a81beae690f1cede52fbcfd29baf3ef5bb028d4fa86972feebd8"}, + {file = "elasticsearch-8.13.1.tar.gz", hash = "sha256:1594d2d1293672db62525bc4688d86cdaf118db0f901808db28dc90ad19b81e1"}, ] [package.dependencies] @@ -665,6 +648,7 @@ elastic-transport = ">=8.13,<9" async = ["aiohttp (>=3,<4)"] orjson = ["orjson (>=3)"] requests = ["requests (>=2.4.0,<3.0.0)"] +vectorstore-mmr = ["numpy (>=1)", "simsimd (>=3)"] [[package]] name = "et-xmlfile" @@ -679,13 +663,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -693,13 +677,13 @@ test = ["pytest (>=6)"] [[package]] name = "filelock" -version = "3.13.3" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.3-py3-none-any.whl", hash = "sha256:5ffa845303983e7a0b7ae17636509bc97997d58afeafa72fb141a17b152284cb"}, - {file = "filelock-3.13.3.tar.gz", hash = "sha256:a79895a25bbefdf55d1a2a0a80968f7dbb28edcd6d4234a0afb3f37ecde4b546"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] @@ -720,13 +704,13 @@ files = [ [[package]] name = "gdown" -version = "5.1.0" +version = "5.2.0" description = "Google Drive Public File/Folder Downloader" optional = false python-versions = ">=3.8" files = [ - {file = "gdown-5.1.0-py3-none-any.whl", hash = "sha256:421530fd238fa15d41ba43219a79fdc28efe8ac11022173abad333701b77de2c"}, - {file = "gdown-5.1.0.tar.gz", hash = "sha256:550a72dc5ca2819fe4bcc15d80d05d7c98c0b90e57256254b77d0256b9df4683"}, + {file = "gdown-5.2.0-py3-none-any.whl", hash = "sha256:33083832d82b1101bdd0e9df3edd0fbc0e1c5f14c9d8c38d2a35bf1683b526d6"}, + {file = "gdown-5.2.0.tar.gz", hash = "sha256:2145165062d85520a3cd98b356c9ed522c5e7984d408535409fd46f94defc787"}, ] [package.dependencies] @@ -736,7 +720,7 @@ requests = {version = "*", extras = ["socks"]} tqdm = "*" [package.extras] -test = ["build", "mypy", "pytest", "pytest-xdist", "ruff", "twine", "types-requests"] +test = ["build", "mypy", "pytest", "pytest-xdist", "ruff", "twine", "types-requests", "types-setuptools"] [[package]] name = "ghp-import" @@ -757,13 +741,13 @@ dev = ["flake8", "markdown", "twine", "wheel"] [[package]] name = "google-api-core" -version = "2.18.0" +version = "2.19.0" description = "Google API client core library" optional = false python-versions = ">=3.7" files = [ - {file = "google-api-core-2.18.0.tar.gz", hash = "sha256:62d97417bfc674d6cef251e5c4d639a9655e00c45528c4364fbfebb478ce72a9"}, - {file = "google_api_core-2.18.0-py3-none-any.whl", hash = "sha256:5a63aa102e0049abe85b5b88cb9409234c1f70afcda21ce1e40b285b9629c1d6"}, + {file = "google-api-core-2.19.0.tar.gz", hash = "sha256:cf1b7c2694047886d2af1128a03ae99e391108a08804f87cfd35970e49c9cd10"}, + {file = "google_api_core-2.19.0-py3-none-any.whl", hash = "sha256:8661eec4078c35428fd3f69a2c7ee29e342896b70f01d1a1cbcb334372dd6251"}, ] [package.dependencies] @@ -1045,13 +1029,13 @@ test = ["objgraph", "psutil"] [[package]] name = "griffe" -version = "0.42.1" +version = "0.45.0" description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." optional = false python-versions = ">=3.8" files = [ - {file = "griffe-0.42.1-py3-none-any.whl", hash = "sha256:7e805e35617601355edcac0d3511cedc1ed0cb1f7645e2d336ae4b05bbae7b3b"}, - {file = "griffe-0.42.1.tar.gz", hash = "sha256:57046131384043ed078692b85d86b76568a686266cc036b9b56b704466f803ce"}, + {file = "griffe-0.45.0-py3-none-any.whl", hash = "sha256:90fe5c90e1b0ca7dd6fee78f9009f4e01b37dbc9ab484a9b2c1578915db1e571"}, + {file = "griffe-0.45.0.tar.gz", hash = "sha256:85cb2868d026ea51c89bdd589ad3ccc94abc5bd8d5d948e3d4450778a2a05b4a"}, ] [package.dependencies] @@ -1070,13 +1054,13 @@ files = [ [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -1108,6 +1092,17 @@ files = [ {file = "ijson-3.2.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4a3a6a2fbbe7550ffe52d151cf76065e6b89cfb3e9d0463e49a7e322a25d0426"}, {file = "ijson-3.2.3-cp311-cp311-win32.whl", hash = "sha256:6a4db2f7fb9acfb855c9ae1aae602e4648dd1f88804a0d5cfb78c3639bcf156c"}, {file = "ijson-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:ccd6be56335cbb845f3d3021b1766299c056c70c4c9165fb2fbe2d62258bae3f"}, + {file = "ijson-3.2.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:055b71bbc37af5c3c5861afe789e15211d2d3d06ac51ee5a647adf4def19c0ea"}, + {file = "ijson-3.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c075a547de32f265a5dd139ab2035900fef6653951628862e5cdce0d101af557"}, + {file = "ijson-3.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:457f8a5fc559478ac6b06b6d37ebacb4811f8c5156e997f0d87d708b0d8ab2ae"}, + {file = "ijson-3.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9788f0c915351f41f0e69ec2618b81ebfcf9f13d9d67c6d404c7f5afda3e4afb"}, + {file = "ijson-3.2.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa234ab7a6a33ed51494d9d2197fb96296f9217ecae57f5551a55589091e7853"}, + {file = "ijson-3.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd0dc5da4f9dc6d12ab6e8e0c57d8b41d3c8f9ceed31a99dae7b2baf9ea769a"}, + {file = "ijson-3.2.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c6beb80df19713e39e68dc5c337b5c76d36ccf69c30b79034634e5e4c14d6904"}, + {file = "ijson-3.2.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:a2973ce57afb142d96f35a14e9cfec08308ef178a2c76b8b5e1e98f3960438bf"}, + {file = "ijson-3.2.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:105c314fd624e81ed20f925271ec506523b8dd236589ab6c0208b8707d652a0e"}, + {file = "ijson-3.2.3-cp312-cp312-win32.whl", hash = "sha256:ac44781de5e901ce8339352bb5594fcb3b94ced315a34dbe840b4cff3450e23b"}, + {file = "ijson-3.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:0567e8c833825b119e74e10a7c29761dc65fcd155f5d4cb10f9d3b8916ef9912"}, {file = "ijson-3.2.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:eeb286639649fb6bed37997a5e30eefcacddac79476d24128348ec890b2a0ccb"}, {file = "ijson-3.2.3-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:396338a655fb9af4ac59dd09c189885b51fa0eefc84d35408662031023c110d1"}, {file = "ijson-3.2.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e0243d166d11a2a47c17c7e885debf3b19ed136be2af1f5d1c34212850236ac"}, @@ -1263,13 +1258,13 @@ arrow = ">=0.15.0" [[package]] name = "jinja2" -version = "3.1.3" +version = "3.1.4" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, - {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, + {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, + {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, ] [package.dependencies] @@ -1289,20 +1284,6 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] -[[package]] -name = "jsbeautifier" -version = "1.15.1" -description = "JavaScript unobfuscator and beautifier." -optional = false -python-versions = "*" -files = [ - {file = "jsbeautifier-1.15.1.tar.gz", hash = "sha256:ebd733b560704c602d744eafc839db60a1ee9326e30a2a80c4adb8718adc1b24"}, -] - -[package.dependencies] -editorconfig = ">=0.12.2" -six = ">=1.13.0" - [[package]] name = "json-flattener" version = "0.1.9" @@ -1398,13 +1379,13 @@ files = [ [[package]] name = "jsonschema" -version = "4.21.1" +version = "4.22.0" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, + {file = "jsonschema-4.22.0-py3-none-any.whl", hash = "sha256:ff4cfd6b1367a40e7bc6411caec72effadd3db0bbe5017de188f2d6108335802"}, + {file = "jsonschema-4.22.0.tar.gz", hash = "sha256:5b22d434a45935119af990552c862e5d6d564e8f6601206b305a61fdf661a2b7"}, ] [package.dependencies] @@ -1459,13 +1440,13 @@ test = ["tox"] [[package]] name = "kghub-downloader" -version = "0.3.7" +version = "0.3.8" description = "Downloads and caches files for knowledge graph ETL" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "kghub_downloader-0.3.7-py3-none-any.whl", hash = "sha256:c06320e79812a48e9ee88a0fba738d974fb628ee9999eaf0554245caeec85e09"}, - {file = "kghub_downloader-0.3.7.tar.gz", hash = "sha256:36125e06bd96ebbffc3109c92c23568da55ecd9ec93f440c62ff1ed9739cd046"}, + {file = "kghub_downloader-0.3.8-py3-none-any.whl", hash = "sha256:d8a2b6f9502d84caf700e8736f06cb82f0dfd0e06ab7ee1ee63f9e37acf90ed6"}, + {file = "kghub_downloader-0.3.8.tar.gz", hash = "sha256:a77dd62b1a00ca0d5d6ea81dbe983c4293bb71e6a9c73c6174cb309a771fc9ce"}, ] [package.dependencies] @@ -1474,92 +1455,89 @@ compress-json = ">1.0,<2.0" elasticsearch = ">7.0,<9.0" gdown = ">=4.7.1" google-cloud-storage = ">=2.1.0,<3.0.0" -mkdocs = ">=1.4.0,<2.0.0" -mkdocs-material = ">=8.5.6,<9.0.0" +mkdocs = ">=1.4" +mkdocs-material = ">=9.5" mkdocstrings = {version = ">=0.20.0,<0.21.0", extras = ["python"]} PyYAML = ">5.0,<7.0" tqdm = ">=4.62.3" -typer = ">=0.7.0,<0.8.0" +typer = ">=0.12.3,<0.13.0" [[package]] name = "kgx" -version = "0.0.0" +version = "2.4.0" description = "A Python library and set of command line utilities for exchanging Knowledge Graphs (KGs) that conform to or are aligned to the Biolink Model." optional = false -python-versions = "^3.9" -files = [] -develop = false +python-versions = "<4.0,>=3.9" +files = [ + {file = "kgx-2.4.0-py3-none-any.whl", hash = "sha256:51f612cb25aa47ce9a702db3902bb689f5346e27af602ba556033ded99f4e543"}, + {file = "kgx-2.4.0.tar.gz", hash = "sha256:6b15d59d4a3057fed39b3450e5ea02611099688fc9e355682c498ea97c5413e2"}, +] [package.dependencies] -bmt = "^1.1.0" -cachetools = "^5.0.0" +bmt = ">=1.4.0,<2.0.0" +cachetools = ">=5.0.0,<6.0.0" Click = "*" -deprecation = "^2.1.0" -docker = "^6.0.0" -docutils = "^0.18.1" -ijson = "^3.1.3" -inflection = "^0.5.1" -jsonlines = "^4.0.0" -jsonstreams = "^0.6.0" -linkml = "^1.5.0" -linkml-runtime = "^1.5.0" +deprecation = ">=2.1.0,<3.0.0" +docker = ">=6.0.0,<7.0.0" +docutils = ">=0.18.1,<0.19.0" +ijson = ">=3.1.3,<4.0.0" +inflection = ">=0.5.1,<0.6.0" +jsonlines = ">=4.0.0,<5.0.0" +jsonstreams = ">=0.6.0,<0.7.0" +linkml = ">=1.7.7,<2.0.0" +linkml-runtime = ">=1.7.5,<2.0.0" mypy = "*" -neo4j = "^4.4.10" +neo4j = ">=4.4.10,<5.0.0" networkx = "*" -ordered-set = "^4.0.2" +ordered-set = ">=4.0.2,<5.0.0" pandas = ">1.0.3" -prefixcommons = "^0.1.4" -prologterms = "^0.0.6" +prefixcommons = ">=0.1.4,<0.2.0" +prologterms = ">=0.0.6,<0.0.7" +pyarrow = ">=15.0.2,<16.0.0" pytest = "*" -python-dateutil = "^2.8.1" +python-dateutil = ">=2.8.1,<3.0.0" pyyaml = "*" rdflib = ">=6.0.0" recommonmark = "*" shexjsg = "*" SPARQLWrapper = ">=1.8.2" Sphinx = "*" -stringcase = "^1.2.0" -terminaltables = "^3.1.0" -tox = "^4.13.0" -validators = "^0.20.0" - -[package.source] -type = "git" -url = "https://github.com/biolink/kgx" -reference = "master" -resolved_reference = "8e5981697b4549b0be36ff37bf8b9f0eea06a7fc" +stringcase = ">=1.2.0,<2.0.0" +terminaltables = ">=3.1.0,<4.0.0" +tox = ">=4.13.0,<5.0.0" +validators = ">=0.20.0,<0.21.0" [[package]] name = "koza" -version = "0.5.3" +version = "0.6.0" description = "Data transformation framework for LinkML data models" optional = false -python-versions = ">=3.9,<4.0" +python-versions = "<4.0,>=3.9" files = [ - {file = "koza-0.5.3-py3-none-any.whl", hash = "sha256:e55f209c64f2c0c3c60212afd29507cc8701ee37ff11ecb0eb11318f6087eaa8"}, - {file = "koza-0.5.3.tar.gz", hash = "sha256:c04c64a9aa67f8b34f4cd45fdc28109b9db407653b6af5b07d9b15b5962a8867"}, + {file = "koza-0.6.0-py3-none-any.whl", hash = "sha256:21be1eb8d8d6dd24901fe913bd3430aac472a3bc1460d84bf4e1936133a5f8a1"}, + {file = "koza-0.6.0.tar.gz", hash = "sha256:6fbc2e693c9956df0c3fb8b8b4304baeec6bc9eb4377e85f7ec5e15228e47376"}, ] [package.dependencies] -linkml = ">=1.6.3" +duckdb = "*" +linkml = ">=1.7.8" loguru = "*" ordered-set = ">=4.1.0" pydantic = ">=2.4,<3.0" pyyaml = ">=5.0.0" requests = ">=2.24.0,<3.0.0" sssom = ">=0.4" -typer = ">=0.7.0,<0.8.0" -typer-cli = ">=0.0.13,<0.0.14" +typer = ">=0.12.3" [[package]] name = "linkml" -version = "1.6.3" +version = "1.7.10" description = "Linked Open Data Modeling Language" optional = false -python-versions = ">=3.8.1,<4.0.0" +python-versions = "<4.0.0,>=3.8.1" files = [ - {file = "linkml-1.6.3-py3-none-any.whl", hash = "sha256:2bcfa9e35b3e0d868f396fa48ede1b9e3c6016df956dd5ca92d70ff621ffc77e"}, - {file = "linkml-1.6.3.tar.gz", hash = "sha256:2692243c9fb1c262ea83b725c70d6f537844ae7a9405101c94bccf65def6d952"}, + {file = "linkml-1.7.10-py3-none-any.whl", hash = "sha256:bf21cce814e9d1509489f1e6e15a7e86e4f11d949490d9a7a5c3f6b5b412ec62"}, + {file = "linkml-1.7.10.tar.gz", hash = "sha256:1c38601c3cd495e34490b8cf7277fd3674ec68dcbe9f5efcec2658093801ce91"}, ] [package.dependencies] @@ -1572,11 +1550,11 @@ jinja2 = ">=3.1.0" jsonasobj2 = ">=1.0.3,<2.0.0" jsonschema = {version = ">=4.0.0", extras = ["format"]} linkml-dataops = "*" -linkml-runtime = ">=1.6.0" +linkml-runtime = ">=1.7.4" openpyxl = "*" parse = "*" prefixcommons = ">=0.1.7" -prefixmaps = ">=0.1.3" +prefixmaps = ">=0.2.2" pydantic = ">=1.0.0,<3.0.0" pyjsg = ">=0.11.6" pyshex = ">=0.7.20" @@ -1588,6 +1566,11 @@ requests = ">=2.22" sqlalchemy = ">=1.4.31" watchdog = ">=0.9.0" +[package.extras] +black = ["black (>=24.0.0)"] +shacl = ["pyshacl (>=0.25.0,<0.26.0)"] +tests = ["black (>=24.0.0)", "pyshacl (>=0.25.0,<0.26.0)"] + [[package]] name = "linkml-dataops" version = "0.1.0" @@ -1608,13 +1591,13 @@ linkml-runtime = ">=1.1.6" [[package]] name = "linkml-runtime" -version = "1.6.3" +version = "1.7.5" description = "Runtime environment for LinkML, the Linked open data modeling language" optional = false -python-versions = ">=3.7.6,<4.0.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "linkml_runtime-1.6.3-py3-none-any.whl", hash = "sha256:08f616302ce493be775104c87bd5a2ec0eb2c67624e611a3f7e28c978d08a4d1"}, - {file = "linkml_runtime-1.6.3.tar.gz", hash = "sha256:88e3d0b776055723d187128c03527145dc1ffdc2d2a69e89f8aabce203d418a3"}, + {file = "linkml_runtime-1.7.5-py3-none-any.whl", hash = "sha256:c58000c7c68fa97b7d76c50421a85a64e25f07eec5bcac464bc00c4cd79007a6"}, + {file = "linkml_runtime-1.7.5.tar.gz", hash = "sha256:b31197a5398359441ae1ed43470c54377a1d08db961366dda670300dddcd71d7"}, ] [package.dependencies] @@ -1683,6 +1666,30 @@ files = [ docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] +[[package]] +name = "markdown-it-py" +version = "3.0.0" +description = "Python port of markdown-it. Markdown parsing, done right!" +optional = false +python-versions = ">=3.8" +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] +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"] +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.5" @@ -1752,6 +1759,17 @@ files = [ {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] +[[package]] +name = "mdurl" +version = "0.1.2" +description = "Markdown URL utilities" +optional = false +python-versions = ">=3.7" +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 = "mergedeep" version = "1.3.4" @@ -1765,13 +1783,13 @@ files = [ [[package]] name = "mkdocs" -version = "1.5.3" +version = "1.6.0" description = "Project documentation with Markdown." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs-1.5.3-py3-none-any.whl", hash = "sha256:3b3a78e736b31158d64dbb2f8ba29bd46a379d0c6e324c2246c3bc3d2189cfc1"}, - {file = "mkdocs-1.5.3.tar.gz", hash = "sha256:eb7c99214dcb945313ba30426c2451b735992c73c2e10838f76d09e39ff4d0e2"}, + {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, + {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, ] [package.dependencies] @@ -1779,19 +1797,19 @@ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" jinja2 = ">=2.11.1" -markdown = ">=3.2.1" +markdown = ">=3.3.6" markupsafe = ">=2.0.1" mergedeep = ">=1.3.4" +mkdocs-get-deps = ">=0.2.0" packaging = ">=20.5" pathspec = ">=0.11.1" -platformdirs = ">=2.2.0" pyyaml = ">=5.1" pyyaml-env-tag = ">=0.1" watchdog = ">=2.0" [package.extras] i18n = ["babel (>=2.9.0)"] -min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.3)", "jinja2 (==2.11.1)", "markdown (==3.2.1)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "packaging (==20.5)", "pathspec (==0.11.1)", "platformdirs (==2.2.0)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "typing-extensions (==3.10)", "watchdog (==2.0)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] [[package]] name = "mkdocs-autorefs" @@ -1809,25 +1827,50 @@ Markdown = ">=3.3" markupsafe = ">=2.0.1" mkdocs = ">=1.1" +[[package]] +name = "mkdocs-get-deps" +version = "0.2.0" +description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_get_deps-0.2.0-py3-none-any.whl", hash = "sha256:2bf11d0b133e77a0dd036abeeb06dec8775e46efa526dc70667d8863eefc6134"}, + {file = "mkdocs_get_deps-0.2.0.tar.gz", hash = "sha256:162b3d129c7fad9b19abfdcb9c1458a651628e4b1dea628ac68790fb3061c60c"}, +] + +[package.dependencies] +mergedeep = ">=1.3.4" +platformdirs = ">=2.2.0" +pyyaml = ">=5.1" + [[package]] name = "mkdocs-material" -version = "8.5.11" +version = "9.5.23" description = "Documentation that simply works" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "mkdocs_material-8.5.11-py3-none-any.whl", hash = "sha256:c907b4b052240a5778074a30a78f31a1f8ff82d7012356dc26898b97559f082e"}, - {file = "mkdocs_material-8.5.11.tar.gz", hash = "sha256:b0ea0513fd8cab323e8a825d6692ea07fa83e917bb5db042e523afecc7064ab7"}, + {file = "mkdocs_material-9.5.23-py3-none-any.whl", hash = "sha256:ffd08a5beaef3cd135aceb58ded8b98bbbbf2b70e5b656f6a14a63c917d9b001"}, + {file = "mkdocs_material-9.5.23.tar.gz", hash = "sha256:4627fc3f15de2cba2bde9debc2fd59b9888ef494beabfe67eb352e23d14bf288"}, ] [package.dependencies] -jinja2 = ">=3.0.2" -markdown = ">=3.2" -mkdocs = ">=1.4.0" -mkdocs-material-extensions = ">=1.1" -pygments = ">=2.12" -pymdown-extensions = ">=9.4" -requests = ">=2.26" +babel = ">=2.10,<3.0" +colorama = ">=0.4,<1.0" +jinja2 = ">=3.0,<4.0" +markdown = ">=3.2,<4.0" +mkdocs = ">=1.6,<2.0" +mkdocs-material-extensions = ">=1.3,<2.0" +paginate = ">=0.5,<1.0" +pygments = ">=2.16,<3.0" +pymdown-extensions = ">=10.2,<11.0" +regex = ">=2022.4" +requests = ">=2.26,<3.0" + +[package.extras] +git = ["mkdocs-git-committers-plugin-2 (>=1.1,<2.0)", "mkdocs-git-revision-date-localized-plugin (>=1.2.4,<2.0)"] +imaging = ["cairosvg (>=2.6,<3.0)", "pillow (>=10.2,<11.0)"] +recommended = ["mkdocs-minify-plugin (>=0.7,<1.0)", "mkdocs-redirects (>=1.2,<2.0)", "mkdocs-rss-plugin (>=1.6,<2.0)"] [[package]] name = "mkdocs-material-extensions" @@ -1840,27 +1883,6 @@ files = [ {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] -[[package]] -name = "mkdocs-mermaid2-plugin" -version = "0.6.0" -description = "A MkDocs plugin for including mermaid graphs in markdown sources" -optional = false -python-versions = ">=3.5" -files = [ - {file = "mkdocs-mermaid2-plugin-0.6.0.tar.gz", hash = "sha256:99cca6db7c6b4a954a701dcb6b507191bc32a7b0b47eacf2885c1bacf77d1af1"}, - {file = "mkdocs_mermaid2_plugin-0.6.0-py3-none-any.whl", hash = "sha256:ffbe8a7daa7ed718cb800c44c5ce4c0ff413caebf7b8b63d9c4a998dfd78a64d"}, -] - -[package.dependencies] -beautifulsoup4 = ">=4.6.3" -jsbeautifier = "*" -mkdocs = ">=1.0.4" -mkdocs-material = "*" -pymdown-extensions = ">=8.0" -pyyaml = "*" -requests = "*" -setuptools = ">=18.5" - [[package]] name = "mkdocstrings" version = "0.20.0" @@ -1921,38 +1943,38 @@ test = ["codacy-coverage", "coveralls", "parameterized", "pytest", "pytest-cov", [[package]] name = "mypy" -version = "1.9.0" +version = "1.10.0" description = "Optional static typing for Python" optional = false python-versions = ">=3.8" files = [ - {file = "mypy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f8a67616990062232ee4c3952f41c779afac41405806042a8126fe96e098419f"}, - {file = "mypy-1.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d357423fa57a489e8c47b7c85dfb96698caba13d66e086b412298a1a0ea3b0ed"}, - {file = "mypy-1.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49c87c15aed320de9b438ae7b00c1ac91cd393c1b854c2ce538e2a72d55df150"}, - {file = "mypy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:48533cdd345c3c2e5ef48ba3b0d3880b257b423e7995dada04248725c6f77374"}, - {file = "mypy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:4d3dbd346cfec7cb98e6cbb6e0f3c23618af826316188d587d1c1bc34f0ede03"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:653265f9a2784db65bfca694d1edd23093ce49740b2244cde583aeb134c008f3"}, - {file = "mypy-1.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a3c007ff3ee90f69cf0a15cbcdf0995749569b86b6d2f327af01fd1b8aee9dc"}, - {file = "mypy-1.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2418488264eb41f69cc64a69a745fad4a8f86649af4b1041a4c64ee61fc61129"}, - {file = "mypy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:68edad3dc7d70f2f17ae4c6c1b9471a56138ca22722487eebacfd1eb5321d612"}, - {file = "mypy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:85ca5fcc24f0b4aeedc1d02f93707bccc04733f21d41c88334c5482219b1ccb3"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aceb1db093b04db5cd390821464504111b8ec3e351eb85afd1433490163d60cd"}, - {file = "mypy-1.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0235391f1c6f6ce487b23b9dbd1327b4ec33bb93934aa986efe8a9563d9349e6"}, - {file = "mypy-1.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4d5ddc13421ba3e2e082a6c2d74c2ddb3979c39b582dacd53dd5d9431237185"}, - {file = "mypy-1.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:190da1ee69b427d7efa8aa0d5e5ccd67a4fb04038c380237a0d96829cb157913"}, - {file = "mypy-1.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:fe28657de3bfec596bbeef01cb219833ad9d38dd5393fc649f4b366840baefe6"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e54396d70be04b34f31d2edf3362c1edd023246c82f1730bbf8768c28db5361b"}, - {file = "mypy-1.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5e6061f44f2313b94f920e91b204ec600982961e07a17e0f6cd83371cb23f5c2"}, - {file = "mypy-1.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81a10926e5473c5fc3da8abb04119a1f5811a236dc3a38d92015cb1e6ba4cb9e"}, - {file = "mypy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b685154e22e4e9199fc95f298661deea28aaede5ae16ccc8cbb1045e716b3e04"}, - {file = "mypy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:5d741d3fc7c4da608764073089e5f58ef6352bedc223ff58f2f038c2c4698a89"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587ce887f75dd9700252a3abbc9c97bbe165a4a630597845c61279cf32dfbf02"}, - {file = "mypy-1.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f88566144752999351725ac623471661c9d1cd8caa0134ff98cceeea181789f4"}, - {file = "mypy-1.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:61758fabd58ce4b0720ae1e2fea5cfd4431591d6d590b197775329264f86311d"}, - {file = "mypy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e49499be624dead83927e70c756970a0bc8240e9f769389cdf5714b0784ca6bf"}, - {file = "mypy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:571741dc4194b4f82d344b15e8837e8c5fcc462d66d076748142327626a1b6e9"}, - {file = "mypy-1.9.0-py3-none-any.whl", hash = "sha256:a260627a570559181a9ea5de61ac6297aa5af202f06fd7ab093ce74e7181e43e"}, - {file = "mypy-1.9.0.tar.gz", hash = "sha256:3cc5da0127e6a478cddd906068496a97a7618a21ce9b54bde5bf7e539c7af974"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:da1cbf08fb3b851ab3b9523a884c232774008267b1f83371ace57f412fe308c2"}, + {file = "mypy-1.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:12b6bfc1b1a66095ab413160a6e520e1dc076a28f3e22f7fb25ba3b000b4ef99"}, + {file = "mypy-1.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e36fb078cce9904c7989b9693e41cb9711e0600139ce3970c6ef814b6ebc2b2"}, + {file = "mypy-1.10.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2b0695d605ddcd3eb2f736cd8b4e388288c21e7de85001e9f85df9187f2b50f9"}, + {file = "mypy-1.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:cd777b780312ddb135bceb9bc8722a73ec95e042f911cc279e2ec3c667076051"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3be66771aa5c97602f382230165b856c231d1277c511c9a8dd058be4784472e1"}, + {file = "mypy-1.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8b2cbaca148d0754a54d44121b5825ae71868c7592a53b7292eeb0f3fdae95ee"}, + {file = "mypy-1.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ec404a7cbe9fc0e92cb0e67f55ce0c025014e26d33e54d9e506a0f2d07fe5de"}, + {file = "mypy-1.10.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e22e1527dc3d4aa94311d246b59e47f6455b8729f4968765ac1eacf9a4760bc7"}, + {file = "mypy-1.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:a87dbfa85971e8d59c9cc1fcf534efe664d8949e4c0b6b44e8ca548e746a8d53"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a781f6ad4bab20eef8b65174a57e5203f4be627b46291f4589879bf4e257b97b"}, + {file = "mypy-1.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b808e12113505b97d9023b0b5e0c0705a90571c6feefc6f215c1df9381256e30"}, + {file = "mypy-1.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f55583b12156c399dce2df7d16f8a5095291354f1e839c252ec6c0611e86e2e"}, + {file = "mypy-1.10.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4cf18f9d0efa1b16478c4c129eabec36148032575391095f73cae2e722fcf9d5"}, + {file = "mypy-1.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:bc6ac273b23c6b82da3bb25f4136c4fd42665f17f2cd850771cb600bdd2ebeda"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9fd50226364cd2737351c79807775136b0abe084433b55b2e29181a4c3c878c0"}, + {file = "mypy-1.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f90cff89eea89273727d8783fef5d4a934be2fdca11b47def50cf5d311aff727"}, + {file = "mypy-1.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fcfc70599efde5c67862a07a1aaf50e55bce629ace26bb19dc17cece5dd31ca4"}, + {file = "mypy-1.10.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:075cbf81f3e134eadaf247de187bd604748171d6b79736fa9b6c9685b4083061"}, + {file = "mypy-1.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:3f298531bca95ff615b6e9f2fc0333aae27fa48052903a0ac90215021cdcfa4f"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fa7ef5244615a2523b56c034becde4e9e3f9b034854c93639adb667ec9ec2976"}, + {file = "mypy-1.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3236a4c8f535a0631f85f5fcdffba71c7feeef76a6002fcba7c1a8e57c8be1ec"}, + {file = "mypy-1.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2b5cdbb5dd35aa08ea9114436e0d79aceb2f38e32c21684dcf8e24e1e92821"}, + {file = "mypy-1.10.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:92f93b21c0fe73dc00abf91022234c79d793318b8a96faac147cd579c1671746"}, + {file = "mypy-1.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:28d0e038361b45f099cc086d9dd99c15ff14d0188f44ac883010e172ce86c38a"}, + {file = "mypy-1.10.0-py3-none-any.whl", hash = "sha256:f8c083976eb530019175aabadb60921e73b4f45736760826aa1689dda8208aee"}, + {file = "mypy-1.10.0.tar.gz", hash = "sha256:3d087fcbec056c4ee34974da493a826ce316947485cef3901f511848e687c131"}, ] [package.dependencies] @@ -1979,12 +2001,12 @@ files = [ [[package]] name = "neo4j" -version = "4.4.11" +version = "4.4.12" description = "Neo4j Bolt driver for Python" optional = false python-versions = ">=3.6" files = [ - {file = "neo4j-4.4.11.tar.gz", hash = "sha256:2fb4693d524e7661ed6b0ea5b4e3a6272dba2567809ecd1d63f1c896ebcfc241"}, + {file = "neo4j-4.4.12.tar.gz", hash = "sha256:b138271400e1ef2b89738e90ae0beb96b005f7dfedd68b17c4b85ee732d54125"}, ] [package.dependencies] @@ -1992,20 +2014,20 @@ pytz = "*" [[package]] name = "networkx" -version = "3.2.1" +version = "3.3" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, - {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, + {file = "networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2"}, + {file = "networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9"}, ] [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)"] +default = ["matplotlib (>=3.6)", "numpy (>=1.23)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["myst-nb (>=1.0)", "numpydoc (>=1.7)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=2.0)", "pygraphviz (>=1.12)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] @@ -2092,6 +2114,16 @@ files = [ {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, ] +[[package]] +name = "paginate" +version = "0.5.6" +description = "Divides large result sets into pages for easier browsing" +optional = false +python-versions = "*" +files = [ + {file = "paginate-0.5.6.tar.gz", hash = "sha256:5e6007b6a9398177a7e1648d04fdd9f8c9766a1a945bceac82f1929e8c78af2d"}, +] + [[package]] name = "pandas" version = "2.0.3" @@ -2198,28 +2230,29 @@ files = [ [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -2256,13 +2289,13 @@ requests = ">=2.28.1,<3.0.0" [[package]] name = "prefixmaps" -version = "0.2.2" +version = "0.2.4" description = "A python library for retrieving semantic prefix maps" optional = false -python-versions = ">=3.8,<4.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "prefixmaps-0.2.2-py3-none-any.whl", hash = "sha256:4ac2bf3ddb9b27c40c978cf937e9bedb160050d24e8c679b94c9c885e1d73c72"}, - {file = "prefixmaps-0.2.2.tar.gz", hash = "sha256:a36b1554154ef465271bde82dc91cd671e2d31dc1f50c2fd08ccb0d7d5791c33"}, + {file = "prefixmaps-0.2.4-py3-none-any.whl", hash = "sha256:89bf0e6fb08c276f754f9624c42adf2e87c64ee92a3dde1f7eff01f22d85b512"}, + {file = "prefixmaps-0.2.4.tar.gz", hash = "sha256:ae86a1b31189d0516d199756d5808f75f44b39e86546c356cc78c0fe8d2078af"}, ] [package.dependencies] @@ -2317,6 +2350,54 @@ files = [ {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, ] +[[package]] +name = "pyarrow" +version = "15.0.2" +description = "Python library for Apache Arrow" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pyarrow-15.0.2-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:88b340f0a1d05b5ccc3d2d986279045655b1fe8e41aba6ca44ea28da0d1455d8"}, + {file = "pyarrow-15.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eaa8f96cecf32da508e6c7f69bb8401f03745c050c1dd42ec2596f2e98deecac"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23c6753ed4f6adb8461e7c383e418391b8d8453c5d67e17f416c3a5d5709afbd"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f639c059035011db8c0497e541a8a45d98a58dbe34dc8fadd0ef128f2cee46e5"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:290e36a59a0993e9a5224ed2fb3e53375770f07379a0ea03ee2fce2e6d30b423"}, + {file = "pyarrow-15.0.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:06c2bb2a98bc792f040bef31ad3e9be6a63d0cb39189227c08a7d955db96816e"}, + {file = "pyarrow-15.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:f7a197f3670606a960ddc12adbe8075cea5f707ad7bf0dffa09637fdbb89f76c"}, + {file = "pyarrow-15.0.2-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:5f8bc839ea36b1f99984c78e06e7a06054693dc2af8920f6fb416b5bca9944e4"}, + {file = "pyarrow-15.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f5e81dfb4e519baa6b4c80410421528c214427e77ca0ea9461eb4097c328fa33"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a4f240852b302a7af4646c8bfe9950c4691a419847001178662a98915fd7ee7"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e7d9cfb5a1e648e172428c7a42b744610956f3b70f524aa3a6c02a448ba853e"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:2d4f905209de70c0eb5b2de6763104d5a9a37430f137678edfb9a675bac9cd98"}, + {file = "pyarrow-15.0.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:90adb99e8ce5f36fbecbbc422e7dcbcbed07d985eed6062e459e23f9e71fd197"}, + {file = "pyarrow-15.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:b116e7fd7889294cbd24eb90cd9bdd3850be3738d61297855a71ac3b8124ee38"}, + {file = "pyarrow-15.0.2-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:25335e6f1f07fdaa026a61c758ee7d19ce824a866b27bba744348fa73bb5a440"}, + {file = "pyarrow-15.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:90f19e976d9c3d8e73c80be84ddbe2f830b6304e4c576349d9360e335cd627fc"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a22366249bf5fd40ddacc4f03cd3160f2d7c247692945afb1899bab8a140ddfb"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2a335198f886b07e4b5ea16d08ee06557e07db54a8400cc0d03c7f6a22f785f"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:3e6d459c0c22f0b9c810a3917a1de3ee704b021a5fb8b3bacf968eece6df098f"}, + {file = "pyarrow-15.0.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:033b7cad32198754d93465dcfb71d0ba7cb7cd5c9afd7052cab7214676eec38b"}, + {file = "pyarrow-15.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:29850d050379d6e8b5a693098f4de7fd6a2bea4365bfd073d7c57c57b95041ee"}, + {file = "pyarrow-15.0.2-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:7167107d7fb6dcadb375b4b691b7e316f4368f39f6f45405a05535d7ad5e5058"}, + {file = "pyarrow-15.0.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:e85241b44cc3d365ef950432a1b3bd44ac54626f37b2e3a0cc89c20e45dfd8bf"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:248723e4ed3255fcd73edcecc209744d58a9ca852e4cf3d2577811b6d4b59818"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ff3bdfe6f1b81ca5b73b70a8d482d37a766433823e0c21e22d1d7dde76ca33f"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:f3d77463dee7e9f284ef42d341689b459a63ff2e75cee2b9302058d0d98fe142"}, + {file = "pyarrow-15.0.2-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:8c1faf2482fb89766e79745670cbca04e7018497d85be9242d5350cba21357e1"}, + {file = "pyarrow-15.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:28f3016958a8e45a1069303a4a4f6a7d4910643fc08adb1e2e4a7ff056272ad3"}, + {file = "pyarrow-15.0.2-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:89722cb64286ab3d4daf168386f6968c126057b8c7ec3ef96302e81d8cdb8ae4"}, + {file = "pyarrow-15.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cd0ba387705044b3ac77b1b317165c0498299b08261d8122c96051024f953cd5"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad2459bf1f22b6a5cdcc27ebfd99307d5526b62d217b984b9f5c974651398832"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58922e4bfece8b02abf7159f1f53a8f4d9f8e08f2d988109126c17c3bb261f22"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:adccc81d3dc0478ea0b498807b39a8d41628fa9210729b2f718b78cb997c7c91"}, + {file = "pyarrow-15.0.2-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:8bd2baa5fe531571847983f36a30ddbf65261ef23e496862ece83bdceb70420d"}, + {file = "pyarrow-15.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:6669799a1d4ca9da9c7e06ef48368320f5856f36f9a4dd31a11839dda3f6cc8c"}, + {file = "pyarrow-15.0.2.tar.gz", hash = "sha256:9c9bc803cb3b7bfacc1e96ffbfd923601065d9d3f911179d81e72d99fd74a3d9"}, +] + +[package.dependencies] +numpy = ">=1.16.6,<2" + [[package]] name = "pyasn1" version = "0.6.0" @@ -2344,18 +2425,18 @@ pyasn1 = ">=0.4.6,<0.7.0" [[package]] name = "pydantic" -version = "2.6.4" +version = "2.7.1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, - {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, + {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, + {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" +pydantic-core = "2.18.2" typing-extensions = ">=4.6.1" [package.extras] @@ -2363,90 +2444,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.3" -description = "" +version = "2.18.2" +description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, - {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, - {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, - {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, - {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, - {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, - {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, - {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, - {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, - {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, - {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, - {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, - {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, - {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, + {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, + {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, + {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, + {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, + {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, + {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, + {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, + {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, + {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, + {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, + {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, + {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, + {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, + {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, + {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, + {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, + {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, + {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, + {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, + {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, + {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, + {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, + {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, + {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, + {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, + {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, + {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, + {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, + {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, + {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, ] [package.dependencies] @@ -2454,17 +2535,16 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -2484,17 +2564,17 @@ jsonasobj = ">=1.2.1" [[package]] name = "pymdown-extensions" -version = "10.7.1" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.7.1-py3-none-any.whl", hash = "sha256:f5cc7000d7ff0d1ce9395d216017fa4df3dde800afb1fb72d1c7d3fd35e710f4"}, - {file = "pymdown_extensions-10.7.1.tar.gz", hash = "sha256:c70e146bdd83c744ffc766b4671999796aba18842b268510a329f7f64700d584"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] -markdown = ">=3.5" +markdown = ">=3.6" pyyaml = "*" [package.extras] @@ -2620,13 +2700,13 @@ test = ["pytest", "pytest-cov"] [[package]] name = "pytest" -version = "7.4.4" +version = "8.2.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, + {file = "pytest-8.2.0-py3-none-any.whl", hash = "sha256:1733f0620f6cda4095bbf0d9ff8022486e91892245bb9e7d5542c018f612f233"}, + {file = "pytest-8.2.0.tar.gz", hash = "sha256:d507d4482197eac0ba2bae2e9babf0672eb333017bcedaa5fb1a3d42c1174b3f"}, ] [package.dependencies] @@ -2634,11 +2714,11 @@ 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.0" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-logging" @@ -2674,6 +2754,7 @@ description = "A pure Python implementation of the trie data structure." optional = false python-versions = "*" files = [ + {file = "PyTrie-0.4.0-py3-none-any.whl", hash = "sha256:f687c224ee8c66cda8e8628a903011b692635ffbb08d4b39c5f92b18eb78c950"}, {file = "PyTrie-0.4.0.tar.gz", hash = "sha256:8f4488f402d3465993fb6b6efa09866849ed8cda7903b50647b7d0342b805379"}, ] @@ -2726,6 +2807,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -2733,8 +2815,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -2751,6 +2841,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -2758,6 +2849,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2845,19 +2937,107 @@ sphinx = ">=1.3.1" [[package]] name = "referencing" -version = "0.34.0" +version = "0.35.1" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.34.0-py3-none-any.whl", hash = "sha256:d53ae300ceddd3169f1ffa9caf2cb7b769e92657e4fafb23d34b93679116dfd4"}, - {file = "referencing-0.34.0.tar.gz", hash = "sha256:5773bd84ef41799a5a8ca72dc34590c041eb01bf9aa02632b4a973fb0181a844"}, + {file = "referencing-0.35.1-py3-none-any.whl", hash = "sha256:eda6d3234d62814d1c64e305c1331c9a3a6132da475ab6382eaa997b21ee75de"}, + {file = "referencing-0.35.1.tar.gz", hash = "sha256:25b42124a6c8b632a425174f24087783efb348a6f1e0008e63cd4466fedf703c"}, ] [package.dependencies] attrs = ">=22.2.0" rpds-py = ">=0.7.0" +[[package]] +name = "regex" +version = "2024.5.15" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.8" +files = [ + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a81e3cfbae20378d75185171587cbf756015ccb14840702944f014e0d93ea09f"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b59138b219ffa8979013be7bc85bb60c6f7b7575df3d56dc1e403a438c7a3f6"}, + {file = "regex-2024.5.15-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0bd000c6e266927cb7a1bc39d55be95c4b4f65c5be53e659537537e019232b1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eaa7ddaf517aa095fa8da0b5015c44d03da83f5bd49c87961e3c997daed0de7"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba68168daedb2c0bab7fd7e00ced5ba90aebf91024dea3c88ad5063c2a562cca"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e8d717bca3a6e2064fc3a08df5cbe366369f4b052dcd21b7416e6d71620dca1"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1337b7dbef9b2f71121cdbf1e97e40de33ff114801263b275aafd75303bd62b5"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9ebd0a36102fcad2f03696e8af4ae682793a5d30b46c647eaf280d6cfb32796"}, + {file = "regex-2024.5.15-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9efa1a32ad3a3ea112224897cdaeb6aa00381627f567179c0314f7b65d354c62"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1595f2d10dff3d805e054ebdc41c124753631b6a471b976963c7b28543cf13b0"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b802512f3e1f480f41ab5f2cfc0e2f761f08a1f41092d6718868082fc0d27143"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a0981022dccabca811e8171f913de05720590c915b033b7e601f35ce4ea7019f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:19068a6a79cf99a19ccefa44610491e9ca02c2be3305c7760d3831d38a467a6f"}, + {file = "regex-2024.5.15-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1b5269484f6126eee5e687785e83c6b60aad7663dafe842b34691157e5083e53"}, + {file = "regex-2024.5.15-cp310-cp310-win32.whl", hash = "sha256:ada150c5adfa8fbcbf321c30c751dc67d2f12f15bd183ffe4ec7cde351d945b3"}, + {file = "regex-2024.5.15-cp310-cp310-win_amd64.whl", hash = "sha256:ac394ff680fc46b97487941f5e6ae49a9f30ea41c6c6804832063f14b2a5a145"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f5b1dff3ad008dccf18e652283f5e5339d70bf8ba7c98bf848ac33db10f7bc7a"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c6a2b494a76983df8e3d3feea9b9ffdd558b247e60b92f877f93a1ff43d26656"}, + {file = "regex-2024.5.15-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a32b96f15c8ab2e7d27655969a23895eb799de3665fa94349f3b2fbfd547236f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:10002e86e6068d9e1c91eae8295ef690f02f913c57db120b58fdd35a6bb1af35"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec54d5afa89c19c6dd8541a133be51ee1017a38b412b1321ccb8d6ddbeb4cf7d"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10e4ce0dca9ae7a66e6089bb29355d4432caed736acae36fef0fdd7879f0b0cb"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3e507ff1e74373c4d3038195fdd2af30d297b4f0950eeda6f515ae3d84a1770f"}, + {file = "regex-2024.5.15-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1f059a4d795e646e1c37665b9d06062c62d0e8cc3c511fe01315973a6542e40"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0721931ad5fe0dda45d07f9820b90b2148ccdd8e45bb9e9b42a146cb4f695649"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:833616ddc75ad595dee848ad984d067f2f31be645d603e4d158bba656bbf516c"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:287eb7f54fc81546346207c533ad3c2c51a8d61075127d7f6d79aaf96cdee890"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:19dfb1c504781a136a80ecd1fff9f16dddf5bb43cec6871778c8a907a085bb3d"}, + {file = "regex-2024.5.15-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:119af6e56dce35e8dfb5222573b50c89e5508d94d55713c75126b753f834de68"}, + {file = "regex-2024.5.15-cp311-cp311-win32.whl", hash = "sha256:1c1c174d6ec38d6c8a7504087358ce9213d4332f6293a94fbf5249992ba54efa"}, + {file = "regex-2024.5.15-cp311-cp311-win_amd64.whl", hash = "sha256:9e717956dcfd656f5055cc70996ee2cc82ac5149517fc8e1b60261b907740201"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:632b01153e5248c134007209b5c6348a544ce96c46005d8456de1d552455b014"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e64198f6b856d48192bf921421fdd8ad8eb35e179086e99e99f711957ffedd6e"}, + {file = "regex-2024.5.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68811ab14087b2f6e0fc0c2bae9ad689ea3584cad6917fc57be6a48bbd012c49"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8ec0c2fea1e886a19c3bee0cd19d862b3aa75dcdfb42ebe8ed30708df64687a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d0c0c0003c10f54a591d220997dd27d953cd9ccc1a7294b40a4be5312be8797b"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2431b9e263af1953c55abbd3e2efca67ca80a3de8a0437cb58e2421f8184717a"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a605586358893b483976cffc1723fb0f83e526e8f14c6e6614e75919d9862cf"}, + {file = "regex-2024.5.15-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:391d7f7f1e409d192dba8bcd42d3e4cf9e598f3979cdaed6ab11288da88cb9f2"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9ff11639a8d98969c863d4617595eb5425fd12f7c5ef6621a4b74b71ed8726d5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4eee78a04e6c67e8391edd4dad3279828dd66ac4b79570ec998e2155d2e59fd5"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8fe45aa3f4aa57faabbc9cb46a93363edd6197cbc43523daea044e9ff2fea83e"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:d0a3d8d6acf0c78a1fff0e210d224b821081330b8524e3e2bc5a68ef6ab5803d"}, + {file = "regex-2024.5.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c486b4106066d502495b3025a0a7251bf37ea9540433940a23419461ab9f2a80"}, + {file = "regex-2024.5.15-cp312-cp312-win32.whl", hash = "sha256:c49e15eac7c149f3670b3e27f1f28a2c1ddeccd3a2812cba953e01be2ab9b5fe"}, + {file = "regex-2024.5.15-cp312-cp312-win_amd64.whl", hash = "sha256:673b5a6da4557b975c6c90198588181029c60793835ce02f497ea817ff647cb2"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:87e2a9c29e672fc65523fb47a90d429b70ef72b901b4e4b1bd42387caf0d6835"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c3bea0ba8b73b71b37ac833a7f3fd53825924165da6a924aec78c13032f20850"}, + {file = "regex-2024.5.15-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bfc4f82cabe54f1e7f206fd3d30fda143f84a63fe7d64a81558d6e5f2e5aaba9"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e5bb9425fe881d578aeca0b2b4b3d314ec88738706f66f219c194d67179337cb"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64c65783e96e563103d641760664125e91bd85d8e49566ee560ded4da0d3e704"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf2430df4148b08fb4324b848672514b1385ae3807651f3567871f130a728cc3"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5397de3219a8b08ae9540c48f602996aa6b0b65d5a61683e233af8605c42b0f2"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:455705d34b4154a80ead722f4f185b04c4237e8e8e33f265cd0798d0e44825fa"}, + {file = "regex-2024.5.15-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b2b6f1b3bb6f640c1a92be3bbfbcb18657b125b99ecf141fb3310b5282c7d4ed"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3ad070b823ca5890cab606c940522d05d3d22395d432f4aaaf9d5b1653e47ced"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5b5467acbfc153847d5adb21e21e29847bcb5870e65c94c9206d20eb4e99a384"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:e6662686aeb633ad65be2a42b4cb00178b3fbf7b91878f9446075c404ada552f"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:2b4c884767504c0e2401babe8b5b7aea9148680d2e157fa28f01529d1f7fcf67"}, + {file = "regex-2024.5.15-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:3cd7874d57f13bf70078f1ff02b8b0aa48d5b9ed25fc48547516c6aba36f5741"}, + {file = "regex-2024.5.15-cp38-cp38-win32.whl", hash = "sha256:e4682f5ba31f475d58884045c1a97a860a007d44938c4c0895f41d64481edbc9"}, + {file = "regex-2024.5.15-cp38-cp38-win_amd64.whl", hash = "sha256:d99ceffa25ac45d150e30bd9ed14ec6039f2aad0ffa6bb87a5936f5782fc1569"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13cdaf31bed30a1e1c2453ef6015aa0983e1366fad2667657dbcac7b02f67133"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cac27dcaa821ca271855a32188aa61d12decb6fe45ffe3e722401fe61e323cd1"}, + {file = "regex-2024.5.15-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7dbe2467273b875ea2de38ded4eba86cbcbc9a1a6d0aa11dcf7bd2e67859c435"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:64f18a9a3513a99c4bef0e3efd4c4a5b11228b48aa80743be822b71e132ae4f5"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d347a741ea871c2e278fde6c48f85136c96b8659b632fb57a7d1ce1872547600"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1878b8301ed011704aea4c806a3cadbd76f84dece1ec09cc9e4dc934cfa5d4da"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4babf07ad476aaf7830d77000874d7611704a7fcf68c9c2ad151f5d94ae4bfc4"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:35cb514e137cb3488bce23352af3e12fb0dbedd1ee6e60da053c69fb1b29cc6c"}, + {file = "regex-2024.5.15-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cdd09d47c0b2efee9378679f8510ee6955d329424c659ab3c5e3a6edea696294"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:72d7a99cd6b8f958e85fc6ca5b37c4303294954eac1376535b03c2a43eb72629"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a094801d379ab20c2135529948cb84d417a2169b9bdceda2a36f5f10977ebc16"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c0c18345010870e58238790a6779a1219b4d97bd2e77e1140e8ee5d14df071aa"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:16093f563098448ff6b1fa68170e4acbef94e6b6a4e25e10eae8598bb1694b5d"}, + {file = "regex-2024.5.15-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e38a7d4e8f633a33b4c7350fbd8bad3b70bf81439ac67ac38916c4a86b465456"}, + {file = "regex-2024.5.15-cp39-cp39-win32.whl", hash = "sha256:71a455a3c584a88f654b64feccc1e25876066c4f5ef26cd6dd711308aa538694"}, + {file = "regex-2024.5.15-cp39-cp39-win_amd64.whl", hash = "sha256:cab12877a9bdafde5500206d1020a584355a97884dfd388af3699e9137bf7388"}, + {file = "regex-2024.5.15.tar.gz", hash = "sha256:d3ee02d9e5f482cc8309134a91eeaacbdd2261ba111b0fef3748eeb4913e6a2c"}, +] + [[package]] name = "requests" version = "2.31.0" @@ -2905,112 +3085,130 @@ files = [ {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, ] +[[package]] +name = "rich" +version = "13.7.1" +description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "rich-13.7.1-py3-none-any.whl", hash = "sha256:4edbae314f59eb482f54e9e30bf00d33350aaa94f4bfcd4e9e3110e64d0d7222"}, + {file = "rich-13.7.1.tar.gz", hash = "sha256:9be308cb1fe2f1f57d67ce99e95af38a1e2bc71ad9813b0e247cf7ffbcc3a432"}, +] + +[package.dependencies] +markdown-it-py = ">=2.2.0" +pygments = ">=2.13.0,<3.0.0" + +[package.extras] +jupyter = ["ipywidgets (>=7.5.1,<9)"] + [[package]] name = "rpds-py" -version = "0.18.0" +version = "0.18.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" files = [ - {file = "rpds_py-0.18.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:5b4e7d8d6c9b2e8ee2d55c90b59c707ca59bc30058269b3db7b1f8df5763557e"}, - {file = "rpds_py-0.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c463ed05f9dfb9baebef68048aed8dcdc94411e4bf3d33a39ba97e271624f8f7"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:01e36a39af54a30f28b73096dd39b6802eddd04c90dbe161c1b8dbe22353189f"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d62dec4976954a23d7f91f2f4530852b0c7608116c257833922a896101336c51"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd18772815d5f008fa03d2b9a681ae38d5ae9f0e599f7dda233c439fcaa00d40"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:923d39efa3cfb7279a0327e337a7958bff00cc447fd07a25cddb0a1cc9a6d2da"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39514da80f971362f9267c600b6d459bfbbc549cffc2cef8e47474fddc9b45b1"}, - {file = "rpds_py-0.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a34d557a42aa28bd5c48a023c570219ba2593bcbbb8dc1b98d8cf5d529ab1434"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:93df1de2f7f7239dc9cc5a4a12408ee1598725036bd2dedadc14d94525192fc3"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:34b18ba135c687f4dac449aa5157d36e2cbb7c03cbea4ddbd88604e076aa836e"}, - {file = "rpds_py-0.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c0b5dcf9193625afd8ecc92312d6ed78781c46ecbf39af9ad4681fc9f464af88"}, - {file = "rpds_py-0.18.0-cp310-none-win32.whl", hash = "sha256:c4325ff0442a12113a6379af66978c3fe562f846763287ef66bdc1d57925d337"}, - {file = "rpds_py-0.18.0-cp310-none-win_amd64.whl", hash = "sha256:7223a2a5fe0d217e60a60cdae28d6949140dde9c3bcc714063c5b463065e3d66"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3a96e0c6a41dcdba3a0a581bbf6c44bb863f27c541547fb4b9711fd8cf0ffad4"}, - {file = "rpds_py-0.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30f43887bbae0d49113cbaab729a112251a940e9b274536613097ab8b4899cf6"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fcb25daa9219b4cf3a0ab24b0eb9a5cc8949ed4dc72acb8fa16b7e1681aa3c58"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d68c93e381010662ab873fea609bf6c0f428b6d0bb00f2c6939782e0818d37bf"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b34b7aa8b261c1dbf7720b5d6f01f38243e9b9daf7e6b8bc1fd4657000062f2c"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2e6d75ab12b0bbab7215e5d40f1e5b738aa539598db27ef83b2ec46747df90e1"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8612cd233543a3781bc659c731b9d607de65890085098986dfd573fc2befe5"}, - {file = "rpds_py-0.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aec493917dd45e3c69d00a8874e7cbed844efd935595ef78a0f25f14312e33c6"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:661d25cbffaf8cc42e971dd570d87cb29a665f49f4abe1f9e76be9a5182c4688"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1df3659d26f539ac74fb3b0c481cdf9d725386e3552c6fa2974f4d33d78e544b"}, - {file = "rpds_py-0.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a1ce3ba137ed54f83e56fb983a5859a27d43a40188ba798993812fed73c70836"}, - {file = "rpds_py-0.18.0-cp311-none-win32.whl", hash = "sha256:69e64831e22a6b377772e7fb337533c365085b31619005802a79242fee620bc1"}, - {file = "rpds_py-0.18.0-cp311-none-win_amd64.whl", hash = "sha256:998e33ad22dc7ec7e030b3df701c43630b5bc0d8fbc2267653577e3fec279afa"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:7f2facbd386dd60cbbf1a794181e6aa0bd429bd78bfdf775436020172e2a23f0"}, - {file = "rpds_py-0.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d9a5be316c15ffb2b3c405c4ff14448c36b4435be062a7f578ccd8b01f0c4d8"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd5bf1af8efe569654bbef5a3e0a56eca45f87cfcffab31dd8dde70da5982475"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5417558f6887e9b6b65b4527232553c139b57ec42c64570569b155262ac0754f"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:56a737287efecafc16f6d067c2ea0117abadcd078d58721f967952db329a3e5c"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8f03bccbd8586e9dd37219bce4d4e0d3ab492e6b3b533e973fa08a112cb2ffc9"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4457a94da0d5c53dc4b3e4de1158bdab077db23c53232f37a3cb7afdb053a4e3"}, - {file = "rpds_py-0.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0ab39c1ba9023914297dd88ec3b3b3c3f33671baeb6acf82ad7ce883f6e8e157"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9d54553c1136b50fd12cc17e5b11ad07374c316df307e4cfd6441bea5fb68496"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0af039631b6de0397ab2ba16eaf2872e9f8fca391b44d3d8cac317860a700a3f"}, - {file = "rpds_py-0.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:84ffab12db93b5f6bad84c712c92060a2d321b35c3c9960b43d08d0f639d60d7"}, - {file = "rpds_py-0.18.0-cp312-none-win32.whl", hash = "sha256:685537e07897f173abcf67258bee3c05c374fa6fff89d4c7e42fb391b0605e98"}, - {file = "rpds_py-0.18.0-cp312-none-win_amd64.whl", hash = "sha256:e003b002ec72c8d5a3e3da2989c7d6065b47d9eaa70cd8808b5384fbb970f4ec"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:08f9ad53c3f31dfb4baa00da22f1e862900f45908383c062c27628754af2e88e"}, - {file = "rpds_py-0.18.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c0013fe6b46aa496a6749c77e00a3eb07952832ad6166bd481c74bda0dcb6d58"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32a92116d4f2a80b629778280103d2a510a5b3f6314ceccd6e38006b5e92dcb"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e541ec6f2ec456934fd279a3120f856cd0aedd209fc3852eca563f81738f6861"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bed88b9a458e354014d662d47e7a5baafd7ff81c780fd91584a10d6ec842cb73"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2644e47de560eb7bd55c20fc59f6daa04682655c58d08185a9b95c1970fa1e07"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e8916ae4c720529e18afa0b879473049e95949bf97042e938530e072fde061d"}, - {file = "rpds_py-0.18.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:465a3eb5659338cf2a9243e50ad9b2296fa15061736d6e26240e713522b6235c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:ea7d4a99f3b38c37eac212dbd6ec42b7a5ec51e2c74b5d3223e43c811609e65f"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:67071a6171e92b6da534b8ae326505f7c18022c6f19072a81dcf40db2638767c"}, - {file = "rpds_py-0.18.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:41ef53e7c58aa4ef281da975f62c258950f54b76ec8e45941e93a3d1d8580594"}, - {file = "rpds_py-0.18.0-cp38-none-win32.whl", hash = "sha256:fdea4952db2793c4ad0bdccd27c1d8fdd1423a92f04598bc39425bcc2b8ee46e"}, - {file = "rpds_py-0.18.0-cp38-none-win_amd64.whl", hash = "sha256:7cd863afe7336c62ec78d7d1349a2f34c007a3cc6c2369d667c65aeec412a5b1"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:5307def11a35f5ae4581a0b658b0af8178c65c530e94893345bebf41cc139d33"}, - {file = "rpds_py-0.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:77f195baa60a54ef9d2de16fbbfd3ff8b04edc0c0140a761b56c267ac11aa467"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39f5441553f1c2aed4de4377178ad8ff8f9d733723d6c66d983d75341de265ab"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a00312dea9310d4cb7dbd7787e722d2e86a95c2db92fbd7d0155f97127bcb40"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8f2fc11e8fe034ee3c34d316d0ad8808f45bc3b9ce5857ff29d513f3ff2923a1"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:586f8204935b9ec884500498ccc91aa869fc652c40c093bd9e1471fbcc25c022"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddc2f4dfd396c7bfa18e6ce371cba60e4cf9d2e5cdb71376aa2da264605b60b9"}, - {file = "rpds_py-0.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5ddcba87675b6d509139d1b521e0c8250e967e63b5909a7e8f8944d0f90ff36f"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7bd339195d84439cbe5771546fe8a4e8a7a045417d8f9de9a368c434e42a721e"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:d7c36232a90d4755b720fbd76739d8891732b18cf240a9c645d75f00639a9024"}, - {file = "rpds_py-0.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6b0817e34942b2ca527b0e9298373e7cc75f429e8da2055607f4931fded23e20"}, - {file = "rpds_py-0.18.0-cp39-none-win32.whl", hash = "sha256:99f70b740dc04d09e6b2699b675874367885217a2e9f782bdf5395632ac663b7"}, - {file = "rpds_py-0.18.0-cp39-none-win_amd64.whl", hash = "sha256:6ef687afab047554a2d366e112dd187b62d261d49eb79b77e386f94644363294"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ad36cfb355e24f1bd37cac88c112cd7730873f20fb0bdaf8ba59eedf8216079f"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:36b3ee798c58ace201289024b52788161e1ea133e4ac93fba7d49da5fec0ef9e"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f8a2f084546cc59ea99fda8e070be2fd140c3092dc11524a71aa8f0f3d5a55ca"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e4461d0f003a0aa9be2bdd1b798a041f177189c1a0f7619fe8c95ad08d9a45d7"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8db715ebe3bb7d86d77ac1826f7d67ec11a70dbd2376b7cc214199360517b641"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:793968759cd0d96cac1e367afd70c235867831983f876a53389ad869b043c948"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66e6a3af5a75363d2c9a48b07cb27c4ea542938b1a2e93b15a503cdfa8490795"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ef0befbb5d79cf32d0266f5cff01545602344eda89480e1dd88aca964260b18"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d4acf42190d449d5e89654d5c1ed3a4f17925eec71f05e2a41414689cda02d1"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:a5f446dd5055667aabaee78487f2b5ab72e244f9bc0b2ffebfeec79051679984"}, - {file = "rpds_py-0.18.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:9dbbeb27f4e70bfd9eec1be5477517365afe05a9b2c441a0b21929ee61048124"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:22806714311a69fd0af9b35b7be97c18a0fc2826e6827dbb3a8c94eac6cf7eeb"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:b34ae4636dfc4e76a438ab826a0d1eed2589ca7d9a1b2d5bb546978ac6485461"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c8370641f1a7f0e0669ddccca22f1da893cef7628396431eb445d46d893e5cd"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8362467a0fdeccd47935f22c256bec5e6abe543bf0d66e3d3d57a8fb5731863"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:11a8c85ef4a07a7638180bf04fe189d12757c696eb41f310d2426895356dcf05"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b316144e85316da2723f9d8dc75bada12fa58489a527091fa1d5a612643d1a0e"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf1ea2e34868f6fbf070e1af291c8180480310173de0b0c43fc38a02929fc0e3"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e546e768d08ad55b20b11dbb78a745151acbd938f8f00d0cfbabe8b0199b9880"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4901165d170a5fde6f589acb90a6b33629ad1ec976d4529e769c6f3d885e3e80"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:618a3d6cae6ef8ec88bb76dd80b83cfe415ad4f1d942ca2a903bf6b6ff97a2da"}, - {file = "rpds_py-0.18.0-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ed4eb745efbff0a8e9587d22a84be94a5eb7d2d99c02dacf7bd0911713ed14dd"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c81e5f372cd0dc5dc4809553d34f832f60a46034a5f187756d9b90586c2c307"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:43fbac5f22e25bee1d482c97474f930a353542855f05c1161fd804c9dc74a09d"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d7faa6f14017c0b1e69f5e2c357b998731ea75a442ab3841c0dbbbfe902d2c4"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:08231ac30a842bd04daabc4d71fddd7e6d26189406d5a69535638e4dcb88fe76"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:044a3e61a7c2dafacae99d1e722cc2d4c05280790ec5a05031b3876809d89a5c"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3f26b5bd1079acdb0c7a5645e350fe54d16b17bfc5e71f371c449383d3342e17"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:482103aed1dfe2f3b71a58eff35ba105289b8d862551ea576bd15479aba01f66"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1374f4129f9bcca53a1bba0bb86bf78325a0374577cf7e9e4cd046b1e6f20e24"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:635dc434ff724b178cb192c70016cc0ad25a275228f749ee0daf0eddbc8183b1"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:bc362ee4e314870a70f4ae88772d72d877246537d9f8cb8f7eacf10884862432"}, - {file = "rpds_py-0.18.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4832d7d380477521a8c1644bbab6588dfedea5e30a7d967b5fb75977c45fd77f"}, - {file = "rpds_py-0.18.0.tar.gz", hash = "sha256:42821446ee7a76f5d9f71f9e33a4fb2ffd724bb3e7f93386150b61a43115788d"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:d31dea506d718693b6b2cffc0648a8929bdc51c70a311b2770f09611caa10d53"}, + {file = "rpds_py-0.18.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:732672fbc449bab754e0b15356c077cc31566df874964d4801ab14f71951ea80"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a98a1f0552b5f227a3d6422dbd61bc6f30db170939bd87ed14f3c339aa6c7c9"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7f1944ce16401aad1e3f7d312247b3d5de7981f634dc9dfe90da72b87d37887d"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38e14fb4e370885c4ecd734f093a2225ee52dc384b86fa55fe3f74638b2cfb09"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08d74b184f9ab6289b87b19fe6a6d1a97fbfea84b8a3e745e87a5de3029bf944"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d70129cef4a8d979caa37e7fe957202e7eee8ea02c5e16455bc9808a59c6b2f0"}, + {file = "rpds_py-0.18.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ce0bb20e3a11bd04461324a6a798af34d503f8d6f1aa3d2aa8901ceaf039176d"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81c5196a790032e0fc2464c0b4ab95f8610f96f1f2fa3d4deacce6a79852da60"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:f3027be483868c99b4985fda802a57a67fdf30c5d9a50338d9db646d590198da"}, + {file = "rpds_py-0.18.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d44607f98caa2961bab4fa3c4309724b185b464cdc3ba6f3d7340bac3ec97cc1"}, + {file = "rpds_py-0.18.1-cp310-none-win32.whl", hash = "sha256:c273e795e7a0f1fddd46e1e3cb8be15634c29ae8ff31c196debb620e1edb9333"}, + {file = "rpds_py-0.18.1-cp310-none-win_amd64.whl", hash = "sha256:8352f48d511de5f973e4f2f9412736d7dea76c69faa6d36bcf885b50c758ab9a"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:6b5ff7e1d63a8281654b5e2896d7f08799378e594f09cf3674e832ecaf396ce8"}, + {file = "rpds_py-0.18.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8927638a4d4137a289e41d0fd631551e89fa346d6dbcfc31ad627557d03ceb6d"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:154bf5c93d79558b44e5b50cc354aa0459e518e83677791e6adb0b039b7aa6a7"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07f2139741e5deb2c5154a7b9629bc5aa48c766b643c1a6750d16f865a82c5fc"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8c7672e9fba7425f79019db9945b16e308ed8bc89348c23d955c8c0540da0a07"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:489bdfe1abd0406eba6b3bb4fdc87c7fa40f1031de073d0cfb744634cc8fa261"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c20f05e8e3d4fc76875fc9cb8cf24b90a63f5a1b4c5b9273f0e8225e169b100"}, + {file = "rpds_py-0.18.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:967342e045564cef76dfcf1edb700b1e20838d83b1aa02ab313e6a497cf923b8"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2cc7c1a47f3a63282ab0f422d90ddac4aa3034e39fc66a559ab93041e6505da7"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f7afbfee1157e0f9376c00bb232e80a60e59ed716e3211a80cb8506550671e6e"}, + {file = "rpds_py-0.18.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e6934d70dc50f9f8ea47081ceafdec09245fd9f6032669c3b45705dea096b88"}, + {file = "rpds_py-0.18.1-cp311-none-win32.whl", hash = "sha256:c69882964516dc143083d3795cb508e806b09fc3800fd0d4cddc1df6c36e76bb"}, + {file = "rpds_py-0.18.1-cp311-none-win_amd64.whl", hash = "sha256:70a838f7754483bcdc830444952fd89645569e7452e3226de4a613a4c1793fb2"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3dd3cd86e1db5aadd334e011eba4e29d37a104b403e8ca24dcd6703c68ca55b3"}, + {file = "rpds_py-0.18.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:05f3d615099bd9b13ecf2fc9cf2d839ad3f20239c678f461c753e93755d629ee"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:35b2b771b13eee8729a5049c976197ff58a27a3829c018a04341bcf1ae409b2b"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ee17cd26b97d537af8f33635ef38be873073d516fd425e80559f4585a7b90c43"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b646bf655b135ccf4522ed43d6902af37d3f5dbcf0da66c769a2b3938b9d8184"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19ba472b9606c36716062c023afa2484d1e4220548751bda14f725a7de17b4f6"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e30ac5e329098903262dc5bdd7e2086e0256aa762cc8b744f9e7bf2a427d3f8"}, + {file = "rpds_py-0.18.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d58ad6317d188c43750cb76e9deacf6051d0f884d87dc6518e0280438648a9ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e1735502458621921cee039c47318cb90b51d532c2766593be6207eec53e5c4c"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f5bab211605d91db0e2995a17b5c6ee5edec1270e46223e513eaa20da20076ac"}, + {file = "rpds_py-0.18.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2fc24a329a717f9e2448f8cd1f960f9dac4e45b6224d60734edeb67499bab03a"}, + {file = "rpds_py-0.18.1-cp312-none-win32.whl", hash = "sha256:1805d5901779662d599d0e2e4159d8a82c0b05faa86ef9222bf974572286b2b6"}, + {file = "rpds_py-0.18.1-cp312-none-win_amd64.whl", hash = "sha256:720edcb916df872d80f80a1cc5ea9058300b97721efda8651efcd938a9c70a72"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:c827576e2fa017a081346dce87d532a5310241648eb3700af9a571a6e9fc7e74"}, + {file = "rpds_py-0.18.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:aa3679e751408d75a0b4d8d26d6647b6d9326f5e35c00a7ccd82b78ef64f65f8"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0abeee75434e2ee2d142d650d1e54ac1f8b01e6e6abdde8ffd6eeac6e9c38e20"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed402d6153c5d519a0faf1bb69898e97fb31613b49da27a84a13935ea9164dfc"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:338dee44b0cef8b70fd2ef54b4e09bb1b97fc6c3a58fea5db6cc083fd9fc2724"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7750569d9526199c5b97e5a9f8d96a13300950d910cf04a861d96f4273d5b104"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:607345bd5912aacc0c5a63d45a1f73fef29e697884f7e861094e443187c02be5"}, + {file = "rpds_py-0.18.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:207c82978115baa1fd8d706d720b4a4d2b0913df1c78c85ba73fe6c5804505f0"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:6d1e42d2735d437e7e80bab4d78eb2e459af48c0a46e686ea35f690b93db792d"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:5463c47c08630007dc0fe99fb480ea4f34a89712410592380425a9b4e1611d8e"}, + {file = "rpds_py-0.18.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:06d218939e1bf2ca50e6b0ec700ffe755e5216a8230ab3e87c059ebb4ea06afc"}, + {file = "rpds_py-0.18.1-cp38-none-win32.whl", hash = "sha256:312fe69b4fe1ffbe76520a7676b1e5ac06ddf7826d764cc10265c3b53f96dbe9"}, + {file = "rpds_py-0.18.1-cp38-none-win_amd64.whl", hash = "sha256:9437ca26784120a279f3137ee080b0e717012c42921eb07861b412340f85bae2"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:19e515b78c3fc1039dd7da0a33c28c3154458f947f4dc198d3c72db2b6b5dc93"}, + {file = "rpds_py-0.18.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a7b28c5b066bca9a4eb4e2f2663012debe680f097979d880657f00e1c30875a0"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:673fdbbf668dd958eff750e500495ef3f611e2ecc209464f661bc82e9838991e"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d960de62227635d2e61068f42a6cb6aae91a7fe00fca0e3aeed17667c8a34611"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:352a88dc7892f1da66b6027af06a2e7e5d53fe05924cc2cfc56495b586a10b72"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e0ee01ad8260184db21468a6e1c37afa0529acc12c3a697ee498d3c2c4dcaf3"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4c39ad2f512b4041343ea3c7894339e4ca7839ac38ca83d68a832fc8b3748ab"}, + {file = "rpds_py-0.18.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:aaa71ee43a703c321906813bb252f69524f02aa05bf4eec85f0c41d5d62d0f4c"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6cd8098517c64a85e790657e7b1e509b9fe07487fd358e19431cb120f7d96338"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:4adec039b8e2928983f885c53b7cc4cda8965b62b6596501a0308d2703f8af1b"}, + {file = "rpds_py-0.18.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:32b7daaa3e9389db3695964ce8e566e3413b0c43e3394c05e4b243a4cd7bef26"}, + {file = "rpds_py-0.18.1-cp39-none-win32.whl", hash = "sha256:2625f03b105328729f9450c8badda34d5243231eef6535f80064d57035738360"}, + {file = "rpds_py-0.18.1-cp39-none-win_amd64.whl", hash = "sha256:bf18932d0003c8c4d51a39f244231986ab23ee057d235a12b2684ea26a353590"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cbfbea39ba64f5e53ae2915de36f130588bba71245b418060ec3330ebf85678e"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3d456ff2a6a4d2adcdf3c1c960a36f4fd2fec6e3b4902a42a384d17cf4e7a65"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7700936ef9d006b7ef605dc53aa364da2de5a3aa65516a1f3ce73bf82ecfc7ae"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:51584acc5916212e1bf45edd17f3a6b05fe0cbb40482d25e619f824dccb679de"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:942695a206a58d2575033ff1e42b12b2aece98d6003c6bc739fbf33d1773b12f"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b906b5f58892813e5ba5c6056d6a5ad08f358ba49f046d910ad992196ea61397"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6f8e3fecca256fefc91bb6765a693d96692459d7d4c644660a9fff32e517843"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7732770412bab81c5a9f6d20aeb60ae943a9b36dcd990d876a773526468e7163"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:bd1105b50ede37461c1d51b9698c4f4be6e13e69a908ab7751e3807985fc0346"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:618916f5535784960f3ecf8111581f4ad31d347c3de66d02e728de460a46303c"}, + {file = "rpds_py-0.18.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:17c6d2155e2423f7e79e3bb18151c686d40db42d8645e7977442170c360194d4"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6c4c4c3f878df21faf5fac86eda32671c27889e13570645a9eea0a1abdd50922"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:fab6ce90574645a0d6c58890e9bcaac8d94dff54fb51c69e5522a7358b80ab64"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:531796fb842b53f2695e94dc338929e9f9dbf473b64710c28af5a160b2a8927d"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:740884bc62a5e2bbb31e584f5d23b32320fd75d79f916f15a788d527a5e83644"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:998125738de0158f088aef3cb264a34251908dd2e5d9966774fdab7402edfab7"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2be6e9dd4111d5b31ba3b74d17da54a8319d8168890fbaea4b9e5c3de630ae5"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0cee71bc618cd93716f3c1bf56653740d2d13ddbd47673efa8bf41435a60daa"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2c3caec4ec5cd1d18e5dd6ae5194d24ed12785212a90b37f5f7f06b8bedd7139"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:27bba383e8c5231cd559affe169ca0b96ec78d39909ffd817f28b166d7ddd4d8"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:a888e8bdb45916234b99da2d859566f1e8a1d2275a801bb8e4a9644e3c7e7909"}, + {file = "rpds_py-0.18.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6031b25fb1b06327b43d841f33842b383beba399884f8228a6bb3df3088485ff"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48c2faaa8adfacefcbfdb5f2e2e7bdad081e5ace8d182e5f4ade971f128e6bb3"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:d85164315bd68c0806768dc6bb0429c6f95c354f87485ee3593c4f6b14def2bd"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6afd80f6c79893cfc0574956f78a0add8c76e3696f2d6a15bca2c66c415cf2d4"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa242ac1ff583e4ec7771141606aafc92b361cd90a05c30d93e343a0c2d82a89"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d21be4770ff4e08698e1e8e0bce06edb6ea0626e7c8f560bc08222880aca6a6f"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c45a639e93a0c5d4b788b2613bd637468edd62f8f95ebc6fcc303d58ab3f0a8"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910e71711d1055b2768181efa0a17537b2622afeb0424116619817007f8a2b10"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9bb1f182a97880f6078283b3505a707057c42bf55d8fca604f70dedfdc0772a"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1d54f74f40b1f7aaa595a02ff42ef38ca654b1469bef7d52867da474243cc633"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:8d2e182c9ee01135e11e9676e9a62dfad791a7a467738f06726872374a83db49"}, + {file = "rpds_py-0.18.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:636a15acc588f70fda1661234761f9ed9ad79ebed3f2125d44be0862708b666e"}, + {file = "rpds_py-0.18.1.tar.gz", hash = "sha256:dc48b479d540770c811fbd1eb9ba2bb66951863e448efec2e2c102625328e92f"}, ] [[package]] @@ -3054,24 +3252,24 @@ python-versions = ">=3.6" files = [ {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:b42169467c42b692c19cf539c38d4602069d8c1505e97b86387fcf7afb766e1d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:07238db9cbdf8fc1e9de2489a4f68474e70dffcb32232db7c08fa61ca0c7c462"}, - {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:d92f81886165cb14d7b067ef37e142256f1c6a90a65cd156b063a43da1708cfd"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fff3573c2db359f091e1589c3d7c5fc2f86f5bdb6f24252c2d8e539d4e45f412"}, + {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:aa2267c6a303eb483de8d02db2871afb5c5fc15618d894300b88958f729ad74f"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:840f0c7f194986a63d2c2465ca63af8ccbbc90ab1c6001b1978f05119b5e7334"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:024cfe1fc7c7f4e1aff4a81e718109e13409767e4f871443cbff3dba3578203d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win32.whl", hash = "sha256:c69212f63169ec1cfc9bb44723bf2917cbbd8f6191a00ef3410f5a7fe300722d"}, {file = "ruamel.yaml.clib-0.2.8-cp310-cp310-win_amd64.whl", hash = "sha256:cabddb8d8ead485e255fe80429f833172b4cadf99274db39abc080e068cbcc31"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bef08cd86169d9eafb3ccb0a39edb11d8e25f3dae2b28f5c52fd997521133069"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:b16420e621d26fdfa949a8b4b47ade8810c56002f5389970db4ddda51dbff248"}, - {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:b5edda50e5e9e15e54a6a8a0070302b00c518a9d32accc2346ad6c984aacd279"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:25c515e350e5b739842fc3228d662413ef28f295791af5e5110b543cf0b57d9b"}, + {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-manylinux_2_24_aarch64.whl", hash = "sha256:1707814f0d9791df063f8c19bb51b0d1278b8e9a2353abbb676c2f685dee6afe"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:46d378daaac94f454b3a0e3d8d78cafd78a026b1d71443f4966c696b48a6d899"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09b055c05697b38ecacb7ac50bdab2240bfca1a0c4872b0fd309bb07dc9aa3a9"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win32.whl", hash = "sha256:53a300ed9cea38cf5a2a9b069058137c2ca1ce658a874b79baceb8f892f915a7"}, {file = "ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl", hash = "sha256:c2a72e9109ea74e511e29032f3b670835f8a59bbdc9ce692c5b4ed91ccf1eedb"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ebc06178e8821efc9692ea7544aa5644217358490145629914d8020042c24aa1"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:edaef1c1200c4b4cb914583150dcaa3bc30e592e907c01117c08b13a07255ec2"}, - {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:7048c338b6c86627afb27faecf418768acb6331fc24cfa56c93e8c9780f815fa"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d176b57452ab5b7028ac47e7b3cf644bcfdc8cacfecf7e71759f7f51a59e5c92"}, + {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-manylinux_2_24_aarch64.whl", hash = "sha256:1dc67314e7e1086c9fdf2680b7b6c2be1c0d8e3a8279f2e993ca2a7545fecf62"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3213ece08ea033eb159ac52ae052a4899b56ecc124bb80020d9bbceeb50258e9"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:aab7fd643f71d7946f2ee58cc88c9b7bfc97debd71dcc93e03e2d174628e7e2d"}, {file = "ruamel.yaml.clib-0.2.8-cp312-cp312-win32.whl", hash = "sha256:5c365d91c88390c8d0a8545df0b5857172824b1c604e867161e6b3d59a827eaa"}, @@ -3079,7 +3277,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a5aa27bad2bb83670b71683aae140a1f52b0857a2deff56ad3f6c13a017a26ed"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c58ecd827313af6864893e7af0a3bb85fd529f862b6adbefe14643947cfe2942"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-macosx_12_0_arm64.whl", hash = "sha256:f481f16baec5290e45aebdc2a5168ebc6d35189ae6fea7a58787613a25f6e875"}, - {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:3fcc54cb0c8b811ff66082de1680b4b14cf8a81dce0d4fbf665c2265a81e07a1"}, + {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:77159f5d5b5c14f7c34073862a6b7d34944075d9f93e681638f6d753606c6ce6"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7f67a1ee819dc4562d444bbafb135832b0b909f81cc90f7aa00260968c9ca1b3"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:4ecbf9c3e19f9562c7fdd462e8d18dd902a47ca046a2e64dba80699f0b6c09b7"}, {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:87ea5ff66d8064301a154b3933ae406b0863402a799b16e4a1d24d9fbbcbe0d3"}, @@ -3087,7 +3285,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp37-cp37m-win_amd64.whl", hash = "sha256:3f215c5daf6a9d7bbed4a0a4f760f3113b10e82ff4c5c44bec20a68c8014f675"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1b617618914cb00bf5c34d4357c37aa15183fa229b24767259657746c9077615"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-macosx_12_0_arm64.whl", hash = "sha256:a6a9ffd280b71ad062eae53ac1659ad86a17f59a0fdc7699fd9be40525153337"}, - {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:665f58bfd29b167039f714c6998178d27ccd83984084c286110ef26b230f259f"}, + {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:305889baa4043a09e5b76f8e2a51d4ffba44259f6b4c72dec8ca56207d9c6fe1"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:700e4ebb569e59e16a976857c8798aee258dceac7c7d6b50cab63e080058df91"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:e2b4c44b60eadec492926a7270abb100ef9f72798e18743939bdbf037aab8c28"}, {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e79e5db08739731b0ce4850bed599235d601701d5694c36570a99a0c5ca41a9d"}, @@ -3095,7 +3293,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp38-cp38-win_amd64.whl", hash = "sha256:56f4252222c067b4ce51ae12cbac231bce32aee1d33fbfc9d17e5b8d6966c312"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:03d1162b6d1df1caa3a4bd27aa51ce17c9afc2046c31b0ad60a0a96ec22f8001"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba64af9fa9cebe325a62fa398760f5c7206b215201b0ec825005f1b18b9bccf"}, - {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:9eb5dee2772b0f704ca2e45b1713e4e5198c18f515b52743576d196348f374d3"}, + {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:a1a45e0bb052edf6a1d3a93baef85319733a888363938e1fc9924cb00c8df24c"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:da09ad1c359a728e112d60116f626cc9f29730ff3e0e7db72b9a2dbc2e4beed5"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:184565012b60405d93838167f425713180b949e9d8dd0bbc7b49f074407c5a8b"}, {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a75879bacf2c987c003368cf14bed0ffe99e8e85acfa6c0bfffc21a090f16880"}, @@ -3106,28 +3304,28 @@ files = [ [[package]] name = "ruff" -version = "0.3.4" +version = "0.4.4" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:60c870a7d46efcbc8385d27ec07fe534ac32f3b251e4fc44b3cbfd9e09609ef4"}, - {file = "ruff-0.3.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6fc14fa742e1d8f24910e1fff0bd5e26d395b0e0e04cc1b15c7c5e5fe5b4af91"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3ee7880f653cc03749a3bfea720cf2a192e4f884925b0cf7eecce82f0ce5854"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:cf133dd744f2470b347f602452a88e70dadfbe0fcfb5fd46e093d55da65f82f7"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f3860057590e810c7ffea75669bdc6927bfd91e29b4baa9258fd48b540a4365"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:986f2377f7cf12efac1f515fc1a5b753c000ed1e0a6de96747cdf2da20a1b369"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fd98e85869603e65f554fdc5cddf0712e352fe6e61d29d5a6fe087ec82b76c"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64abeed785dad51801b423fa51840b1764b35d6c461ea8caef9cf9e5e5ab34d9"}, - {file = "ruff-0.3.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df52972138318bc7546d92348a1ee58449bc3f9eaf0db278906eb511889c4b50"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:98e98300056445ba2cc27d0b325fd044dc17fcc38e4e4d2c7711585bd0a958ed"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:519cf6a0ebed244dce1dc8aecd3dc99add7a2ee15bb68cf19588bb5bf58e0488"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:bb0acfb921030d00070539c038cd24bb1df73a2981e9f55942514af8b17be94e"}, - {file = "ruff-0.3.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:cf187a7e7098233d0d0c71175375c5162f880126c4c716fa28a8ac418dcf3378"}, - {file = "ruff-0.3.4-py3-none-win32.whl", hash = "sha256:af27ac187c0a331e8ef91d84bf1c3c6a5dea97e912a7560ac0cef25c526a4102"}, - {file = "ruff-0.3.4-py3-none-win_amd64.whl", hash = "sha256:de0d5069b165e5a32b3c6ffbb81c350b1e3d3483347196ffdf86dc0ef9e37dd6"}, - {file = "ruff-0.3.4-py3-none-win_arm64.whl", hash = "sha256:6810563cc08ad0096b57c717bd78aeac888a1bfd38654d9113cb3dc4d3f74232"}, - {file = "ruff-0.3.4.tar.gz", hash = "sha256:f0f4484c6541a99862b693e13a151435a279b271cff20e37101116a21e2a1ad1"}, + {file = "ruff-0.4.4-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:29d44ef5bb6a08e235c8249294fa8d431adc1426bfda99ed493119e6f9ea1bf6"}, + {file = "ruff-0.4.4-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c4efe62b5bbb24178c950732ddd40712b878a9b96b1d02b0ff0b08a090cbd891"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c8e2f1e8fc12d07ab521a9005d68a969e167b589cbcaee354cb61e9d9de9c15"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:60ed88b636a463214905c002fa3eaab19795679ed55529f91e488db3fe8976ab"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b90fc5e170fc71c712cc4d9ab0e24ea505c6a9e4ebf346787a67e691dfb72e85"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:8e7e6ebc10ef16dcdc77fd5557ee60647512b400e4a60bdc4849468f076f6eef"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b9ddb2c494fb79fc208cd15ffe08f32b7682519e067413dbaf5f4b01a6087bcd"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c51c928a14f9f0a871082603e25a1588059b7e08a920f2f9fa7157b5bf08cfe9"}, + {file = "ruff-0.4.4-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b5eb0a4bfd6400b7d07c09a7725e1a98c3b838be557fee229ac0f84d9aa49c36"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:b1867ee9bf3acc21778dcb293db504692eda5f7a11a6e6cc40890182a9f9e595"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:1aecced1269481ef2894cc495647392a34b0bf3e28ff53ed95a385b13aa45768"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9da73eb616b3241a307b837f32756dc20a0b07e2bcb694fec73699c93d04a69e"}, + {file = "ruff-0.4.4-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:958b4ea5589706a81065e2a776237de2ecc3e763342e5cc8e02a4a4d8a5e6f95"}, + {file = "ruff-0.4.4-py3-none-win32.whl", hash = "sha256:cb53473849f011bca6e754f2cdf47cafc9c4f4ff4570003a0dad0b9b6890e876"}, + {file = "ruff-0.4.4-py3-none-win_amd64.whl", hash = "sha256:424e5b72597482543b684c11def82669cc6b395aa8cc69acc1858b5ef3e5daae"}, + {file = "ruff-0.4.4-py3-none-win_arm64.whl", hash = "sha256:39df0537b47d3b597293edbb95baf54ff5b49589eb7ff41926d8243caa995ea6"}, + {file = "ruff-0.4.4.tar.gz", hash = "sha256:f87ea42d5cdebdc6a69761a9d0bc83ae9b3b30d0ad78952005ba6568d6c022af"}, ] [[package]] @@ -3149,61 +3347,45 @@ crt = ["botocore[crt] (>=1.33.2,<2.0a.0)"] [[package]] name = "scipy" -version = "1.12.0" +version = "1.13.0" description = "Fundamental algorithms for scientific computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, -] - -[package.dependencies] -numpy = ">=1.22.4,<1.29.0" - -[package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - -[[package]] -name = "setuptools" -version = "69.2.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, - {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ba419578ab343a4e0a77c0ef82f088238a93eef141b2b8017e46149776dfad4d"}, + {file = "scipy-1.13.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:22789b56a999265431c417d462e5b7f2b487e831ca7bef5edeb56efe4c93f86e"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05f1432ba070e90d42d7fd836462c50bf98bd08bed0aa616c359eed8a04e3922"}, + {file = "scipy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8434f6f3fa49f631fae84afee424e2483289dfc30a47755b4b4e6b07b2633a4"}, + {file = "scipy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:dcbb9ea49b0167de4167c40eeee6e167caeef11effb0670b554d10b1e693a8b9"}, + {file = "scipy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:1d2f7bb14c178f8b13ebae93f67e42b0a6b0fc50eba1cd8021c9b6e08e8fb1cd"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0fbcf8abaf5aa2dc8d6400566c1a727aed338b5fe880cde64907596a89d576fa"}, + {file = "scipy-1.13.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5e4a756355522eb60fcd61f8372ac2549073c8788f6114449b37e9e8104f15a5"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5acd8e1dbd8dbe38d0004b1497019b2dbbc3d70691e65d69615f8a7292865d7"}, + {file = "scipy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ff7dad5d24a8045d836671e082a490848e8639cabb3dbdacb29f943a678683d"}, + {file = "scipy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4dca18c3ffee287ddd3bc8f1dabaf45f5305c5afc9f8ab9cbfab855e70b2df5c"}, + {file = "scipy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:a2f471de4d01200718b2b8927f7d76b5d9bde18047ea0fa8bd15c5ba3f26a1d6"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d0de696f589681c2802f9090fff730c218f7c51ff49bf252b6a97ec4a5d19e8b"}, + {file = "scipy-1.13.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:b2a3ff461ec4756b7e8e42e1c681077349a038f0686132d623fa404c0bee2551"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf9fe63e7a4bf01d3645b13ff2aa6dea023d38993f42aaac81a18b1bda7a82a"}, + {file = "scipy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1e7626dfd91cdea5714f343ce1176b6c4745155d234f1033584154f60ef1ff42"}, + {file = "scipy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:109d391d720fcebf2fbe008621952b08e52907cf4c8c7efc7376822151820820"}, + {file = "scipy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:8930ae3ea371d6b91c203b1032b9600d69c568e537b7988a3073dfe4d4774f21"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5407708195cb38d70fd2d6bb04b1b9dd5c92297d86e9f9daae1576bd9e06f602"}, + {file = "scipy-1.13.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:ac38c4c92951ac0f729c4c48c9e13eb3675d9986cc0c83943784d7390d540c78"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c74543c4fbeb67af6ce457f6a6a28e5d3739a87f62412e4a16e46f164f0ae5"}, + {file = "scipy-1.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28e286bf9ac422d6beb559bc61312c348ca9b0f0dae0d7c5afde7f722d6ea13d"}, + {file = "scipy-1.13.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:33fde20efc380bd23a78a4d26d59fc8704e9b5fd9b08841693eb46716ba13d86"}, + {file = "scipy-1.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:45c08bec71d3546d606989ba6e7daa6f0992918171e2a6f7fbedfa7361c2de1e"}, + {file = "scipy-1.13.0.tar.gz", hash = "sha256:58569af537ea29d3f78e5abd18398459f195546bb3be23d16677fb26616cc11e"}, ] +[package.dependencies] +numpy = ">=1.22.4,<2.3" + [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +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 = "sh" @@ -3217,13 +3399,13 @@ files = [ [[package]] name = "shellingham" -version = "1.4.0" +version = "1.5.4" description = "Tool to Detect Surrounding Shell" optional = false -python-versions = "!=3.0,!=3.1,!=3.2,!=3.3,>=2.6" +python-versions = ">=3.7" files = [ - {file = "shellingham-1.4.0-py2.py3-none-any.whl", hash = "sha256:536b67a0697f2e4af32ab176c00a50ac2899c5a05e0d8e2dadac8e58888283f9"}, - {file = "shellingham-1.4.0.tar.gz", hash = "sha256:4855c2458d6904829bd34c299f11fdeed7cfefbf8a2c522e4caea6cd76b3171e"}, + {file = "shellingham-1.5.4-py2.py3-none-any.whl", hash = "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686"}, + {file = "shellingham-1.5.4.tar.gz", hash = "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de"}, ] [[package]] @@ -3322,20 +3504,20 @@ pandas = ["pandas (>=1.3.5)"] [[package]] name = "sphinx" -version = "7.2.6" +version = "7.3.7" description = "Python documentation generator" optional = false python-versions = ">=3.9" files = [ - {file = "sphinx-7.2.6-py3-none-any.whl", hash = "sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560"}, - {file = "sphinx-7.2.6.tar.gz", hash = "sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5"}, + {file = "sphinx-7.3.7-py3-none-any.whl", hash = "sha256:413f75440be4cacf328f580b4274ada4565fb2187d696a84970c23f77b64d8c3"}, + {file = "sphinx-7.3.7.tar.gz", hash = "sha256:a4a7db75ed37531c05002d56ed6948d4c42f473a36f46e1382b0bd76ca9627bc"}, ] [package.dependencies] -alabaster = ">=0.7,<0.8" +alabaster = ">=0.7.14,<0.8.0" babel = ">=2.9" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} -docutils = ">=0.18.1,<0.21" +docutils = ">=0.18.1,<0.22" imagesize = ">=1.3" Jinja2 = ">=3.0" packaging = ">=21.0" @@ -3348,11 +3530,12 @@ sphinxcontrib-htmlhelp = ">=2.0.0" sphinxcontrib-jsmath = "*" sphinxcontrib-qthelp = "*" sphinxcontrib-serializinghtml = ">=1.1.9" +tomli = {version = ">=2", markers = "python_version < \"3.11\""} [package.extras] docs = ["sphinxcontrib-websupport"] -lint = ["docutils-stubs", "flake8 (>=3.5.0)", "flake8-simplify", "isort", "mypy (>=0.990)", "ruff", "sphinx-lint", "types-requests"] -test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools (>=67.0)"] +lint = ["flake8 (>=3.5.0)", "importlib_metadata", "mypy (==1.9.0)", "pytest (>=6.0)", "ruff (==0.3.7)", "sphinx-lint", "tomli", "types-docutils", "types-requests"] +test = ["cython (>=3.0)", "defusedxml (>=0.7.1)", "pytest (>=6.0)", "setuptools (>=67.0)"] [[package]] name = "sphinxcontrib-applehelp" @@ -3529,13 +3712,13 @@ sqlcipher = ["sqlcipher3_binary"] [[package]] name = "sssom" -version = "0.4.5" +version = "0.4.9" description = "Operations on SSSOM mapping tables" optional = false python-versions = "<4.0,>=3.8" files = [ - {file = "sssom-0.4.5-py3-none-any.whl", hash = "sha256:8fd582082b9b5e748f05d1831362f1af9f700837a01f1d5fca09361519657d54"}, - {file = "sssom-0.4.5.tar.gz", hash = "sha256:753b3481083a6a62d39f11d6dc18e6038fc0edaa27929e0881e1c7fee8f8bcbe"}, + {file = "sssom-0.4.9-py3-none-any.whl", hash = "sha256:54af580957947175dfcc96e7ce2323ea3b476eb58b6e7a2e95d8c3e10c6393f4"}, + {file = "sssom-0.4.9.tar.gz", hash = "sha256:16674d58aa37ab82c1f6f69d317c0bdc6eedd59e8d809fcbc87f5f1e1eefdbf1"}, ] [package.dependencies] @@ -3543,7 +3726,7 @@ click = ">=8.1.6" curies = ">=0.7.3" deprecation = ">=2.1.0,<3.0.0" importlib-resources = ">=6.1.1,<7.0.0" -linkml-runtime = ">=1.5.5" +linkml-runtime = ">=1.7.5,<2.0.0" networkx = {version = ">=3.1", extras = ["networkx"]} pandas = ">1.0.3" pansql = {version = ">=0.0.1", extras = ["pansql"]} @@ -3551,23 +3734,22 @@ pyyaml = ">=6.0.1,<7.0.0" rdflib = ">=6.0.0" scipy = {version = "*", extras = ["scipy"]} sparqlwrapper = ">=2.0.0" -sssom-schema = ">=0.14.0" +sssom-schema = ">=0.15.2,<0.16.0" validators = ">=0.20.0" [[package]] name = "sssom-schema" -version = "0.15.0" +version = "0.15.2" description = "SSSOM is a Simple Standard for Sharing Ontology Mappings." optional = false -python-versions = ">=3.7.6,<4.0.0" +python-versions = "<4.0,>=3.8" files = [ - {file = "sssom_schema-0.15.0-py3-none-any.whl", hash = "sha256:0ba81a0fe76d28a2c65d65a99e0cd17d8dd08274f9735776a70c8d2f3734e901"}, - {file = "sssom_schema-0.15.0.tar.gz", hash = "sha256:35d56ba6d0350b1e07df2789aebac9c5c70b0888bf88ec3c0592c89e9c13d228"}, + {file = "sssom_schema-0.15.2-py3-none-any.whl", hash = "sha256:41112586160d5e57a7cfedab22dfd0c21d1e3e1a86805f7fe31918a9b664ca15"}, + {file = "sssom_schema-0.15.2.tar.gz", hash = "sha256:c759ee8f9e4a7e5e8249b58198189b2e48e297ff31a918d4af64a89ed30938da"}, ] [package.dependencies] linkml-runtime = "*" -mkdocs-mermaid2-plugin = ">=0.6.0,<0.7.0" [[package]] name = "stringcase" @@ -3603,13 +3785,13 @@ files = [ [[package]] name = "tox" -version = "4.14.2" +version = "4.15.0" description = "tox is a generic virtualenv management and test command line tool" optional = false python-versions = ">=3.8" files = [ - {file = "tox-4.14.2-py3-none-any.whl", hash = "sha256:2900c4eb7b716af4a928a7fdc2ed248ad6575294ed7cfae2ea41203937422847"}, - {file = "tox-4.14.2.tar.gz", hash = "sha256:0defb44f6dafd911b61788325741cc6b2e12ea71f987ac025ad4d649f1f1a104"}, + {file = "tox-4.15.0-py3-none-any.whl", hash = "sha256:300055f335d855b2ab1b12c5802de7f62a36d4fd53f30bd2835f6a201dda46ea"}, + {file = "tox-4.15.0.tar.gz", hash = "sha256:7a0beeef166fbe566f54f795b4906c31b428eddafc0102ac00d20998dd1933f6"}, ] [package.dependencies] @@ -3630,13 +3812,13 @@ testing = ["build[virtualenv] (>=1.0.3)", "covdefaults (>=2.3)", "detect-test-po [[package]] name = "tqdm" -version = "4.66.2" +version = "4.66.4" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -3650,39 +3832,20 @@ telegram = ["requests"] [[package]] name = "typer" -version = "0.7.0" +version = "0.12.3" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false -python-versions = ">=3.6" -files = [ - {file = "typer-0.7.0-py3-none-any.whl", hash = "sha256:b5e704f4e48ec263de1c0b3a2387cd405a13767d2f907f44c1a08cbad96f606d"}, - {file = "typer-0.7.0.tar.gz", hash = "sha256:ff797846578a9f2a201b53442aedeb543319466870fbe1c701eab66dd7681165"}, -] - -[package.dependencies] -click = ">=7.1.1,<9.0.0" - -[package.extras] -all = ["colorama (>=0.4.3,<0.5.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] -dev = ["autoflake (>=1.3.1,<2.0.0)", "flake8 (>=3.8.3,<4.0.0)", "pre-commit (>=2.17.0,<3.0.0)"] -doc = ["cairosvg (>=2.5.2,<3.0.0)", "mdx-include (>=1.4.1,<2.0.0)", "mkdocs (>=1.1.2,<2.0.0)", "mkdocs-material (>=8.1.4,<9.0.0)", "pillow (>=9.3.0,<10.0.0)"] -test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6.0.0)", "mypy (==0.910)", "pytest (>=4.4.0,<8.0.0)", "pytest-cov (>=2.10.0,<5.0.0)", "pytest-sugar (>=0.9.4,<0.10.0)", "pytest-xdist (>=1.32.0,<4.0.0)", "rich (>=10.11.0,<13.0.0)", "shellingham (>=1.3.0,<2.0.0)"] - -[[package]] -name = "typer-cli" -version = "0.0.13" -description = "Run Typer scripts with completion, without having to create a package, using Typer CLI." -optional = false python-versions = ">=3.7" files = [ - {file = "typer_cli-0.0.13-py3-none-any.whl", hash = "sha256:5ae0f99dce8f8f9669137a2c98eb42485cd4412e0ec225c8eb29ce8ac3378731"}, - {file = "typer_cli-0.0.13.tar.gz", hash = "sha256:f5b85764e56fb3fe835ed008ad5bc7db4961f7bcce1f1c1698ac46b6c5d9b86f"}, + {file = "typer-0.12.3-py3-none-any.whl", hash = "sha256:070d7ca53f785acbccba8e7d28b08dcd88f79f1fbda035ade0aecec71ca5c914"}, + {file = "typer-0.12.3.tar.gz", hash = "sha256:49e73131481d804288ef62598d97a1ceef3058905aa536a1134f90891ba35482"}, ] [package.dependencies] -colorama = ">=0.4.3,<=0.5.0" -shellingham = ">=1.3.2,<=1.4.0" -typer = ">=0.4.0,<=0.7.0" +click = ">=8.0.0" +rich = ">=10.11.0" +shellingham = ">=1.3.0" +typing-extensions = ">=3.7.4.3" [[package]] name = "types-python-dateutil" @@ -3697,13 +3860,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, + {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, ] [[package]] @@ -3766,13 +3929,13 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] [[package]] name = "virtualenv" -version = "20.25.1" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, - {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -3781,7 +3944,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] @@ -3842,17 +4005,17 @@ tests = ["pytest", "pytest-cov"] [[package]] name = "websocket-client" -version = "1.7.0" +version = "1.8.0" description = "WebSocket client for Python with low level API options" optional = false python-versions = ">=3.8" files = [ - {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, - {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, + {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 (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] +docs = ["Sphinx (>=6.0)", "myst-parser (>=2.0.0)", "sphinx-rtd-theme (>=1.1.0)"] optional = ["python-socks", "wsaccel"] test = ["websockets"] @@ -3969,20 +4132,20 @@ dev = ["doc8", "flake8", "flake8-import-order", "rstcheck[sphinx]", "sphinx"] [[package]] name = "zipp" -version = "3.18.1" +version = "3.18.2" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.8" files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, + {file = "zipp-3.18.2-py3-none-any.whl", hash = "sha256:dce197b859eb796242b0622af1b8beb0a722d52aa2f57133ead08edd5bf5374e"}, + {file = "zipp-3.18.2.tar.gz", hash = "sha256:6278d9ddbcfb1f1089a88fde84481528b07b0e10474e09dcfe53dad4069fa059"}, ] [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] +testing = ["big-O", "jaraco.functools", "jaraco.itertools", "jaraco.test", "more-itertools", "pytest (>=6,!=8.1.*)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [metadata] lock-version = "2.0" -python-versions = ">=3.10,<3.12" -content-hash = "124411a2f853848695af9adf07d18c32ea666412954c689edf45894400daa226" +python-versions = "^3.10" +content-hash = "00afbdf0968eb1f108d7c3f61fb0c8509f5e4914e9d89893775d2c99e3baee96" diff --git a/pyproject.toml b/pyproject.toml index fccf2ab6..007ab6bb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,18 +15,16 @@ packages = [ ] [tool.poetry.dependencies] -python = ">=3.10,<3.12" -# biolink-model = "^4.2.0" -# When 4.2.0 (or any release after 4.1.6) is released, we can remove the git dependency -biolink-model = { git = "https://github.com/biolink/biolink-model", branch = "master" } +python = "^3.10" +biolink-model = "^4.2.0" bmt = "^1.0.15" cat-merge = "0.2.1" closurizer = "0.5.1" kghub-downloader = "^0.3.2" -kgx = { git = "https://github.com/biolink/kgx", branch = "master" } # ">=2.1" -koza = ">=0.5.2" -linkml = "1.6.3" -linkml-solr = "0.1.5" # "^0.1.3" +kgx = ">=2.4.0" +koza = ">=0.6.0" +linkml = "^1.7.8" +linkml-solr = ">=0.1.5" multi-indexer = "0.0.5" # Other Dependencies botocore = "^1.31" @@ -34,18 +32,19 @@ importlib-metadata = ">=4.6.1" loguru = "*" pydantic = "^2.5" sh = "^1.14.3" -typer = "^0.7" -typer-cli = "^0.0.13" +typer = "^0.12" yamllint = "^1.35.1" -linkml-runtime = "1.6.3" +linkml-runtime = "^1.7.5" +# Remove this once cat-merge fixes its pandas dependency +pandas = "2.0.3" [tool.poetry.group.dev] optional = true [tool.poetry.group.dev.dependencies] -pytest = "^7.1.1" -mkdocs = "^1.3.0" -mkdocs-material = "^8.2.9" +pytest = "^8.1.1" +mkdocs = "^1.4" +mkdocs-material = ">=9.5" black = "^24.3" ruff = "*" @@ -57,11 +56,14 @@ requires = ["poetry-core>=1.0.0"] build-backend = "poetry.core.masonry.api" [tool.black] -line_length = 120 +line-length = 120 skip-string-normalization = true [tool.ruff] line-length = 120 ignore = [ "F541", # f-strings with no placeholders -] \ No newline at end of file + +] +[tool.ruff.lint.per-file-ignores] +"tests/**.py" = ["F811"] # redefinition of unused imports (mock_koza) diff --git a/src/monarch_ingest/__init__.py b/src/monarch_ingest/__init__.py index 32995380..a75eb4da 100644 --- a/src/monarch_ingest/__init__.py +++ b/src/monarch_ingest/__init__.py @@ -1,2 +1,3 @@ from importlib import metadata -__version__ = metadata.version("monarch_ingest") \ No newline at end of file + +__version__ = metadata.version("monarch_ingest") diff --git a/src/monarch_ingest/cli_utils.py b/src/monarch_ingest/cli_utils.py index eea60384..320722c4 100644 --- a/src/monarch_ingest/cli_utils.py +++ b/src/monarch_ingest/cli_utils.py @@ -1,7 +1,6 @@ import csv import gc import os -import pkgutil import sys import tarfile import yaml @@ -18,7 +17,7 @@ from cat_merge.merge import merge from closurizer.closurizer import add_closure from kgx.cli.cli_utils import transform as kgx_transform -from koza.cli_runner import transform_source +from koza.cli_utils import transform_source from koza.model.config.source_config import OutputFormat from linkml_runtime.utils.formatutils import camelcase @@ -192,7 +191,7 @@ def transform_phenio( "primary_knowledge_source", "aggregator_knowledge_source", "knowledge_level", - "agent_type" + "agent_type", ] ), axis=1, @@ -524,15 +523,9 @@ def do_release(dir: str = OUTPUT_DIR, kghub: bool = False): ) # index files on s3 after upload sh.multi_indexer( - *f"-v --prefix https://kghub.io/kg-monarch/ -b kg-hub-public-data -r kg-monarch -x".split( - " " - ) - ) - sh.gsutil( - *f"-q -m cp -a public-read ./index.html s3://kg-hub-public-data/kg-monarch".split( - " " - ) + *f"-v --prefix https://kghub.io/kg-monarch/ -b kg-hub-public-data -r kg-monarch -x".split(" ") ) + sh.gsutil(*f"-q -m cp -a public-read ./index.html s3://kg-hub-public-data/kg-monarch".split(" ")) logger.debug("Cleaning up files...") sh.rm(f"output/{release_ver}") diff --git a/src/monarch_ingest/ingests/alliance/gene.py b/src/monarch_ingest/ingests/alliance/gene.py index 62b9d107..2bab63fa 100644 --- a/src/monarch_ingest/ingests/alliance/gene.py +++ b/src/monarch_ingest/ingests/alliance/gene.py @@ -1,4 +1,4 @@ -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from source_translation import source_map from biolink_model.datamodel.pydanticmodel_v2 import Gene @@ -48,21 +48,18 @@ id=gene_id, symbol=row["symbol"], name=row["symbol"], - full_name=row["name"].replace("\r",""), # Replacement to remove stray carriage returns in XenBase files + full_name=row["name"].replace("\r", ""), # Replacement to remove stray carriage returns in XenBase files # No place in the schema for gene type (SO term) right now # type=row["soTermId"], in_taxon=[in_taxon], in_taxon_label=in_taxon_label, - provided_by=[source] + provided_by=[source], ) if row["basicGeneticEntity"]["crossReferences"]: - gene.xref = [ - koza_app.curie_cleaner.clean(xref["id"]) - for xref in row["basicGeneticEntity"]["crossReferences"] - ] + gene.xref = [koza_app.curie_cleaner.clean(xref["id"]) for xref in row["basicGeneticEntity"]["crossReferences"]] if "synonyms" in row["basicGeneticEntity"].keys(): # more handling for errant carriage returns - gene.synonym = [synonym.replace("\r","") for synonym in row["basicGeneticEntity"]["synonyms"] ] + gene.synonym = [synonym.replace("\r", "") for synonym in row["basicGeneticEntity"]["synonyms"]] koza_app.write(gene) diff --git a/src/monarch_ingest/ingests/alliance/gene_to_expression.py b/src/monarch_ingest/ingests/alliance/gene_to_expression.py index cb6d0dd0..137f5ebf 100644 --- a/src/monarch_ingest/ingests/alliance/gene_to_expression.py +++ b/src/monarch_ingest/ingests/alliance/gene_to_expression.py @@ -1,7 +1,6 @@ - import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from source_translation import source_map from biolink_model.datamodel.pydanticmodel_v2 import GeneToExpressionSiteAssociation, KnowledgeLevelEnum, AgentTypeEnum @@ -33,22 +32,19 @@ # but may have an UBERON term that we can use # stage_term_id = get_data(row, "whenExpressed.stageUberonSlimTerm.uberonTerm") - - publication_ids = [get_data(row, "evidence.publicationId")] xref = get_data(row, "crossReference.id") if xref: publication_ids.append(xref) - # Our current ingest policy is to first use a reported Anatomical structure term... if anatomical_entity_id: koza_app.write( GeneToExpressionSiteAssociation( id="uuid:" + str(uuid.uuid1()), subject=gene_id, - predicate='biolink:expressed_in', + predicate="biolink:expressed_in", object=anatomical_entity_id, stage_qualifier=stage_term_id, qualifiers=([get_data(row, "assay")] if get_data(row, "assay") else None), @@ -56,7 +52,7 @@ aggregator_knowledge_source=["infores:monarchinitiative", "infores:alliancegenome"], primary_knowledge_source=source, knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) ) @@ -67,7 +63,7 @@ GeneToExpressionSiteAssociation( id="uuid:" + str(uuid.uuid1()), subject=gene_id, - predicate='biolink:expressed_in', + predicate="biolink:expressed_in", object=cellular_component_id, stage_qualifier=stage_term_id, qualifiers=([get_data(row, "assay")] if get_data(row, "assay") else None), @@ -75,7 +71,7 @@ aggregator_knowledge_source=["infores:monarchinitiative", "infores:alliancegenome"], primary_knowledge_source=source, knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) ) else: @@ -85,6 +81,4 @@ ) except Exception as exc: - logger.error( - f"Alliance gene expression ingest parsing exception for data row:\n\t'{str(row)}'\n{str(exc)}" - ) + logger.error(f"Alliance gene expression ingest parsing exception for data row:\n\t'{str(row)}'\n{str(exc)}") diff --git a/src/monarch_ingest/ingests/alliance/gene_to_phenotype.py b/src/monarch_ingest/ingests/alliance/gene_to_phenotype.py index 5f69dba7..ee6a71c2 100644 --- a/src/monarch_ingest/ingests/alliance/gene_to_phenotype.py +++ b/src/monarch_ingest/ingests/alliance/gene_to_phenotype.py @@ -2,10 +2,14 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from source_translation import source_map -from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation, KnowledgeLevelEnum, AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + GeneToPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) from loguru import logger @@ -42,9 +46,8 @@ publications=[row["evidence"]["publicationId"]], aggregator_knowledge_source=["infores:monarchinitiative", "infores:alliancegenome"], primary_knowledge_source=source, - knowledge_level = KnowledgeLevelEnum.knowledge_assertion, - agent_type = AgentTypeEnum.manual_agent - + knowledge_level=KnowledgeLevelEnum.knowledge_assertion, + agent_type=AgentTypeEnum.manual_agent, ) if "conditionRelations" in row.keys() and row["conditionRelations"] is not None: diff --git a/src/monarch_ingest/ingests/alliance/publication.py b/src/monarch_ingest/ingests/alliance/publication.py index 15554230..eadadeae 100644 --- a/src/monarch_ingest/ingests/alliance/publication.py +++ b/src/monarch_ingest/ingests/alliance/publication.py @@ -1,4 +1,4 @@ -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from dateutil.parser import parse, ParserError from biolink_model.datamodel.pydanticmodel_v2 import Publication @@ -9,9 +9,7 @@ while (row := koza_app.get_row()) is not None: # TODO: remove DOI exclusion once curie regex can handle them - xrefs = [ - xref["id"] for xref in row["crossReferences"] if not xref["id"].startswith("DOI:") - ] + xrefs = [xref["id"] for xref in row["crossReferences"] if not xref["id"].startswith("DOI:")] # Parse creation date for different time formats creation_date = row["datePublished"] @@ -21,10 +19,12 @@ creation_date = None source: str - if 'MODReferenceTypes' in row and \ - len(row['MODReferenceTypes']) > 0 and \ - 'source' in row['MODReferenceTypes'][0] and \ - row['MODReferenceTypes'][0]['source'] in source_map: + if ( + 'MODReferenceTypes' in row + and len(row['MODReferenceTypes']) > 0 + and 'source' in row['MODReferenceTypes'][0] + and row['MODReferenceTypes'][0]['source'] in source_map + ): source = source_map[row['MODReferenceTypes'][0]['source']] else: # default source source = "infores:alliancegenome" @@ -36,7 +36,7 @@ xref=xrefs, type=[koza_app.translation_table.resolve_term("publication")], creation_date=creation_date, - provided_by=[source] + provided_by=[source], ) if "authors" in row.keys(): diff --git a/src/monarch_ingest/ingests/bgee/gene_to_expression.py b/src/monarch_ingest/ingests/bgee/gene_to_expression.py index e049a62f..913f5366 100644 --- a/src/monarch_ingest/ingests/bgee/gene_to_expression.py +++ b/src/monarch_ingest/ingests/bgee/gene_to_expression.py @@ -1,4 +1,4 @@ -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from monarch_ingest.ingests.bgee.gene_to_expression_utils import process_koza_source diff --git a/src/monarch_ingest/ingests/bgee/gene_to_expression_utils.py b/src/monarch_ingest/ingests/bgee/gene_to_expression_utils.py index a864d78c..36a541a8 100644 --- a/src/monarch_ingest/ingests/bgee/gene_to_expression_utils.py +++ b/src/monarch_ingest/ingests/bgee/gene_to_expression_utils.py @@ -8,17 +8,17 @@ def filter_group_by_rank(rows: List, col: str, largest_n: int = 0, smallest_n: int = 0) -> List[Dict]: """Function to filter a group of Koza rows by values largest or smallest values in column: - Get the top and/or bottom n rows ranked based on column: + Get the top and/or bottom n rows ranked based on column: - Args: - rows (List): The Koza object to read rows from. - col (str): The column to perform ranking and filtering. - largest_n (int): The number of rows to return from the largest ranking. - smallest_n (int): The number of rows to return from the smallest ranking. + Args: + rows (List): The Koza object to read rows from. + col (str): The column to perform ranking and filtering. + largest_n (int): The number of rows to return from the largest ranking. + smallest_n (int): The number of rows to return from the smallest ranking. - Returns: - List[Dict]: Returns a list of n rows in Koza dict format sorted by rank in column. + Returns: + List[Dict]: Returns a list of n rows in Koza dict format sorted by rank in column. """ df = pd.DataFrame(rows) largest_df = df.nlargest(largest_n, col, keep="first") @@ -29,11 +29,11 @@ def filter_group_by_rank(rows: List, col: str, largest_n: int = 0, smallest_n: i def write_group(rows: List, koza_app: KozaApp): """Function to write a group of Koza rows to KozaApp object output: - Write list of rows in Koza format to KozaApp output: + Write list of rows in Koza format to KozaApp output: - Args: - rows (List): A list of rows to output to KozaApp. - koza_app (KozaApp): The KozaApp to use for output of rows. + Args: + rows (List): A list of rows to output to KozaApp. + koza_app (KozaApp): The KozaApp to use for output of rows. """ for row in rows: association = GeneToExpressionSiteAssociation( @@ -44,7 +44,8 @@ def write_group(rows: List, koza_app: KozaApp): primary_knowledge_source="infores:bgee", aggregator_knowledge_source=["infores:monarchinitiative"], knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.not_provided) + agent_type=AgentTypeEnum.not_provided, + ) koza_app.write(association) @@ -52,15 +53,15 @@ def write_group(rows: List, koza_app: KozaApp): def get_row_group(koza_app: KozaApp, col: str = 'Gene ID') -> Union[List, None]: """Function to read a group of Koza rows from a KozaApp: - Get a group of rows from KozaApp grouped on column: + Get a group of rows from KozaApp grouped on column: - Args: - koza_app (KozaApp): The Koza object to read rows from. - col (str): The column to group rows based on. + Args: + koza_app (KozaApp): The Koza object to read rows from. + col (str): The column to group rows based on. - Returns: - List/None: Returns a list of rows in Koza dict format grouped by column. + Returns: + List/None: Returns a list of rows in Koza dict format grouped by column. """ if not hasattr(koza_app, 'previous_row'): koza_app.previous_row = koza_app.get_row() @@ -81,11 +82,11 @@ def get_row_group(koza_app: KozaApp, col: str = 'Gene ID') -> Union[List, None]: def process_koza_source(koza_app: KozaApp): """Function to filter a group of Koza rows by values largest or smallest values in column: - Get the top and/or bottom n rows ranked based on column: + Get the top and/or bottom n rows ranked based on column: - Args: - koza_app (KozaApp): The Koza object to process for ingest. + Args: + koza_app (KozaApp): The Koza object to process for ingest. """ - while(row_group := get_row_group(koza_app)) is not None: + while (row_group := get_row_group(koza_app)) is not None: rank_filtered_rows = filter_group_by_rank(row_group, col='Expression rank', smallest_n=10) write_group(rank_filtered_rows, koza_app) diff --git a/src/monarch_ingest/ingests/biogrid/biogrid.py b/src/monarch_ingest/ingests/biogrid/biogrid.py index 7137e9fa..914921ab 100644 --- a/src/monarch_ingest/ingests/biogrid/biogrid.py +++ b/src/monarch_ingest/ingests/biogrid/biogrid.py @@ -1,5 +1,5 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import PairwiseGeneToGeneInteraction, KnowledgeLevelEnum, AgentTypeEnum from biogrid_util import get_gene_id, get_evidence, get_publication_ids @@ -15,8 +15,12 @@ publications = get_publication_ids(row['Publication Identifiers']) # Only keep interactions using NCBIGene or UniProtKB identifiers, could also filter on taxid - if gid_a.startswith("NCBIGene:") or gid_a.startswith("UniProtKB:") \ - and gid_b.startswith("NCBIGene:") or gid_b.startswith("UniProtKB:"): + if ( + gid_a.startswith("NCBIGene:") + or gid_a.startswith("UniProtKB:") + and gid_b.startswith("NCBIGene:") + or gid_b.startswith("UniProtKB:") + ): association = PairwiseGeneToGeneInteraction( id="uuid:" + str(uuid.uuid1()), subject=gid_a, @@ -27,7 +31,7 @@ primary_knowledge_source="infores:biogrid", aggregator_knowledge_source=["infores:monarchinitiative"], knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.not_provided + agent_type=AgentTypeEnum.not_provided, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/biogrid/biogrid_util.py b/src/monarch_ingest/ingests/biogrid/biogrid_util.py index 1c670cd2..34024482 100644 --- a/src/monarch_ingest/ingests/biogrid/biogrid_util.py +++ b/src/monarch_ingest/ingests/biogrid/biogrid_util.py @@ -1,7 +1,7 @@ """ Some functions to assist parsing of BioGRID fields. """ -from sys import stderr + from typing import List, Optional from loguru import logger @@ -14,9 +14,7 @@ def get_gene_id(raw_id: str) -> str: :param raw_id: str, raw BioGRID input string (a pseudo-CURIE) :return: """ - gid = (raw_id - .replace("entrez gene/locuslink:", "NCBIGene:") - .replace("uniprot/swiss-prot:", "UniProtKB:")) + gid = raw_id.replace("entrez gene/locuslink:", "NCBIGene:").replace("uniprot/swiss-prot:", "UniProtKB:") return gid @@ -27,14 +25,14 @@ def get_gene_id(raw_id: str) -> str: "two hybrid": "ECO:0000024", "affinity chromatography technology": "ECO:0000079", "genetic interference": "ECO:0000011", - "pull down": "ECO:0000025", # not totally sure about this one + "pull down": "ECO:0000025", # not totally sure about this one "enzymatic study": "ECO:0000005", "x-ray crystallography": "ECO:0001823", "far western blotting": "ECO:0000076", "fluorescent resonance energy transfer": "ECO:0001048", - "imaging technique": "ECO:0000324", # not totally sure about this one + "imaging technique": "ECO:0000324", # not totally sure about this one "protein complementation assay": "ECO:0006256", # not totally sure about this one - "biochemical": "ECO:0000172" # not totally sure about this one + "biochemical": "ECO:0000172", # not totally sure about this one } @@ -54,11 +52,13 @@ def get_evidence(methods: str) -> Optional[List[str]]: # databaseName:identifier(methodName) method = method.rstrip(")").split('(')[-1] if method not in EVIDENCE_CODE_MAPPINGS.keys(): - err_msg = f"Unknown interaction detection method '{method}'. " +\ - "Assigning default code ECO:0000006 == 'experimental evidence', the ECO root." + err_msg = ( + f"Unknown interaction detection method '{method}'. " + + "Assigning default code ECO:0000006 == 'experimental evidence', the ECO root." + ) logger.warning(err_msg) EVIDENCE_CODE_MAPPINGS[method] = "ECO:0000006" - + evidence_codes.append(EVIDENCE_CODE_MAPPINGS[method]) return evidence_codes if evidence_codes else None diff --git a/src/monarch_ingest/ingests/ctd/chemical_to_disease.py b/src/monarch_ingest/ingests/ctd/chemical_to_disease.py index ef4821a4..a053bd0a 100644 --- a/src/monarch_ingest/ingests/ctd/chemical_to_disease.py +++ b/src/monarch_ingest/ingests/ctd/chemical_to_disease.py @@ -1,9 +1,12 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import ChemicalToDiseaseOrPhenotypicFeatureAssociation, \ - KnowledgeLevelEnum, AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + ChemicalToDiseaseOrPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) from monarch_ingest.constants import BIOLINK_TREATS_OR_APPLIED_OR_STUDIED_TO_TREAT koza_app = get_koza_app("ctd_chemical_to_disease") @@ -28,7 +31,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:ctd", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/dictybase/gene.py b/src/monarch_ingest/ingests/dictybase/gene.py index 16549bc7..a52b2bf9 100644 --- a/src/monarch_ingest/ingests/dictybase/gene.py +++ b/src/monarch_ingest/ingests/dictybase/gene.py @@ -1,4 +1,4 @@ -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import Gene @@ -9,12 +9,11 @@ in_taxon_label = taxon_labels[in_taxon]['label'] if in_taxon in taxon_labels else "Dictyostelium discoideum" while (row := koza_app.get_row()) is not None: - + synonyms = [] if row['Synonyms'] is not None: synonyms = row['Synonyms'].split(", ") - gene = Gene( id='dictyBase:' + row['GENE ID'], symbol=row['Gene Name'], @@ -23,7 +22,7 @@ synonym=synonyms, in_taxon=[in_taxon], in_taxon_label=in_taxon_label, - provided_by=["infores:dictybase"] + provided_by=["infores:dictybase"], ) koza_app.write(gene) diff --git a/src/monarch_ingest/ingests/dictybase/gene_to_phenotype.py b/src/monarch_ingest/ingests/dictybase/gene_to_phenotype.py index b4036947..6f0d7f05 100644 --- a/src/monarch_ingest/ingests/dictybase/gene_to_phenotype.py +++ b/src/monarch_ingest/ingests/dictybase/gene_to_phenotype.py @@ -1,11 +1,13 @@ import uuid -from typing import Optional, Tuple -from koza.cli_runner import get_koza_app -from monarch_ingest.ingests.dictybase.utils import parse_gene_id, parse_phenotypes +from koza.cli_utils import get_koza_app +from monarch_ingest.ingests.dictybase.utils import parse_phenotypes -from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation, KnowledgeLevelEnum, \ - AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + GeneToPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) koza_app = get_koza_app("dictybase_gene_to_phenotype") @@ -32,7 +34,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:dictybase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/dictybase/utils.py b/src/monarch_ingest/ingests/dictybase/utils.py index 13f00b6c..89ca872c 100644 --- a/src/monarch_ingest/ingests/dictybase/utils.py +++ b/src/monarch_ingest/ingests/dictybase/utils.py @@ -1,6 +1,7 @@ """ A few Dictybase parse utility functions """ + from typing import Optional, Tuple, Dict, List diff --git a/src/monarch_ingest/ingests/flybase/publication_to_gene.py b/src/monarch_ingest/ingests/flybase/publication_to_gene.py index 932f81ee..35209c4b 100644 --- a/src/monarch_ingest/ingests/flybase/publication_to_gene.py +++ b/src/monarch_ingest/ingests/flybase/publication_to_gene.py @@ -1,9 +1,12 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation, AgentTypeEnum, \ - KnowledgeLevelEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + InformationContentEntityToNamedThingAssociation, + AgentTypeEnum, + KnowledgeLevelEnum, +) koza_app = get_koza_app("flybase_publication_to_gene") @@ -26,7 +29,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:flybase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/go/annotation.py b/src/monarch_ingest/ingests/go/annotation.py index 3c85ca91..b73bbb02 100644 --- a/src/monarch_ingest/ingests/go/annotation.py +++ b/src/monarch_ingest/ingests/go/annotation.py @@ -4,16 +4,17 @@ Gene to GO term Associations (to MolecularActivity, BiologicalProcess and CellularComponent) """ + import uuid from biolink_model.datamodel.pydanticmodel_v2 import KnowledgeLevelEnum, AgentTypeEnum -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from monarch_ingest.ingests.go.annotation_utils import ( parse_identifiers, get_biolink_classes, lookup_predicate, - get_infores + get_infores, ) from loguru import logger @@ -34,9 +35,7 @@ # 'C' == cellular_component - child of GO:0005575 go_aspect: str = row['Aspect'] if not (go_aspect and go_aspect.upper() in ["F", "P", "C"]): - logger.warning( - f"GAF Aspect '{str(go_aspect)}' is empty or unrecognized? Skipping record" - ) + logger.warning(f"GAF Aspect '{str(go_aspect)}' is empty or unrecognized? Skipping record") else: # Decipher the GO Evidence Code @@ -47,9 +46,7 @@ eco_term = koza_app.translation_table.local_table[evidence_code] if not eco_term: - logger.warning( - f"GAF Evidence Code '{str(evidence_code)}' is empty or unrecognized? Tagging as 'ND'" - ) + logger.warning(f"GAF Evidence Code '{str(evidence_code)}' is empty or unrecognized? Tagging as 'ND'") eco_term = "ECO:0000307" # Association predicate is normally NOT negated @@ -85,9 +82,7 @@ else: # If qualifier missing, assign a default predicate # a.k.a. predicate based on specified GO Aspect type - logger.error( - "GAF record is missing its qualifier...assigning default qualifier as per GO term Aspect" - ) + logger.error("GAF record is missing its qualifier...assigning default qualifier as per GO term Aspect") if go_aspect == "F": predicate = "enables" elif go_aspect == "P": @@ -96,16 +91,12 @@ predicate = "located_in" if not predicate: - logger.error( - f"GAF Qualifier '{str(qualifier)}' is unrecognized? Skipping the record..." - ) + logger.error(f"GAF Qualifier '{str(qualifier)}' is unrecognized? Skipping the record...") else: # Retrieve the GO aspect related NamedThing category-associated 'node' and Association 'edge' classes - go_concept_node_class, gene_go_term_association_class = get_biolink_classes( - go_aspect - ) + go_concept_node_class, gene_go_term_association_class = get_biolink_classes(go_aspect) # actual primary knowledge source of the GOA knowledge statement assigned_by = get_infores(row['Assigned_By']) @@ -122,7 +113,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source=assigned_by, knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) # Write the captured Association out diff --git a/src/monarch_ingest/ingests/go/annotation_utils.py b/src/monarch_ingest/ingests/go/annotation_utils.py index f4b8a504..fd9d3c9e 100644 --- a/src/monarch_ingest/ingests/go/annotation_utils.py +++ b/src/monarch_ingest/ingests/go/annotation_utils.py @@ -1,6 +1,7 @@ """ Some Gene Ontology Annotation ingest utility functions. """ + from re import sub, IGNORECASE, compile, Pattern from typing import Optional, Tuple, List, Dict @@ -144,6 +145,7 @@ def get_biolink_classes(go_aspect: str) -> Tuple: """ return _biolink_class_by_go_aspect[go_aspect.upper()] + # # See comment below # diff --git a/src/monarch_ingest/ingests/hgnc/gene.py b/src/monarch_ingest/ingests/hgnc/gene.py index 9f656a56..1504ce98 100644 --- a/src/monarch_ingest/ingests/hgnc/gene.py +++ b/src/monarch_ingest/ingests/hgnc/gene.py @@ -1,4 +1,4 @@ -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import Gene @@ -6,7 +6,7 @@ taxon_labels = koza_app.get_map("taxon-labels") while (row := koza_app.get_row()) is not None: - + xref_list = [] if row['ensembl_gene_id']: xref_list.append('ENSEMBL:' + row['ensembl_gene_id']) @@ -17,7 +17,6 @@ else: xref_list.append('OMIM:' + row['omim_id']) - synonyms_list = ( row["alias_symbol"].split("|") + row["alias_name"].split("|") @@ -37,7 +36,7 @@ synonym=synonyms_list, in_taxon=[in_taxon], in_taxon_label=in_taxon_label, - provided_by=["infores:hgnc"] + provided_by=["infores:hgnc"], ) # Excluding pub to gene associations for now diff --git a/src/monarch_ingest/ingests/hpoa/disease_mode_of_inheritance.py b/src/monarch_ingest/ingests/hpoa/disease_mode_of_inheritance.py index b40b85a3..0b3d56ba 100644 --- a/src/monarch_ingest/ingests/hpoa/disease_mode_of_inheritance.py +++ b/src/monarch_ingest/ingests/hpoa/disease_mode_of_inheritance.py @@ -19,14 +19,18 @@ --source src/monarch_ingest/ingests/hpoa/disease_mode_of_inheritance.yaml \ --output-format tsv """ + from typing import List import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation, \ - KnowledgeLevelEnum, AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) from loguru import logger @@ -34,48 +38,48 @@ while (row := koza_app.get_row()) is not None: - # Object: Actually a Genetic Inheritance (as should be specified by a suitable HPO term) - # TODO: perhaps load the proper (Genetic Inheritance) node concepts into the Monarch Graph (simply as Ontology terms?). - hpo_id = row["hpo_id"] + # Object: Actually a Genetic Inheritance (as should be specified by a suitable HPO term) + # TODO: perhaps load the proper (Genetic Inheritance) node concepts into the Monarch Graph (simply as Ontology terms?). + hpo_id = row["hpo_id"] - # We ignore records that don't map to a known HPO term for Genetic Inheritance - # (as recorded in the locally bound 'hpoa-modes-of-inheritance' table) - if hpo_id and hpo_id in koza_app.translation_table.local_table: + # We ignore records that don't map to a known HPO term for Genetic Inheritance + # (as recorded in the locally bound 'hpoa-modes-of-inheritance' table) + if hpo_id and hpo_id in koza_app.translation_table.local_table: - # Nodes + # Nodes - # Subject: Disease - disease_id = row["database_id"] + # Subject: Disease + disease_id = row["database_id"] - # Predicate (canonical direction) - predicate = "biolink:has_mode_of_inheritance" + # Predicate (canonical direction) + predicate = "biolink:has_mode_of_inheritance" - # Annotations + # Annotations - # Three letter ECO code to ECO class based on HPO documentation - evidence_curie = koza_app.translation_table.resolve_term(row["evidence"]) + # Three letter ECO code to ECO class based on HPO documentation + evidence_curie = koza_app.translation_table.resolve_term(row["evidence"]) - # Publications - publications_field: str = row["reference"] - publications: List[str] = publications_field.split(";") + # Publications + publications_field: str = row["reference"] + publications: List[str] = publications_field.split(";") - # Filter out some weird NCBI web endpoints - publications = [p for p in publications if not p.startswith("http")] + # Filter out some weird NCBI web endpoints + publications = [p for p in publications if not p.startswith("http")] - # Association/Edge - association = DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation( - id="uuid:" + str(uuid.uuid1()), - subject=disease_id, - predicate=predicate, - object=hpo_id, - publications=publications, - has_evidence=[evidence_curie], - aggregator_knowledge_source=["infores:monarchinitiative"], - primary_knowledge_source="infores:hpo-annotations", - knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent - ) - koza_app.write(association) + # Association/Edge + association = DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation( + id="uuid:" + str(uuid.uuid1()), + subject=disease_id, + predicate=predicate, + object=hpo_id, + publications=publications, + has_evidence=[evidence_curie], + aggregator_knowledge_source=["infores:monarchinitiative"], + primary_knowledge_source="infores:hpo-annotations", + knowledge_level=KnowledgeLevelEnum.knowledge_assertion, + agent_type=AgentTypeEnum.manual_agent, + ) + koza_app.write(association) - else: - logger.warning(f"HPOA ID field value '{str(hpo_id)}' is missing or an invalid disease mode of inheritance?") + else: + logger.warning(f"HPOA ID field value '{str(hpo_id)}' is missing or an invalid disease mode of inheritance?") diff --git a/src/monarch_ingest/ingests/hpoa/disease_to_phenotype.py b/src/monarch_ingest/ingests/hpoa/disease_to_phenotype.py index 974aefd3..f10acacf 100644 --- a/src/monarch_ingest/ingests/hpoa/disease_to_phenotype.py +++ b/src/monarch_ingest/ingests/hpoa/disease_to_phenotype.py @@ -23,17 +23,20 @@ --source src/monarch_ingest/ingests/hpoa/disease_phenotype.yaml \ --output-format tsv """ -from typing import Optional, List, Tuple + +from typing import Optional, List import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import DiseaseToPhenotypicFeatureAssociation, KnowledgeLevelEnum, \ - AgentTypeEnum -from monarch_ingest.ingests.hpoa.hpoa_utils import phenotype_frequency_to_hpo_term, FrequencyHpoTerm, Frequency +from biolink_model.datamodel.pydanticmodel_v2 import ( + DiseaseToPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) +from monarch_ingest.ingests.hpoa.hpoa_utils import phenotype_frequency_to_hpo_term, Frequency -from loguru import logger koza_app = get_koza_app("hpoa_disease_to_phenotype") @@ -63,9 +66,7 @@ # female -> PATO:0000383 # male -> PATO:0000384 sex: Optional[str] = row["sex"] # may be translated by local table - sex_qualifier = ( - koza_app.translation_table.resolve_term(sex) if sex else None - ) + sex_qualifier = koza_app.translation_table.resolve_term(sex) if sex else None onset = row["onset"] @@ -77,13 +78,12 @@ publications: List[str] = publications_field.split(";") # don't populate the reference with the database_id / disease id - publications = [p for p in publications - if not p == row["database_id"]] + publications = [p for p in publications if not p == row["database_id"]] # Association/Edge association = DiseaseToPhenotypicFeatureAssociation( id="uuid:" + str(uuid.uuid1()), - subject=disease_id.replace("ORPHA:", "Orphanet:"), # match `Orphanet` as used in Mondo SSSOM + subject=disease_id.replace("ORPHA:", "Orphanet:"), # match `Orphanet` as used in Mondo SSSOM predicate=predicate, negated=negated, object=hpo_id, @@ -99,7 +99,6 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:hpo-annotations", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent - + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/hpoa/gene_to_disease.py b/src/monarch_ingest/ingests/hpoa/gene_to_disease.py index 69a52826..54f8cc19 100644 --- a/src/monarch_ingest/ingests/hpoa/gene_to_disease.py +++ b/src/monarch_ingest/ingests/hpoa/gene_to_disease.py @@ -1,8 +1,12 @@ import uuid -from biolink_model.datamodel.pydanticmodel_v2 import GeneToDiseaseAssociation, CausalGeneToDiseaseAssociation, \ - CorrelatedGeneToDiseaseAssociation, KnowledgeLevelEnum, AgentTypeEnum -from koza.cli_runner import get_koza_app +from biolink_model.datamodel.pydanticmodel_v2 import ( + CausalGeneToDiseaseAssociation, + CorrelatedGeneToDiseaseAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) +from koza.cli_utils import get_koza_app from monarch_ingest.constants import INFORES_MONARCHINITIATIVE, BIOLINK_CAUSES from monarch_ingest.ingests.hpoa.hpoa_utils import get_knowledge_sources, get_predicate @@ -16,7 +20,9 @@ predicate = get_predicate(row["association_type"]) - primary_knowledge_source, aggregator_knowledge_source = get_knowledge_sources(row["source"], INFORES_MONARCHINITIATIVE) + primary_knowledge_source, aggregator_knowledge_source = get_knowledge_sources( + row["source"], INFORES_MONARCHINITIATIVE + ) if predicate == BIOLINK_CAUSES: association_class = CausalGeneToDiseaseAssociation @@ -31,7 +37,7 @@ primary_knowledge_source=primary_knowledge_source, aggregator_knowledge_source=aggregator_knowledge_source, knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/hpoa/gene_to_phenotype.py b/src/monarch_ingest/ingests/hpoa/gene_to_phenotype.py index ffa820c2..1ba53908 100644 --- a/src/monarch_ingest/ingests/hpoa/gene_to_phenotype.py +++ b/src/monarch_ingest/ingests/hpoa/gene_to_phenotype.py @@ -4,12 +4,16 @@ --source src/monarch_ingest/ingests/hpoa/gene_to_phenotype.yaml \ --output-format tsv """ + import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation, KnowledgeLevelEnum, \ - AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + GeneToPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) koza_app = get_koza_app("hpoa_gene_to_phenotype") diff --git a/src/monarch_ingest/ingests/hpoa/hpoa_utils.py b/src/monarch_ingest/ingests/hpoa/hpoa_utils.py index 7439f02d..6e2efbf7 100644 --- a/src/monarch_ingest/ingests/hpoa/hpoa_utils.py +++ b/src/monarch_ingest/ingests/hpoa/hpoa_utils.py @@ -1,14 +1,21 @@ """ HPOA processing utility methods """ -from typing import Optional, List, Dict, Tuple, NamedTuple + +from typing import Optional, List, Dict from loguru import logger from pydantic import BaseModel -from monarch_ingest.constants import INFORES_MEDGEN, INFORES_OMIM, INFORES_ORPHANET, BIOLINK_CAUSES, \ - BIOLINK_CONTRIBUTES_TO, BIOLINK_GENE_ASSOCIATED_WITH_CONDITION +from monarch_ingest.constants import ( + INFORES_MEDGEN, + INFORES_OMIM, + INFORES_ORPHANET, + BIOLINK_CAUSES, + BIOLINK_CONTRIBUTES_TO, + BIOLINK_GENE_ASSOCIATED_WITH_CONDITION, +) class FrequencyHpoTerm(BaseModel): @@ -17,6 +24,7 @@ class FrequencyHpoTerm(BaseModel): lower: float upper: float + class Frequency(BaseModel): frequency_qualifier: Optional[str] = None has_percentage: Optional[float] = None @@ -25,14 +33,27 @@ class Frequency(BaseModel): has_total: Optional[int] = None # convert the fields above to pydantic field declarations + # HPO "HP:0040279": representing the frequency of phenotypic abnormalities within a patient cohort. hpo_term_to_frequency: Dict = { - "HP:0040280": FrequencyHpoTerm(curie="HP:0040280", name="Obligate", lower=100.0, upper=100.0), # Always present,i.e. in 100% of the cases. - "HP:0040281": FrequencyHpoTerm(curie="HP:0040281", name="Very frequent", lower=80.0, upper=99.0), # Present in 80% to 99% of the cases. - "HP:0040282": FrequencyHpoTerm(curie="HP:0040282", name="Frequent", lower=30.0, upper=79.0), # Present in 30% to 79% of the cases. - "HP:0040283": FrequencyHpoTerm(curie="HP:0040283", name="Occasional", lower=5.0, upper=29.0), # Present in 5% to 29% of the cases. - "HP:0040284": FrequencyHpoTerm(curie="HP:0040284", name="Very rare", lower=1.0, upper=4.0), # Present in 1% to 4% of the cases. - "HP:0040285": FrequencyHpoTerm(curie="HP:0040285", name="Excluded", lower=0.0, upper=0.0) # Present in 0% of the cases. + "HP:0040280": FrequencyHpoTerm( + curie="HP:0040280", name="Obligate", lower=100.0, upper=100.0 + ), # Always present,i.e. in 100% of the cases. + "HP:0040281": FrequencyHpoTerm( + curie="HP:0040281", name="Very frequent", lower=80.0, upper=99.0 + ), # Present in 80% to 99% of the cases. + "HP:0040282": FrequencyHpoTerm( + curie="HP:0040282", name="Frequent", lower=30.0, upper=79.0 + ), # Present in 30% to 79% of the cases. + "HP:0040283": FrequencyHpoTerm( + curie="HP:0040283", name="Occasional", lower=5.0, upper=29.0 + ), # Present in 5% to 29% of the cases. + "HP:0040284": FrequencyHpoTerm( + curie="HP:0040284", name="Very rare", lower=1.0, upper=4.0 + ), # Present in 1% to 4% of the cases. + "HP:0040285": FrequencyHpoTerm( + curie="HP:0040285", name="Excluded", lower=0.0, upper=0.0 + ), # Present in 0% of the cases. } @@ -57,21 +78,19 @@ def map_percentage_frequency_to_hpo_term(percentage_or_quotient: float) -> Optio return None -def phenotype_frequency_to_hpo_term( - frequency_field: Optional[str] -) -> Frequency: +def phenotype_frequency_to_hpo_term(frequency_field: Optional[str]) -> Frequency: """ -Maps a raw frequency field onto HPO, for consistency. This is needed since the **phenotypes.hpoa** -file field #8 which tracks phenotypic frequency, has a variable values. There are three allowed options for this field: + Maps a raw frequency field onto HPO, for consistency. This is needed since the **phenotypes.hpoa** + file field #8 which tracks phenotypic frequency, has a variable values. There are three allowed options for this field: -1. A term-id from the HPO-sub-ontology below the term “Frequency” (HP:0040279). (since December 2016 ; before was a mixture of values). The terms for frequency are in alignment with Orphanet; -2. A percentage value such as 17%. -3. A count of patients affected within a cohort. For instance, 7/13 would indicate that 7 of the 13 patients with the specified disease were found to have the phenotypic abnormality referred to by the HPO term in question in the study referred to by the DB_Reference; + 1. A term-id from the HPO-sub-ontology below the term “Frequency” (HP:0040279). (since December 2016 ; before was a mixture of values). The terms for frequency are in alignment with Orphanet; + 2. A percentage value such as 17%. + 3. A count of patients affected within a cohort. For instance, 7/13 would indicate that 7 of the 13 patients with the specified disease were found to have the phenotypic abnormality referred to by the HPO term in question in the study referred to by the DB_Reference; - :param frequency_field: str, raw frequency value in one of the three above forms - :return: Optional[FrequencyHpoTerm, float, float], raw frequency mapped to its HPO term, quotient or percentage - respectively (as applicable); return None if unmappable; - percentage and/or quotient returned are also None, if not applicable + :param frequency_field: str, raw frequency value in one of the three above forms + :return: Optional[FrequencyHpoTerm, float, float], raw frequency mapped to its HPO term, quotient or percentage + respectively (as applicable); return None if unmappable; + percentage and/or quotient returned are also None, if not applicable """ hpo_term: Optional[FrequencyHpoTerm] = None quotient: Optional[float] = None @@ -104,11 +123,13 @@ def phenotype_frequency_to_hpo_term( # may be None, if original field was empty or has an invalid value return Frequency() - return Frequency(frequency_qualifier=hpo_term.curie if hpo_term else None, - has_percentage=percentage, - has_quotient=quotient, - has_count=has_count, - has_total=has_total) + return Frequency( + frequency_qualifier=hpo_term.curie if hpo_term else None, + has_percentage=percentage, + has_quotient=quotient, + has_count=has_count, + has_total=has_total, + ) def get_knowledge_sources(original_source: str, additional_source: str) -> (str, List[str]): diff --git a/src/monarch_ingest/ingests/mgi/publication_to_gene.py b/src/monarch_ingest/ingests/mgi/publication_to_gene.py index fce8228c..75d52311 100644 --- a/src/monarch_ingest/ingests/mgi/publication_to_gene.py +++ b/src/monarch_ingest/ingests/mgi/publication_to_gene.py @@ -1,15 +1,18 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation, AgentTypeEnum, \ - KnowledgeLevelEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + InformationContentEntityToNamedThingAssociation, + AgentTypeEnum, + KnowledgeLevelEnum, +) koza_app = get_koza_app("mgi_publication_to_gene") while (row := koza_app.get_row()) is not None: - gene_id=row["MGI Marker Accession ID"] + gene_id = row["MGI Marker Accession ID"] relation = koza_app.translation_table.resolve_term("mentions") @@ -27,7 +30,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:mgi", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/ncbi/gene.py b/src/monarch_ingest/ingests/ncbi/gene.py index 9810c9b7..0b7f42c4 100644 --- a/src/monarch_ingest/ingests/ncbi/gene.py +++ b/src/monarch_ingest/ingests/ncbi/gene.py @@ -1,4 +1,4 @@ -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import Gene @@ -6,15 +6,12 @@ taxon_labels = koza_app.get_map("taxon-labels") # If a taxon label we need isn't in phenio's NCBITaxon subset, we can add it here -extra_taxon_labels = { - 'NCBITaxon:227321': 'Dictyostelium discoideum' -} +extra_taxon_labels = {'NCBITaxon:227321': 'Dictyostelium discoideum'} while (row := koza_app.get_row()) is not None: in_taxon = 'NCBITaxon:' + row["tax_id"] - if in_taxon in taxon_labels: in_taxon_label = taxon_labels[in_taxon]['label'] elif in_taxon in extra_taxon_labels: @@ -30,7 +27,7 @@ description=row["description"], in_taxon=[in_taxon], in_taxon_label=in_taxon_label, - provided_by=["infores:ncbi-gene"] + provided_by=["infores:ncbi-gene"], ) koza_app.write(gene) diff --git a/src/monarch_ingest/ingests/panther/genome_orthologs.py b/src/monarch_ingest/ingests/panther/genome_orthologs.py index c3990906..7dccdca7 100644 --- a/src/monarch_ingest/ingests/panther/genome_orthologs.py +++ b/src/monarch_ingest/ingests/panther/genome_orthologs.py @@ -4,20 +4,18 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import GeneToGeneHomologyAssociation, KnowledgeLevelEnum, AgentTypeEnum from monarch_ingest.ingests.panther.orthology_utils import parse_gene, ncbitaxon_catalog -from loguru import logger koza_app = get_koza_app("panther_genome_orthologs") while (row := koza_app.get_row()) is not None: - if row['Gene'].split("|")[0] in ncbitaxon_catalog \ - and row['Ortholog'].split("|")[0] in ncbitaxon_catalog: + if row['Gene'].split("|")[0] in ncbitaxon_catalog and row['Ortholog'].split("|")[0] in ncbitaxon_catalog: try: # TODO: we don't current capture the taxon of the subject gene # nor the object ortholog. Maybe as a qualifier in Biolink 3.0? @@ -54,13 +52,13 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:panther", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.not_provided + agent_type=AgentTypeEnum.not_provided, ) # Write the captured Association out koza_app.write(association) - - except RuntimeError as rte: + + except RuntimeError: # Skip the row - not of interest or error # logger.debug(f"{str(rte)} in data row:\n\t'{str(row)}'") pass diff --git a/src/monarch_ingest/ingests/panther/orthology_utils.py b/src/monarch_ingest/ingests/panther/orthology_utils.py index e78818da..9b13d11c 100644 --- a/src/monarch_ingest/ingests/panther/orthology_utils.py +++ b/src/monarch_ingest/ingests/panther/orthology_utils.py @@ -1,12 +1,14 @@ """ Utility functions for Panther Orthology data processing """ + # from sys import stderr # from os import sep, remove # from tarfile import (open as tar_open, ReadError, CompressionError, TarInfo) # from datetime import datetime -from typing import Optional, Tuple#, List +from typing import Optional, Tuple # , List + # from io import TextIOWrapper # from loguru import logger @@ -16,13 +18,13 @@ # of species - just starting with the STRING DB list + Dictyostelium "HUMAN": "9606", "MOUSE": "10090", - "CANLF": "9615", # Canis lupus familiaris - domestic dog + "CANLF": "9615", # Canis lupus familiaris - domestic dog # "FELCA": "9685", # Felis catus - domestic cat - "BOVIN": "9913", # Bos taurus - cow - "PIG": "9823", # Sus scrofa - pig + "BOVIN": "9913", # Bos taurus - cow + "PIG": "9823", # Sus scrofa - pig "RAT": "10116", "CHICK": "9031", - "XENTR": "8364", # Xenopus tropicalis - tropical clawed frog + "XENTR": "8364", # Xenopus tropicalis - tropical clawed frog "DANRE": "7955", "DROME": "7227", "CAEEL": "6239", @@ -32,6 +34,7 @@ "YEAST": "4932", } + def ncbitaxon_by_name(species_tag: str) -> Optional[str]: """ Retrieves the NCBI Taxon ID of a given species, only if we are interested in it... @@ -52,10 +55,10 @@ def ncbitaxon_by_name(species_tag: str) -> Optional[str]: "EnsemblGenome": "ENSEMBL", # TODO: review and fix this later? "PomBase": "PomBase", "WormBase": "WB", # Wormbase supports 'WormBase:' but alliancegenome.org and identifiers.org supports 'WB:' - "GeneID": "NCBIGene", # seems to be Entrez Gene ID => map onto the NCBIGene: namespace - "Gene": None, # seems to be the gene symbol - we ignore it for now? - "Gene_ORFName": None, # is the gene orf name from a transcript in Uniprot - we ignore it for now? - "Gene_OrderedLocusName": None # is a gene ordered locus name - we ignore it for now? + "GeneID": "NCBIGene", # seems to be Entrez Gene ID => map onto the NCBIGene: namespace + "Gene": None, # seems to be the gene symbol - we ignore it for now? + "Gene_ORFName": None, # is the gene orf name from a transcript in Uniprot - we ignore it for now? + "Gene_OrderedLocusName": None, # is a gene ordered locus name - we ignore it for now? } @@ -96,9 +99,7 @@ def parse_gene_id(gene_id_spec: str) -> Optional[str]: # trapped by the RuntimeError below should answer this...) return f"{spec_part[1]}:{spec_part[2]}" else: - raise RuntimeError( - f"parse_gene_id(): Error parsing '{str(gene_id_spec)}'? Ignoring..." - ) + raise RuntimeError(f"parse_gene_id(): Error parsing '{str(gene_id_spec)}'? Ignoring...") def parse_gene(gene_entry: str) -> Optional[Tuple[str, str]]: @@ -114,9 +115,7 @@ def parse_gene(gene_entry: str) -> Optional[Tuple[str, str]]: try: species, gene_spec, _ = gene_entry.split("|") except ValueError: - raise RuntimeError( - f"parse_gene(): Gene entry field '{str(gene_entry)}' has incorrect format. Ignoring..." - ) + raise RuntimeError(f"parse_gene(): Gene entry field '{str(gene_entry)}' has incorrect format. Ignoring...") # get the NCBI Taxonomic identifier ncbitaxon_id = ncbitaxon_by_name(species) diff --git a/src/monarch_ingest/ingests/pombase/gene.py b/src/monarch_ingest/ingests/pombase/gene.py index 7d107854..6761c71f 100644 --- a/src/monarch_ingest/ingests/pombase/gene.py +++ b/src/monarch_ingest/ingests/pombase/gene.py @@ -1,5 +1,6 @@ from biolink_model.datamodel.pydanticmodel_v2 import Gene -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app + # from loguru import logger diff --git a/src/monarch_ingest/ingests/pombase/gene_to_phenotype.py b/src/monarch_ingest/ingests/pombase/gene_to_phenotype.py index 6cb87185..ace62407 100644 --- a/src/monarch_ingest/ingests/pombase/gene_to_phenotype.py +++ b/src/monarch_ingest/ingests/pombase/gene_to_phenotype.py @@ -1,9 +1,12 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation, KnowledgeLevelEnum, \ - AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + GeneToPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) koza_app = get_koza_app("pombase_gene_to_phenotype") @@ -22,7 +25,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:pombase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) if row["Condition"]: diff --git a/src/monarch_ingest/ingests/reactome/chemical_to_pathway.py b/src/monarch_ingest/ingests/reactome/chemical_to_pathway.py index eb1714af..6e08a782 100644 --- a/src/monarch_ingest/ingests/reactome/chemical_to_pathway.py +++ b/src/monarch_ingest/ingests/reactome/chemical_to_pathway.py @@ -1,5 +1,5 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import ChemicalToPathwayAssociation, AgentTypeEnum, KnowledgeLevelEnum koza_app = get_koza_app("reactome_chemical_to_pathway") @@ -31,7 +31,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:reactome", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.not_provided + agent_type=AgentTypeEnum.not_provided, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/reactome/gene_to_pathway.py b/src/monarch_ingest/ingests/reactome/gene_to_pathway.py index 00e9e80a..825c32f4 100644 --- a/src/monarch_ingest/ingests/reactome/gene_to_pathway.py +++ b/src/monarch_ingest/ingests/reactome/gene_to_pathway.py @@ -1,5 +1,5 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import GeneToPathwayAssociation, AgentTypeEnum, KnowledgeLevelEnum @@ -32,7 +32,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:reactome", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.not_provided + agent_type=AgentTypeEnum.not_provided, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/reactome/pathway.py b/src/monarch_ingest/ingests/reactome/pathway.py index 2950b867..efc25842 100644 --- a/src/monarch_ingest/ingests/reactome/pathway.py +++ b/src/monarch_ingest/ingests/reactome/pathway.py @@ -1,5 +1,5 @@ from biolink_model.datamodel.pydanticmodel_v2 import Pathway -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app koza_app = get_koza_app('reactome_pathway') @@ -21,10 +21,9 @@ name=row["Name"], in_taxon=[taxon_id], provided_by=["infores:reactome"], - # the identifier is duplicated here as a xref to become visible as # an external link in the entity display page of the Monarch App - xref=[pathway_id] + xref=[pathway_id], ) koza_app.write(pathway) diff --git a/src/monarch_ingest/ingests/rgd/publication_to_gene.py b/src/monarch_ingest/ingests/rgd/publication_to_gene.py index cea56e2d..3825f6ce 100644 --- a/src/monarch_ingest/ingests/rgd/publication_to_gene.py +++ b/src/monarch_ingest/ingests/rgd/publication_to_gene.py @@ -1,9 +1,12 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation, AgentTypeEnum, \ - KnowledgeLevelEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + InformationContentEntityToNamedThingAssociation, + AgentTypeEnum, + KnowledgeLevelEnum, +) koza_app = get_koza_app("rgd_publication_to_gene") @@ -12,7 +15,7 @@ if not row["CURATED_REF_PUBMED_ID"]: koza_app.next_row() - gene_id='RGD:' + row["GENE_RGD_ID"] + gene_id = 'RGD:' + row["GENE_RGD_ID"] id_list = row["CURATED_REF_PUBMED_ID"].split(';') for each_id in id_list: @@ -27,7 +30,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:rgd", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/sgd/publication_to_gene.py b/src/monarch_ingest/ingests/sgd/publication_to_gene.py index 1ad07211..a5c2face 100644 --- a/src/monarch_ingest/ingests/sgd/publication_to_gene.py +++ b/src/monarch_ingest/ingests/sgd/publication_to_gene.py @@ -1,9 +1,12 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation, AgentTypeEnum, \ - KnowledgeLevelEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + InformationContentEntityToNamedThingAssociation, + AgentTypeEnum, + KnowledgeLevelEnum, +) koza_app = get_koza_app("sgd_publication_to_gene") @@ -21,7 +24,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:sgd", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/string/protein_links.py b/src/monarch_ingest/ingests/string/protein_links.py index e65671e2..762b482f 100644 --- a/src/monarch_ingest/ingests/string/protein_links.py +++ b/src/monarch_ingest/ingests/string/protein_links.py @@ -1,7 +1,7 @@ import uuid -from typing import Optional, List +from typing import List -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import PairwiseGeneToGeneInteraction, KnowledgeLevelEnum, AgentTypeEnum @@ -13,11 +13,13 @@ seen_rows = set([]) + def sorted_id_pair(row) -> str: sorted([row['protein1'], row['protein2']]) + while (row := koza_app.get_row()) is not None and sorted_id_pair(row) not in seen_rows: - + entrez_2_string = koza_app.get_map('entrez_2_string') pid_a = row['protein1'] @@ -51,14 +53,12 @@ def sorted_id_pair(row) -> str: subject=gene_id_a, object=gene_id_b, predicate="biolink:interacts_with", - # sanity check: set to 'None' if empty list has_evidence=has_evidence if has_evidence else None, - aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:string", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.not_provided + agent_type=AgentTypeEnum.not_provided, ) seen_rows.add(sorted_id_pair(row)) entities.append(association) diff --git a/src/monarch_ingest/ingests/string/string_utils.py b/src/monarch_ingest/ingests/string/string_utils.py index 5bbc7b94..88ecd1e6 100644 --- a/src/monarch_ingest/ingests/string/string_utils.py +++ b/src/monarch_ingest/ingests/string/string_utils.py @@ -46,7 +46,7 @@ "coexpression": "ECO:0000075", "experimental": "ECO:0000006", "database": "ECO:0007636", - "textmining": "ECO:0007833" + "textmining": "ECO:0007833", } @@ -57,4 +57,3 @@ def map_evidence_codes(row: Dict) -> List[str]: eco_mappings.append(EVIDENCE_CODE_MAPPINGS[evidence_type]) return eco_mappings - diff --git a/src/monarch_ingest/ingests/xenbase/gene_to_phenotype.py b/src/monarch_ingest/ingests/xenbase/gene_to_phenotype.py index 6bbf74ca..f7c86c50 100644 --- a/src/monarch_ingest/ingests/xenbase/gene_to_phenotype.py +++ b/src/monarch_ingest/ingests/xenbase/gene_to_phenotype.py @@ -1,11 +1,13 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import ( Gene, GeneToPhenotypicFeatureAssociation, - PhenotypicFeature, KnowledgeLevelEnum, AgentTypeEnum + PhenotypicFeature, + KnowledgeLevelEnum, + AgentTypeEnum, ) koza_app = get_koza_app("xenbase_gene_to_phenotype") @@ -31,7 +33,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:xenbase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) if row["SOURCE"]: diff --git a/src/monarch_ingest/ingests/xenbase/non_entrez_orthologs.py b/src/monarch_ingest/ingests/xenbase/non_entrez_orthologs.py index 61066207..930d5b36 100644 --- a/src/monarch_ingest/ingests/xenbase/non_entrez_orthologs.py +++ b/src/monarch_ingest/ingests/xenbase/non_entrez_orthologs.py @@ -4,7 +4,7 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import GeneToGeneHomologyAssociation, AgentTypeEnum, KnowledgeLevelEnum @@ -33,7 +33,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:xenbase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) # Write the captured Association out @@ -48,7 +48,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:xenbase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) # Write the captured Association out @@ -63,7 +63,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:xenbase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) # Write the captured Association out diff --git a/src/monarch_ingest/ingests/xenbase/orthologs.py b/src/monarch_ingest/ingests/xenbase/orthologs.py index 1999447b..609a27ef 100644 --- a/src/monarch_ingest/ingests/xenbase/orthologs.py +++ b/src/monarch_ingest/ingests/xenbase/orthologs.py @@ -4,7 +4,7 @@ import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app from biolink_model.datamodel.pydanticmodel_v2 import GeneToGeneHomologyAssociation, AgentTypeEnum, KnowledgeLevelEnum @@ -32,7 +32,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:xenbase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) # Write the captured Association out diff --git a/src/monarch_ingest/ingests/xenbase/publication_to_gene.py b/src/monarch_ingest/ingests/xenbase/publication_to_gene.py index 8ce3baae..95ee84b9 100644 --- a/src/monarch_ingest/ingests/xenbase/publication_to_gene.py +++ b/src/monarch_ingest/ingests/xenbase/publication_to_gene.py @@ -1,10 +1,12 @@ - import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation, AgentTypeEnum, \ - KnowledgeLevelEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + InformationContentEntityToNamedThingAssociation, + AgentTypeEnum, + KnowledgeLevelEnum, +) from loguru import logger @@ -23,9 +25,7 @@ gene_page_id = gene_page.split(" ")[0] try: - gene_ids = map( - lambda id: f"Xenbase:{id}", list(genepage2gene[gene_page_id].values()) - ) + gene_ids = map(lambda id: f"Xenbase:{id}", list(genepage2gene[gene_page_id].values())) except KeyError: logger.debug(f"Could not locate genepage_id: {gene_page_id} in row {row}") continue @@ -40,7 +40,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:xenbase", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) entities.append(association) diff --git a/src/monarch_ingest/ingests/zfin/gene_to_phenotype.py b/src/monarch_ingest/ingests/zfin/gene_to_phenotype.py index bde87fae..506c5ee4 100644 --- a/src/monarch_ingest/ingests/zfin/gene_to_phenotype.py +++ b/src/monarch_ingest/ingests/zfin/gene_to_phenotype.py @@ -1,10 +1,12 @@ - import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation, KnowledgeLevelEnum, \ - AgentTypeEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + GeneToPhenotypicFeatureAssociation, + KnowledgeLevelEnum, + AgentTypeEnum, +) from loguru import logger @@ -43,7 +45,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:zfin", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/ingests/zfin/publication_to_gene.py b/src/monarch_ingest/ingests/zfin/publication_to_gene.py index 65246f24..1f1bf6e6 100644 --- a/src/monarch_ingest/ingests/zfin/publication_to_gene.py +++ b/src/monarch_ingest/ingests/zfin/publication_to_gene.py @@ -1,12 +1,13 @@ - import uuid -from koza.cli_runner import get_koza_app +from koza.cli_utils import get_koza_app -from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation, AgentTypeEnum, \ - KnowledgeLevelEnum +from biolink_model.datamodel.pydanticmodel_v2 import ( + InformationContentEntityToNamedThingAssociation, + AgentTypeEnum, + KnowledgeLevelEnum, +) -from loguru import logger koza_app = get_koza_app("zfin_publication_to_gene") @@ -24,7 +25,7 @@ aggregator_knowledge_source=["infores:monarchinitiative"], primary_knowledge_source="infores:zfin", knowledge_level=KnowledgeLevelEnum.knowledge_assertion, - agent_type=AgentTypeEnum.manual_agent + agent_type=AgentTypeEnum.manual_agent, ) koza_app.write(association) diff --git a/src/monarch_ingest/main.py b/src/monarch_ingest/main.py index 481eeaad..fdbb4c84 100644 --- a/src/monarch_ingest/main.py +++ b/src/monarch_ingest/main.py @@ -117,7 +117,7 @@ def merge( # load qc_report.yaml from output_dir qc_report = yaml.safe_load(open(f"{output_dir}/qc_report.yaml")) - edge_counts = {item["name"]: item["total_number"] for item in qc_report["edges"]} + # edge_counts = {item["name"]: item["total_number"] for item in qc_report["edges"]} # load expected count yaml expected_counts = yaml.safe_load(open(f"src/monarch_ingest/qc_expect.yaml")) error = False @@ -138,6 +138,7 @@ def merge( if error: sys.exit(1) + @typer_app.command() def closure(): apply_closure() diff --git a/src/monarch_ingest/maps/mimtitles.py b/src/monarch_ingest/maps/mimtitles.py index fe41256f..1407ec69 100644 --- a/src/monarch_ingest/maps/mimtitles.py +++ b/src/monarch_ingest/maps/mimtitles.py @@ -1,6 +1,4 @@ - - -from koza.cli_runner import koza_app +from koza.cli_utils import koza_app from loguru import logger diff --git a/src/monarch_ingest/utils/export_utils.py b/src/monarch_ingest/utils/export_utils.py index da201e0c..252fedd0 100755 --- a/src/monarch_ingest/utils/export_utils.py +++ b/src/monarch_ingest/utils/export_utils.py @@ -1,4 +1,3 @@ - """ Monarch Data Dump This script is used to dump tsv files from the @@ -11,6 +10,7 @@ - solr_filter_1 - solr_filter_2 """ + import json from json import decoder from enum import Enum @@ -36,10 +36,12 @@ class OutputType(str, Enum): OUTPUT_TYPES = set(OutputType._member_names_) -def export(config_file: str = "./src/monarch_ingest/data-dump-config.yaml", - output_dir: str = "./output/tsv/", - output_format: OutputType = OutputType.tsv, - solr_url: str = "http://localhost:8983/solr/association/select"): +def export( + config_file: str = "./src/monarch_ingest/data-dump-config.yaml", + output_dir: str = "./output/tsv/", + output_format: OutputType = OutputType.tsv, + solr_url: str = "http://localhost:8983/solr/association/select", +): if output_format not in OUTPUT_TYPES: raise ValueError(f"output format not supported, supported formats are {OUTPUT_TYPES}") @@ -58,7 +60,7 @@ def export(config_file: str = "./src/monarch_ingest/data-dump-config.yaml", 'json.nl': 'arrarr', 'rows': 0, 'facet': 'true', - 'facet.field': 'category' + 'facet.field': 'category', } solr_request = requests.get(solr_url, params=assoc_params) @@ -103,7 +105,8 @@ def export(config_file: str = "./src/monarch_ingest/data-dump-config.yaml", def generate_tsv(tsv_fh, solr, filters): - default_fields = ','.join([ + default_fields = ','.join( + [ 'subject', 'subject_label', 'subject_taxon', @@ -112,19 +115,22 @@ def generate_tsv(tsv_fh, solr, filters): 'predicate', 'object', 'object_label', - 'qualifier' - 'publications', + 'qualifier' 'publications', 'has_evidence', 'primary_knowledge_source', 'aggregator_knowledge_source', - ]) - disease_to_phenotype_extra_fields = ','.join([ - 'onset_qualifier', - 'onset_qualifier_label', - 'frequency_qualifier', - 'frequency_qualifier_label', - 'sex_qualifier', - 'sex_qualifier_label']) + ] + ) + disease_to_phenotype_extra_fields = ','.join( + [ + 'onset_qualifier', + 'onset_qualifier_label', + 'frequency_qualifier', + 'frequency_qualifier_label', + 'sex_qualifier', + 'sex_qualifier_label', + ] + ) gene_to_gene_extra_fields = ','.join(['object_taxon', 'object_taxon_label']) golr_params = { @@ -134,7 +140,7 @@ def generate_tsv(tsv_fh, solr, filters): 'csv.separator': '\t', 'csv.header': 'true', 'csv.mv.separator': '|', - 'fl': default_fields + 'fl': default_fields, } for filter in filters: @@ -168,11 +174,9 @@ def generate_tsv(tsv_fh, solr, filters): resultCount = facet_response['response']['numFound'] if resultCount == 0: - logger.warning("No results found for {}" - " with filters {}".format(tsv_fh.name, filters)) + logger.warning("No results found for {}" " with filters {}".format(tsv_fh.name, filters)) except decoder.JSONDecodeError: - logger.warning("JSONDecodeError for {}" - " with filters {}".format(tsv_fh.name, filters)) + logger.warning("JSONDecodeError for {}" " with filters {}".format(tsv_fh.name, filters)) logger.warning("solr content: {}".format(solr_request.text)) time.sleep(500) @@ -203,16 +207,9 @@ def generate_tsv(tsv_fh, solr, filters): def generate_jsonl(fh, solr, filters): - #jsonl_writer = jsonlines.open(fh) + # jsonl_writer = jsonlines.open(fh) - golr_params = { - 'q': '*:*', - 'wt': 'json', - 'fl': '*', - 'fq': filters, - 'start': 0, - 'rows': 5000 - } + golr_params = {'q': '*:*', 'wt': 'json', 'fl': '*', 'fq': filters, 'start': 0, 'rows': 5000} count_params = { 'wt': 'json', @@ -239,11 +236,9 @@ def generate_jsonl(fh, solr, filters): resultCount = facet_response['response']['numFound'] if resultCount == 0: - logger.warning("No results found for {}" - " with filters {}".format(fh.name, filters)) + logger.warning("No results found for {}" " with filters {}".format(fh.name, filters)) except decoder.JSONDecodeError: - logger.warning("JSONDecodeError for {}" - " with filters {}".format(fh.name, filters)) + logger.warning("JSONDecodeError for {}" " with filters {}".format(fh.name, filters)) logger.warning("solr content: {}".format(solr_request.text)) time.sleep(500) @@ -284,4 +279,3 @@ def fetch_solr_doc(session, solr, params, retries=10): def camel_to_snake(name): name = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', name) return re.sub('([a-z0-9])([A-Z])', r'\1_\2', name).lower() - diff --git a/src/monarch_ingest/utils/ingest_utils.py b/src/monarch_ingest/utils/ingest_utils.py index a8a06fa7..7b1c16c6 100644 --- a/src/monarch_ingest/utils/ingest_utils.py +++ b/src/monarch_ingest/utils/ingest_utils.py @@ -23,7 +23,7 @@ def ingest_output_exists(source, output_dir): ingests = get_ingests() ingest_config = yaml.load(pkgutil.get_data("monarch_ingest", ingests[source]["config"]), UniqueIncludeLoader) - + has_node_properties = "node_properties" in ingest_config has_edge_properties = "edge_properties" in ingest_config diff --git a/src/monarch_ingest/utils/log_utils.py b/src/monarch_ingest/utils/log_utils.py index 82fcd325..5ce0023c 100644 --- a/src/monarch_ingest/utils/log_utils.py +++ b/src/monarch_ingest/utils/log_utils.py @@ -6,21 +6,22 @@ LOGURU_FORMAT = "{time:YYYY-MM-DD_HH:mm:ss} | {level: <8} | {name: <16} | {message}" LOGURU_FORMAT_SIMPLE = "{time:YYYY-MM-DD_HH:mm:ss} | {level: <8} | {name: <16} | {message}" + def get_logger(name: Optional[str] = None, verbose: Optional[bool] = None): logger = loguru.logger logger.remove() logger.add( - sink = sys.stderr, - level = "INFO" if (verbose is None) else "DEBUG" if (verbose is True) else "WARNING", - format = LOGURU_FORMAT, - colorize = True, + sink=sys.stderr, + level="INFO" if (verbose is None) else "DEBUG" if (verbose is True) else "WARNING", + format=LOGURU_FORMAT, + colorize=True, ) if name: fp = f"logs/{name}" logger.add( - sink = fp + "_{time:YYYY-MM-DD_HH-mm-ss}.log", - level = "DEBUG", - format = LOGURU_FORMAT_SIMPLE, - colorize = True, + sink=fp + "_{time:YYYY-MM-DD_HH-mm-ss}.log", + level="DEBUG", + format=LOGURU_FORMAT_SIMPLE, + colorize=True, ) - return logger \ No newline at end of file + return logger diff --git a/tests/conftest.py b/tests/conftest.py index 2508a212..5377e12a 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,11 +1,4 @@ -import types -from typing import Iterable - import pytest -from koza.cli_runner import get_koza_app, get_translation_table, _set_koza_app, test_koza -from koza.model.config.source_config import PrimaryFileConfig -from koza.model.source import Source -from loguru import logger @pytest.fixture(scope="package") @@ -13,81 +6,18 @@ def global_table(): return "src/monarch_ingest/translation_table.yaml" -@pytest.fixture(scope="package") -def mock_koza(): - # This should be extracted out but for quick prototyping - def _mock_write(self, *entities): - if hasattr(self, '_entities'): - self._entities.extend(list(entities)) - else: - self._entities = list(entities) - - def _make_mock_koza_app( - name: str, - data: Iterable, - transform_code: str, - map_cache=None, - filters=None, - global_table=None, - local_table=None, - ): - mock_source_file_config = PrimaryFileConfig( - name=name, - files=[], - transform_code=transform_code, - ) - mock_source_file = Source(mock_source_file_config) - mock_source_file._reader = data - - _set_koza_app( - source=mock_source_file, - translation_table=get_translation_table(global_table, local_table, logger), - logger=logger, - ) - koza = get_koza_app(name) - - # TODO filter mocks - koza._map_cache = map_cache - koza.write = types.MethodType(_mock_write, koza) - - return koza - - def _transform( - name: str, - data: Iterable, - transform_code: str, - map_cache=None, - filters=None, - global_table=None, - local_table=None, - ): - koza_app = _make_mock_koza_app( - name, - data, - transform_code, - map_cache=map_cache, - filters=filters, - global_table=global_table, - local_table=local_table, - ) - test_koza(koza_app) - koza_app.process_sources() - if not hasattr(koza_app, '_entities'): - koza_app._entities = [] - return koza_app._entities - - return _transform - @pytest.fixture def taxon_label_map_cache(): - return {"taxon-labels": { - "NCBITaxon:7955": {"label": "Danio rerio"}, - "NCBITaxon:6239": {"label": "Caenorhabditis elegans"}, - "NCBITaxon:44689": {"label": "Dictyostelium discoideum"}, - "NCBITaxon:9606" : {"label": "Homo sapiens"}, - "NCBITaxon:4896" : {"label": "Schizosaccharomyces pombe"}, - "NCBITaxon:9615" : {"label": "Canis lupus familiaris"}, - "NCBITaxon:9913" : {"label": "Bos taurus"}, - "NCBITaxon:9823" : {"label": "Sus scrofa"}, - "NCBITaxon:9031" : {"label": "Gallus gallus"}, - }} + return { + "taxon-labels": { + "NCBITaxon:7955": {"label": "Danio rerio"}, + "NCBITaxon:6239": {"label": "Caenorhabditis elegans"}, + "NCBITaxon:44689": {"label": "Dictyostelium discoideum"}, + "NCBITaxon:9606": {"label": "Homo sapiens"}, + "NCBITaxon:4896": {"label": "Schizosaccharomyces pombe"}, + "NCBITaxon:9615": {"label": "Canis lupus familiaris"}, + "NCBITaxon:9913": {"label": "Bos taurus"}, + "NCBITaxon:9823": {"label": "Sus scrofa"}, + "NCBITaxon:9031": {"label": "Gallus gallus"}, + } + } diff --git a/tests/unit/alliance/test_alliance_gene.py b/tests/unit/alliance/test_alliance_gene.py index 1ca221c2..267c5b0f 100644 --- a/tests/unit/alliance/test_alliance_gene.py +++ b/tests/unit/alliance/test_alliance_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -149,10 +150,9 @@ def no_name_row(): @pytest.fixture def pax2a(mock_koza, source_name, pax2a_row, taxon_label_map_cache, script, global_table): - row = iter([pax2a_row]) return mock_koza( source_name, - row, + pax2a_row, script, map_cache=taxon_label_map_cache, global_table=global_table, @@ -161,10 +161,9 @@ def pax2a(mock_koza, source_name, pax2a_row, taxon_label_map_cache, script, glob @pytest.fixture def no_synonym_gene(mock_koza, source_name, no_synonym_row, taxon_label_map_cache, script, global_table): - row = iter([no_synonym_row]) return mock_koza( source_name, - row, + no_synonym_row, script, map_cache=taxon_label_map_cache, global_table=global_table, @@ -173,10 +172,9 @@ def no_synonym_gene(mock_koza, source_name, no_synonym_row, taxon_label_map_cach @pytest.fixture def no_name_gene(mock_koza, source_name, no_name_row, taxon_label_map_cache, script, global_table): - row = iter([no_name_row]) return mock_koza( source_name, - row, + no_name_row, script, map_cache=taxon_label_map_cache, global_table=global_table, @@ -188,10 +186,12 @@ def test_gene_information_gene(pax2a): gene = pax2a[0] assert gene + def test_gene_taxon(pax2a): gene = pax2a[0] - assert 'NCBITaxon:7955' in gene.in_taxon - assert gene.in_taxon_label == 'Danio rerio' + assert "NCBITaxon:7955" in gene.in_taxon + assert gene.in_taxon_label == "Danio rerio" + def test_gene_information_synonym(pax2a): gene = pax2a[0] @@ -203,6 +203,7 @@ def test_gene_information_id(pax2a): gene = pax2a[0] assert gene.id == "ZFIN:ZDB-GENE-990415-8" + def test_gene_information_no_synonyms(no_synonym_gene): gene = no_synonym_gene[0] assert gene.synonym is None or len(gene.synonym) == 0 diff --git a/tests/unit/alliance/test_alliance_gene_to_expression.py b/tests/unit/alliance/test_alliance_gene_to_expression.py index 198209b2..a9a8e9d8 100644 --- a/tests/unit/alliance/test_alliance_gene_to_expression.py +++ b/tests/unit/alliance/test_alliance_gene_to_expression.py @@ -1,5 +1,7 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import GeneToExpressionSiteAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 + @pytest.fixture def source_name(): @@ -42,10 +44,9 @@ def rat_row(): @pytest.fixture def rattus(rat_row, mock_koza, source_name, script, global_table): - rows = iter([rat_row]) return mock_koza( source_name, - rows, + rat_row, script, global_table=global_table, ) @@ -94,10 +95,9 @@ def mgi_row(): @pytest.fixture def mouse(mgi_row, mock_koza, source_name, script, global_table): - rows = iter([mgi_row]) return mock_koza( source_name, - rows, + mgi_row, script, global_table=global_table, ) @@ -148,10 +148,9 @@ def zfin_row(): @pytest.fixture def zebrafish(zfin_row, mock_koza, source_name, script, global_table): - rows = iter([zfin_row]) return mock_koza( source_name, - rows, + zfin_row, script, global_table=global_table, ) @@ -197,10 +196,9 @@ def fly_row(): @pytest.fixture def drosophila(fly_row, mock_koza, source_name, script, global_table): - rows = iter([fly_row]) return mock_koza( source_name, - rows, + fly_row, script, global_table=global_table, ) @@ -250,10 +248,9 @@ def worm_row(): @pytest.fixture def worm(worm_row, mock_koza, source_name, script, global_table): - rows = iter([worm_row]) return mock_koza( source_name, - rows, + worm_row, script, global_table=global_table, ) @@ -294,10 +291,9 @@ def sgd_row(): @pytest.fixture def yeast(sgd_row, mock_koza, source_name, script, global_table): - rows = iter([sgd_row]) return mock_koza( source_name, - rows, + sgd_row, script, global_table=global_table, ) diff --git a/tests/unit/alliance/test_alliance_gene_to_phenotype.py b/tests/unit/alliance/test_alliance_gene_to_phenotype.py index 49383c2d..4164f690 100644 --- a/tests/unit/alliance/test_alliance_gene_to_phenotype.py +++ b/tests/unit/alliance/test_alliance_gene_to_phenotype.py @@ -1,5 +1,6 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import Gene, GeneToPhenotypicFeatureAssociation, PhenotypicFeature +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -34,11 +35,9 @@ def rat_row(): @pytest.fixture def rat(rat_row, mock_koza, source_name, script, map_cache, global_table): # First row is a gene, second is a feature and should get ignored - rows = iter([rat_row]) - return mock_koza( source_name, - rows, + rat_row, script, map_cache=map_cache, global_table=global_table, @@ -70,11 +69,9 @@ def conditions_row(rat_row): @pytest.fixture def conditions_entities(conditions_row, mock_koza, source_name, script, map_cache, global_table): - rows = iter([conditions_row]) - return mock_koza( source_name, - rows, + conditions_row, script, map_cache=map_cache, global_table=global_table, diff --git a/tests/unit/alliance/test_alliance_publication.py b/tests/unit/alliance/test_alliance_publication.py index f9b4658e..9cff2a4f 100644 --- a/tests/unit/alliance/test_alliance_publication.py +++ b/tests/unit/alliance/test_alliance_publication.py @@ -1,6 +1,7 @@ import datetime import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -47,7 +48,7 @@ def row(): @pytest.mark.skip(reason="Will need to be updated for recent Biolink if used") def test_research_article(mock_koza, source_name, row, script, global_table): - entities = mock_koza(source_name, iter([row]), script, global_table=global_table) + entities = mock_koza(source_name, row, script, global_table=global_table) pub = entities[0] assert pub assert pub.id == "PMID:27653487" @@ -75,7 +76,7 @@ def test_mesh_terms(mock_koza, source_name, row, script, global_table, mesh_term "referenceId": "PMID:23576957", }, ] - entities = mock_koza(source_name, iter([row]), script, global_table=global_table) + entities = mock_koza(source_name, row, script, global_table=global_table) pub = entities[0] assert pub assert mesh_term in pub.mesh_terms @@ -84,7 +85,7 @@ def test_mesh_terms(mock_koza, source_name, row, script, global_table, mesh_term @pytest.mark.skip(reason="Will need to be updated for recent Biolink if used") @pytest.mark.parametrize("author", ["Hong W", "Takshak A", "Osunbayo O", "Kunwar A", "Vershinin M"]) def test_research_authors(mock_koza, source_name, row, script, global_table, author): - entities = mock_koza(source_name, iter([row]), script, global_table=global_table) + entities = mock_koza(source_name, row, script, global_table=global_table) pub = entities[0] assert author in pub.authors @@ -92,7 +93,7 @@ def test_research_authors(mock_koza, source_name, row, script, global_table, aut @pytest.mark.skip(reason="Will need to be updated for recent Biolink if used") def test_single_xref(mock_koza, source_name, row, script, global_table): row["crossReferences"] = [row["crossReferences"][0]] - entities = mock_koza(source_name, iter([row]), script, global_table=global_table) + entities = mock_koza(source_name, row, script, global_table=global_table) pub = entities[0] assert pub.xref == ["SGD:S000185012"] @@ -103,7 +104,7 @@ def test_single_xref(mock_koza, source_name, row, script, global_table): ) def test_time_parser(mock_koza, source_name, row, script, global_table, creation_date): row["datePublished"] = creation_date - entities = mock_koza(source_name, iter([row]), script, global_table=global_table) + entities = mock_koza(source_name, row, script, global_table=global_table) pub = entities[0] d = pub.creation_date assert isinstance(d, datetime.date) or isinstance(d, datetime.datetime) @@ -113,7 +114,7 @@ def test_time_parser(mock_koza, source_name, row, script, global_table, creation @pytest.mark.parametrize("creation_date", ["Unknown", "2016 Jul-Aug", "2003 ?%p?\b\bhP\u0007 19", "2000 Dec 14-28"]) def test_notatime_parser(mock_koza, source_name, row, script, global_table, creation_date): row["datePublished"] = creation_date - entities = mock_koza(source_name, iter([row]), script, global_table=global_table) + entities = mock_koza(source_name, row, script, global_table=global_table) pub = entities[0] # assert pub.creation_date == None or isinstance(pub.creation_date, datetime.datetime) d = pub.creation_date diff --git a/tests/unit/bgee/test_bgee_gene_to_expression.py b/tests/unit/bgee/test_bgee_gene_to_expression.py index 9a5f0b0c..3946b6cb 100644 --- a/tests/unit/bgee/test_bgee_gene_to_expression.py +++ b/tests/unit/bgee/test_bgee_gene_to_expression.py @@ -120,10 +120,10 @@ def smallest_n() -> int: def test_filter_group_by_rank_short(row_group_1, filter_col, smallest_n): filtered_group = filter_group_by_rank(row_group_1, filter_col, smallest_n=smallest_n) - assert type(filtered_group) is list + assert isinstance(filtered_group, list) assert len(filtered_group) == 5 for i in filtered_group: - assert type(i) is dict + assert isinstance(i, dict) assert i['Gene ID'] == 'ENSSSCG00000000002' filtered_group_df = pd.DataFrame(filtered_group) @@ -134,10 +134,10 @@ def test_filter_group_by_rank_short(row_group_1, filter_col, smallest_n): def test_filter_group_by_rank_long(row_group_2, filter_col, smallest_n): filtered_group = filter_group_by_rank(row_group_2, filter_col, smallest_n=smallest_n) - assert type(filtered_group) is list + assert isinstance(filtered_group, list) assert len(filtered_group) == 10 for i in filtered_group: - assert type(i) is dict + assert isinstance(i, dict) assert i['Gene ID'] == 'ENSSSCG00000000003' filtered_group_df = pd.DataFrame(filtered_group) @@ -157,7 +157,7 @@ def test_write_group(row_group_1, bgee_mock_koza): prev_uuid = 0 object_list = ['CL:0000023', 'CL:0000501', 'UBERON:0000948', 'UBERON:0005417', 'UBERON:0005418'] for index, item in enumerate(write_result): - assert type(item) == GeneToExpressionSiteAssociation + assert isinstance(item, GeneToExpressionSiteAssociation) assert item.id != prev_uuid prev_uuid = item.id assert item.category == ['biolink:GeneToExpressionSiteAssociation'] @@ -169,10 +169,10 @@ def test_write_group(row_group_1, bgee_mock_koza): def test_get_row_group(bgee_mock_koza, row_group_1, filter_col) -> List: row_group = get_row_group(bgee_mock_koza) - assert type(row_group) is list + assert isinstance(row_group, list) assert len(row_group) == 5 for i in row_group: - assert type(i) is dict + assert isinstance(i, dict) assert row_group == row_group_1 diff --git a/tests/unit/biogrid/test_biogrid.py b/tests/unit/biogrid/test_biogrid.py index 474a3363..c092cfbb 100644 --- a/tests/unit/biogrid/test_biogrid.py +++ b/tests/unit/biogrid/test_biogrid.py @@ -1,9 +1,9 @@ """ Unit tests for BioGRID protein links ingest """ -import pytest -from biolink_model.datamodel.pydanticmodel_v2 import PairwiseGeneToGeneInteraction +import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -30,26 +30,26 @@ def basic_row(): return { "ID Interactor A": "entrez gene/locuslink:6416", "ID Interactor B": "entrez gene/locuslink:2318", - "Alt IDs Interactor A": "biogrid:112315|entrez gene/locuslink:MAP2K4|uniprot/swiss-prot:P45985|" + - "refseq:NP_003001|refseq:NP_001268364", - "Alt IDs Interactor B": "biogrid:108607|entrez gene/locuslink:FLNC|uniprot/swiss-prot:Q14315|" + - "refseq:NP_001120959|refseq:NP_001449", - "Aliases Interactor A": "entrez gene/locuslink:JNKK1(gene name synonym)|" + - "entrez gene/locuslink:MAPKK4(gene name synonym)|" + - "entrez gene/locuslink:MEK4(gene name synonym)", - "Aliases Interactor B": "entrez gene/locuslink:ABP280A(gene name synonym)|" + - "entrez gene/locuslink:FLN2(gene name synonym)|" + - "entrez gene/locuslink:MFM5(gene name synonym)|" + - "entrez gene/locuslink:MPD4(gene name synonym)", + "Alt IDs Interactor A": "biogrid:112315|entrez gene/locuslink:MAP2K4|uniprot/swiss-prot:P45985|" + + "refseq:NP_003001|refseq:NP_001268364", + "Alt IDs Interactor B": "biogrid:108607|entrez gene/locuslink:FLNC|uniprot/swiss-prot:Q14315|" + + "refseq:NP_001120959|refseq:NP_001449", + "Aliases Interactor A": "entrez gene/locuslink:JNKK1(gene name synonym)|" + + "entrez gene/locuslink:MAPKK4(gene name synonym)|" + + "entrez gene/locuslink:MEK4(gene name synonym)", + "Aliases Interactor B": "entrez gene/locuslink:ABP280A(gene name synonym)|" + + "entrez gene/locuslink:FLN2(gene name synonym)|" + + "entrez gene/locuslink:MFM5(gene name synonym)|" + + "entrez gene/locuslink:MPD4(gene name synonym)", "Interaction Detection Method": 'psi-mi:"MI:0018"(two hybrid)', "Publication 1st Author": "Marti A (1997)", - "Publication Identifiers": "pubmed:9006895|pubmed:10727406", + "Publication Identifiers": "pubmed:9006895|pubmed:10727406", "Taxid Interactor A": "taxid:9606", "Taxid Interactor B": "taxid:9606", "Interaction Types": 'psi-mi:"MI:0407"(direct interaction)', "Source Database": 'psi-mi:"MI:0463"(biogrid)', "Interaction Identifiers": "biogrid:103", - "Confidence Values": "" + "Confidence Values": "", } @@ -65,12 +65,7 @@ def basic_pl(mock_koza, source_name, basic_row, script, global_table): :param global_table: :return: """ - return mock_koza( - name=source_name, - data=iter([basic_row]), - transform_code=script, - global_table=global_table - ) + return mock_koza(name=source_name, data=basic_row, transform_code=script, global_table=global_table) def test_association(basic_pl): diff --git a/tests/unit/ctd/test_ctd_chemical_to_disease.py b/tests/unit/ctd/test_ctd_chemical_to_disease.py index d259569e..6a685806 100644 --- a/tests/unit/ctd/test_ctd_chemical_to_disease.py +++ b/tests/unit/ctd/test_ctd_chemical_to_disease.py @@ -1,7 +1,10 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import ChemicalToDiseaseOrPhenotypicFeatureAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 + from monarch_ingest.constants import BIOLINK_TREATS_OR_APPLIED_OR_STUDIED_TO_TREAT + @pytest.fixture def source_name(): return "ctd_chemical_to_disease" @@ -15,20 +18,20 @@ def script(): @pytest.fixture def no_direct_evidence(mock_koza, source_name, script, global_table): row = { - 'ChemicalName': '10074-G5', - 'ChemicalID': 'C534883', - 'CasRN': '', - 'DiseaseName': 'Adenocarcinoma', - 'DiseaseID': 'MESH:D000230', - 'DirectEvidence': '', - 'InferenceGeneSymbol': 'MYC', - 'InferenceScore': '4.08', - 'OmimIDs': '', - 'PubMedIDs': '26432044', + "ChemicalName": "10074-G5", + "ChemicalID": "C534883", + "CasRN": "", + "DiseaseName": "Adenocarcinoma", + "DiseaseID": "MESH:D000230", + "DirectEvidence": "", + "InferenceGeneSymbol": "MYC", + "InferenceScore": "4.08", + "OmimIDs": "", + "PubMedIDs": "26432044", } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -37,20 +40,20 @@ def no_direct_evidence(mock_koza, source_name, script, global_table): @pytest.fixture def marker_mechanism(mock_koza, source_name, script, global_table): row = { - 'ChemicalName': '10,10-bis(4-pyridinylmethyl)-9(10H)-anthracenone', - 'ChemicalID': 'C112297', - 'CasRN': '', - 'DiseaseName': 'Hyperkinesis', - 'DiseaseID': 'MESH:D006948', - 'DirectEvidence': 'marker/mechanism', - 'InferenceGeneSymbol': '', - 'InferenceScore': '', - 'OmimIDs': '', - 'PubMedIDs': '19098162', + "ChemicalName": "10,10-bis(4-pyridinylmethyl)-9(10H)-anthracenone", + "ChemicalID": "C112297", + "CasRN": "", + "DiseaseName": "Hyperkinesis", + "DiseaseID": "MESH:D006948", + "DirectEvidence": "marker/mechanism", + "InferenceGeneSymbol": "", + "InferenceScore": "", + "OmimIDs": "", + "PubMedIDs": "19098162", } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -59,20 +62,20 @@ def marker_mechanism(mock_koza, source_name, script, global_table): @pytest.fixture def therapeutic(mock_koza, source_name, script, global_table): row = { - 'ChemicalName': '10,11-dihydro-10-hydroxycarbamazepine', - 'ChemicalID': 'C039775', - 'CasRN': '', - 'DiseaseName': 'Epilepsy', - 'DiseaseID': 'MESH:D004827', - 'DirectEvidence': 'therapeutic', - 'InferenceGeneSymbol': '', - 'InferenceScore': '', - 'OmimIDs': '', - 'PubMedIDs': '17516704|123', + "ChemicalName": "10,11-dihydro-10-hydroxycarbamazepine", + "ChemicalID": "C039775", + "CasRN": "", + "DiseaseName": "Epilepsy", + "DiseaseID": "MESH:D004827", + "DirectEvidence": "therapeutic", + "InferenceGeneSymbol": "", + "InferenceScore": "", + "OmimIDs": "", + "PubMedIDs": "17516704|123", } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -95,7 +98,7 @@ def test_therapeutic_entities(therapeutic): association = [e for e in entities if isinstance(e, ChemicalToDiseaseOrPhenotypicFeatureAssociation)][0] assert association assert association.predicate == BIOLINK_TREATS_OR_APPLIED_OR_STUDIED_TO_TREAT - assert 'PMID:17516704' in association.publications - assert 'PMID:123' in association.publications + assert "PMID:17516704" in association.publications + assert "PMID:123" in association.publications assert association.primary_knowledge_source == "infores:ctd" assert "infores:monarchinitiative" in association.aggregator_knowledge_source diff --git a/tests/unit/dictybase/test_dictybase_gene.py b/tests/unit/dictybase/test_dictybase_gene.py index 675ce4d4..2de2c344 100644 --- a/tests/unit/dictybase/test_dictybase_gene.py +++ b/tests/unit/dictybase/test_dictybase_gene.py @@ -2,6 +2,7 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import Gene +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -25,7 +26,7 @@ def test_row_1(): """ :return: Test Dictybase Gene input data row. """ - return {'GENE ID': 'DDB_G0269222', 'Gene Name': 'gefB', 'Synonyms': 'RasGEFB, RasGEF'} + return {"GENE ID": "DDB_G0269222", "Gene Name": "gefB", "Synonyms": "RasGEFB, RasGEF"} @pytest.fixture @@ -44,7 +45,7 @@ def basic_dictybase_1(mock_koza, source_name, script, taxon_label_map_cache, tes """ return mock_koza( name=source_name, - data=iter([test_row_1]), + data=test_row_1, transform_code=script, map_cache=taxon_label_map_cache, global_table=global_table, @@ -59,7 +60,7 @@ def test_dictybase_ncbi_mapped_gene_ingest(basic_dictybase_1): assert entity[0].id == "dictyBase:DDB_G0269222" assert entity[0].symbol == "gefB" assert entity[0].name == "gefB" - assert 'RasGEFB' in entity[0].synonym - assert 'RasGEF' in entity[0].synonym + assert "RasGEFB" in entity[0].synonym + assert "RasGEF" in entity[0].synonym assert "NCBITaxon:44689" in entity[0].in_taxon assert "infores:dictybase" in entity[0].provided_by diff --git a/tests/unit/dictybase/test_dictybase_gene_to_phenotype.py b/tests/unit/dictybase/test_dictybase_gene_to_phenotype.py index e5431c35..d85e1db9 100644 --- a/tests/unit/dictybase/test_dictybase_gene_to_phenotype.py +++ b/tests/unit/dictybase/test_dictybase_gene_to_phenotype.py @@ -2,6 +2,7 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 from monarch_ingest.ingests.dictybase.utils import parse_phenotypes @@ -108,7 +109,7 @@ def basic_dictybase_1(mock_koza, source_name, script, test_row_1, global_table, :return: mock_koza application """ return mock_koza( - name=source_name, data=iter([test_row_1]), transform_code=script, global_table=global_table, map_cache=map_cache + name=source_name, data=test_row_1, transform_code=script, global_table=global_table, map_cache=map_cache ) @@ -164,7 +165,7 @@ def basic_dictybase_2(mock_koza, source_name, script, test_row_2, global_table, :return: mock_koza application """ return mock_koza( - name=source_name, data=iter([test_row_2]), transform_code=script, global_table=global_table, map_cache=map_cache + name=source_name, data=test_row_2, transform_code=script, global_table=global_table, map_cache=map_cache ) diff --git a/tests/unit/flybase/test_flybase_publication_to_gene.py b/tests/unit/flybase/test_flybase_publication_to_gene.py index b9524d4f..80f2f24c 100644 --- a/tests/unit/flybase/test_flybase_publication_to_gene.py +++ b/tests/unit/flybase/test_flybase_publication_to_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 # This name must match the ingest name in the transform code @@ -29,7 +30,7 @@ def basic_row(): def basic_g2p(mock_koza, source_name, basic_row, script, global_table): return mock_koza( source_name, - iter([basic_row]), + basic_row, script, global_table=global_table, ) @@ -46,10 +47,10 @@ def test_association(basic_g2p): @pytest.fixture def basic_g2p_without_pmid(mock_koza, source_name, basic_row, script, global_table): - basic_row['PubMed_id'] = None + basic_row["PubMed_id"] = None return mock_koza( source_name, - iter([basic_row]), + basic_row, script, global_table=global_table, ) diff --git a/tests/unit/go/test_go_annotation.py b/tests/unit/go/test_go_annotation.py index 59449d2e..376e7019 100644 --- a/tests/unit/go/test_go_annotation.py +++ b/tests/unit/go/test_go_annotation.py @@ -6,6 +6,7 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import Association +from koza.utils.testing_utils import mock_koza # noqa: F401 # noqa: F401 from loguru import logger from monarch_ingest.ingests.go.annotation_utils import parse_identifiers @@ -97,23 +98,23 @@ def test_rows(): }, # Multiple taxa { - 'DB': 'WB', - 'DB_Object_ID': 'WBGene00000013', - 'DB_Object_Symbol': 'abf-2', - 'Qualifier': 'involved_in', - 'GO_ID': 'GO:0050830', - 'DB_Reference': 'WB_REF:WBPaper00045314|PMID:24882217', - 'Evidence_Code': 'IEP', - 'With_or_From': '', - 'Aspect': 'P', - 'DB_Object_Name': '', - 'DB_Object_Synonym': 'C50F2.10|C50F2.e', - 'DB_Object_Type': 'gene', - 'Taxon': 'taxon:6239|taxon:46170', - 'Date': '20140827', - 'Assigned_By': 'WB', - 'Annotation_Extension': '', - 'Gene_Product_Form_ID': '', + "DB": "WB", + "DB_Object_ID": "WBGene00000013", + "DB_Object_Symbol": "abf-2", + "Qualifier": "involved_in", + "GO_ID": "GO:0050830", + "DB_Reference": "WB_REF:WBPaper00045314|PMID:24882217", + "Evidence_Code": "IEP", + "With_or_From": "", + "Aspect": "P", + "DB_Object_Name": "", + "DB_Object_Synonym": "C50F2.10|C50F2.e", + "DB_Object_Type": "gene", + "Taxon": "taxon:6239|taxon:46170", + "Date": "20140827", + "Assigned_By": "WB", + "Annotation_Extension": "", + "Gene_Product_Form_ID": "", }, # Test default qualifier override for molecular function { @@ -316,7 +317,7 @@ def basic_go(mock_koza, source_name, test_rows, script, global_table, local_tabl """ return mock_koza( name=source_name, - data=iter(test_rows), + data=test_rows, transform_code=script, global_table=global_table, local_table=local_table, @@ -470,28 +471,28 @@ def test_association(basic_go): @pytest.fixture def mgi_entities(mock_koza, source_name, script, global_table, local_table): row = { - 'DB': 'MGI', - 'DB_Object_ID': 'MGI:1918911', - 'DB_Object_Symbol': '0610005C13Rik', - 'Qualifier': 'enables', - 'GO_ID': 'GO:0003674', - 'DB_Reference': 'MGI:MGI:2156816|GO_REF:0000015', - 'Evidence_Code': 'ND', - 'With_or_From': '', - 'Aspect': 'F', - 'DB_Object_Name': 'RIKEN cDNA 0610005C13 gene', - 'DB_Object_Synonym': '', - 'DB_Object_Type': 'gene', - 'Taxon': 'taxon:10090', - 'Date': '20200917', - 'Assigned_By': 'MGI', - 'Annotation_Extension': '', - 'Gene_Product_Form_ID': '', + "DB": "MGI", + "DB_Object_ID": "MGI:1918911", + "DB_Object_Symbol": "0610005C13Rik", + "Qualifier": "enables", + "GO_ID": "GO:0003674", + "DB_Reference": "MGI:MGI:2156816|GO_REF:0000015", + "Evidence_Code": "ND", + "With_or_From": "", + "Aspect": "F", + "DB_Object_Name": "RIKEN cDNA 0610005C13 gene", + "DB_Object_Synonym": "", + "DB_Object_Type": "gene", + "Taxon": "taxon:10090", + "Date": "20200917", + "Assigned_By": "MGI", + "Annotation_Extension": "", + "Gene_Product_Form_ID": "", } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, local_table=local_table, diff --git a/tests/unit/hgnc/test_hgnc_gene.py b/tests/unit/hgnc/test_hgnc_gene.py index 84fe02a6..70629d8c 100644 --- a/tests/unit/hgnc/test_hgnc_gene.py +++ b/tests/unit/hgnc/test_hgnc_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -29,7 +30,7 @@ def gene_row(): @pytest.fixture def pax2a(mock_koza, source_name, gene_row, script, taxon_label_map_cache, global_table): - row = iter([gene_row]) + row = gene_row return mock_koza( source_name, row, @@ -48,13 +49,13 @@ def test_gene(pax2a): def test_gene_information_synonym(pax2a): gene = pax2a[0] assert gene.synonym - assert gene.synonym == ['ACF', 'ASP', 'ACF64', 'ACF65', 'APOBEC1CF', '', '', ''] + assert gene.synonym == ["ACF", "ASP", "ACF64", "ACF65", "APOBEC1CF", "", "", ""] def test_gene_information_xref(pax2a): gene = pax2a[0] assert gene.xref - assert gene.xref == ['ENSEMBL:ENSG00000148584', 'OMIM:618199'] + assert gene.xref == ["ENSEMBL:ENSG00000148584", "OMIM:618199"] # Commenting out publication ingests at least temporarily diff --git a/tests/unit/hpoa/test_hpoa_disease_mode_of_inheritance.py b/tests/unit/hpoa/test_hpoa_disease_mode_of_inheritance.py index f0682519..476afaa1 100644 --- a/tests/unit/hpoa/test_hpoa_disease_mode_of_inheritance.py +++ b/tests/unit/hpoa/test_hpoa_disease_mode_of_inheritance.py @@ -1,27 +1,25 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture def d2moi_entities(mock_koza, global_table): - row = iter( - [ - { - "database_id": "OMIM:300425", - "disease_name": "Autism susceptibility, X-linked 1", - "qualifier": "", - "hpo_id": "HP:0001417", - "reference": "OMIM:300425", - "evidence": "IEA", - "onset": "", - "frequency": "", - "sex": "", - "modifier": "", - "aspect": "I", # assert 'Inheritance' test record - "biocuration": "HPO:iea[2009-02-17]", - } - ] - ) + row = { + "database_id": "OMIM:300425", + "disease_name": "Autism susceptibility, X-linked 1", + "qualifier": "", + "hpo_id": "HP:0001417", + "reference": "OMIM:300425", + "evidence": "IEA", + "onset": "", + "frequency": "", + "sex": "", + "modifier": "", + "aspect": "I", # assert 'Inheritance' test record + "biocuration": "HPO:iea[2009-02-17]", + } + return mock_koza( name="hpoa_disease_mode_of_inheritance", data=row, diff --git a/tests/unit/hpoa/test_hpoa_disease_phenotype.py b/tests/unit/hpoa/test_hpoa_disease_phenotype.py index 6aa88401..acf984d5 100644 --- a/tests/unit/hpoa/test_hpoa_disease_phenotype.py +++ b/tests/unit/hpoa/test_hpoa_disease_phenotype.py @@ -1,27 +1,24 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import DiseaseToPhenotypicFeatureAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture def d2pf_entities_1(mock_koza, global_table): - row = iter( - [ - { - "database_id": "OMIM:614856", - "disease_name": "Osteogenesis imperfecta, type XIII", - "qualifier": "NOT", - "hpo_id": "HP:0000343", - "reference": "OMIM:614856", - "evidence": "TAS", - "onset": "HP:0003593", - "frequency": "1/1", - "sex": "FEMALE", - "modifier": "", - "aspect": "C", # assert 'Clinical' test record - "biocuration": "HPO:skoehler[2012-11-16]", - } - ] - ) + row = { + "database_id": "OMIM:614856", + "disease_name": "Osteogenesis imperfecta, type XIII", + "qualifier": "NOT", + "hpo_id": "HP:0000343", + "reference": "OMIM:614856", + "evidence": "TAS", + "onset": "HP:0003593", + "frequency": "1/1", + "sex": "FEMALE", + "modifier": "", + "aspect": "C", # assert 'Clinical' test record + "biocuration": "HPO:skoehler[2012-11-16]", + } return mock_koza( name="hpoa_disease_to_phenotype", data=row, @@ -47,31 +44,27 @@ def test_disease_to_phenotype_transform_1(d2pf_entities_1): assert association.has_total == 1 assert association.has_quotient == 1.0 # '1/1' implies Always present, i.e. in 100% of the cases. assert association.has_percentage == 100.0 - assert association.frequency_qualifier is None # No implied frequency qualifier based on the '1/1' ratio. + assert association.frequency_qualifier is None # No implied frequency qualifier based on the '1/1' ratio. assert association.primary_knowledge_source == "infores:hpo-annotations" assert "infores:monarchinitiative" in association.aggregator_knowledge_source @pytest.fixture def d2pf_entities_2(mock_koza, global_table): - row = iter( - [ - { - "database_id": "OMIM:117650", - "disease_name": "Cerebrocostomandibular syndrome", - "qualifier": "", - "hpo_id": "HP:0001249", - "reference": "OMIM:117650", - "evidence": "TAS", - "onset": "", - "frequency": "50%", - "sex": "", - "modifier": "", - "aspect": "P", - "biocuration": "HPO:probinson[2009-02-17]", - } - ] - ) + row = { + "database_id": "OMIM:117650", + "disease_name": "Cerebrocostomandibular syndrome", + "qualifier": "", + "hpo_id": "HP:0001249", + "reference": "OMIM:117650", + "evidence": "TAS", + "onset": "", + "frequency": "50%", + "sex": "", + "modifier": "", + "aspect": "P", + "biocuration": "HPO:probinson[2009-02-17]", + } return mock_koza( name="hpoa_disease_to_phenotype", data=row, @@ -95,31 +88,27 @@ def test_disease_to_phenotype_transform_2(d2pf_entities_2): assert not association.onset_qualifier assert association.has_percentage == 50.0 # '50%' implies Present in 30% to 79% of the cases. assert association.has_quotient == 0.5 - assert association.frequency_qualifier is None # No implied frequency qualifier based on the '50%' ratio. + assert association.frequency_qualifier is None # No implied frequency qualifier based on the '50%' ratio. assert association.primary_knowledge_source == "infores:hpo-annotations" assert "infores:monarchinitiative" in association.aggregator_knowledge_source @pytest.fixture def d2pf_entities_3(mock_koza, global_table): - row = iter( - [ - { - "database_id": "OMIM:117650", - "disease_name": "Cerebrocostomandibular syndrome", - "qualifier": "", - "hpo_id": "HP:0001545", - "reference": "OMIM:117650;PMID:12345", - "evidence": "TAS", - "onset": "", - "frequency": "HP:0040283", - "sex": "", - "modifier": "", - "aspect": "P", - "biocuration": "HPO:skoehler[2017-07-13]", - } - ] - ) + row = { + "database_id": "OMIM:117650", + "disease_name": "Cerebrocostomandibular syndrome", + "qualifier": "", + "hpo_id": "HP:0001545", + "reference": "OMIM:117650;PMID:12345", + "evidence": "TAS", + "onset": "", + "frequency": "HP:0040283", + "sex": "", + "modifier": "", + "aspect": "P", + "biocuration": "HPO:skoehler[2017-07-13]", + } return mock_koza( name="hpoa_disease_to_phenotype", data=row, @@ -153,24 +142,20 @@ def test_disease_to_phenotype_transform_3(d2pf_entities_3): @pytest.fixture def d2pf_frequency_fraction_entities(mock_koza, global_table, d2pf_entities_1): - row = iter( - [ - { - "database_id": "OMIM:117650", - "disease_name": "Cerebrocostomandibular syndrome", - "qualifier": "", - "hpo_id": "HP:0001545", - "reference": "OMIM:117650", - "evidence": "TAS", - "onset": "", - "frequency": "3/20", - "sex": "", - "modifier": "", - "aspect": "P", - "biocuration": "HPO:skoehler[2017-07-13]", - } - ] - ) + row = { + "database_id": "OMIM:117650", + "disease_name": "Cerebrocostomandibular syndrome", + "qualifier": "", + "hpo_id": "HP:0001545", + "reference": "OMIM:117650", + "evidence": "TAS", + "onset": "", + "frequency": "3/20", + "sex": "", + "modifier": "", + "aspect": "P", + "biocuration": "HPO:skoehler[2017-07-13]", + } return mock_koza( name="hpoa_disease_to_phenotype", data=row, @@ -179,12 +164,16 @@ def d2pf_frequency_fraction_entities(mock_koza, global_table, d2pf_entities_1): local_table="./src/monarch_ingest/ingests/hpoa/hpoa-translation.yaml", ) + def test_disease_to_phenotype_transform_frequency_fraction(d2pf_frequency_fraction_entities): assert d2pf_frequency_fraction_entities assert len(d2pf_frequency_fraction_entities) == 1 - association = [entity for entity in d2pf_frequency_fraction_entities if isinstance(entity, DiseaseToPhenotypicFeatureAssociation)][0] + association = [ + entity + for entity in d2pf_frequency_fraction_entities + if isinstance(entity, DiseaseToPhenotypicFeatureAssociation) + ][0] assert association.has_count == 3 assert association.has_total == 20 assert association.has_quotient == 0.15 assert association.has_percentage == 15.0 - diff --git a/tests/unit/hpoa/test_hpoa_gene_to_disease.py b/tests/unit/hpoa/test_hpoa_gene_to_disease.py index 587f2ea8..8f209ef8 100644 --- a/tests/unit/hpoa/test_hpoa_gene_to_disease.py +++ b/tests/unit/hpoa/test_hpoa_gene_to_disease.py @@ -1,7 +1,8 @@ from typing import List import pytest -from biolink_model.datamodel.pydanticmodel_v2 import GeneToDiseaseAssociation, CausalGeneToDiseaseAssociation +from biolink_model.datamodel.pydanticmodel_v2 import CausalGeneToDiseaseAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 from monarch_ingest.constants import ( BIOLINK_CAUSES, @@ -66,7 +67,7 @@ def row(): def basic_g2d_entities(mock_koza, row): return mock_koza( name="hpoa_gene_to_disease", - data=iter([row]), + data=row, transform_code="./src/monarch_ingest/ingests/hpoa/gene_to_disease.py", ) diff --git a/tests/unit/hpoa/test_hpoa_gene_to_phenotype.py b/tests/unit/hpoa/test_hpoa_gene_to_phenotype.py index 3420f789..ab2fdd0b 100644 --- a/tests/unit/hpoa/test_hpoa_gene_to_phenotype.py +++ b/tests/unit/hpoa/test_hpoa_gene_to_phenotype.py @@ -1,5 +1,6 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import GeneToPhenotypicFeatureAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -43,7 +44,7 @@ def basic_hpoa(mock_koza, source_name, script, test_row): :return: mock_koza application """ - return mock_koza(name=source_name, data=iter([test_row]), transform_code=script) + return mock_koza(name=source_name, data=test_row, transform_code=script) @pytest.mark.parametrize("cls", [GeneToPhenotypicFeatureAssociation]) diff --git a/tests/unit/hpoa/test_hpoa_utils.py b/tests/unit/hpoa/test_hpoa_utils.py index da25e347..aa510e26 100644 --- a/tests/unit/hpoa/test_hpoa_utils.py +++ b/tests/unit/hpoa/test_hpoa_utils.py @@ -1,15 +1,13 @@ """ Tests of HPOA Utils methods """ -from typing import Optional, Tuple import pytest from monarch_ingest.ingests.hpoa.hpoa_utils import ( FrequencyHpoTerm, get_hpo_term, - map_percentage_frequency_to_hpo_term, - phenotype_frequency_to_hpo_term, Frequency, + phenotype_frequency_to_hpo_term, ) @@ -44,7 +42,7 @@ def test_get_hpo_term(): ("HP:0040282", "HP:0040282", None, None, None, None), ("HP:0040281", "HP:0040281", None, None, None, None), ("HP:0040280", "HP:0040280", None, None, None, None), - ] + ], ) def test_frequency_result(raw_value, frequency_qualifier, percentage, quotient, count, total): frequency = phenotype_frequency_to_hpo_term(raw_value) diff --git a/tests/unit/mgi/test_mgi_publication_to_gene.py b/tests/unit/mgi/test_mgi_publication_to_gene.py index e1a6a7fe..dc92d00a 100644 --- a/tests/unit/mgi/test_mgi_publication_to_gene.py +++ b/tests/unit/mgi/test_mgi_publication_to_gene.py @@ -1,5 +1,6 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 pubmed_ids = "11217851|12466851|18163442|21267068|19213785|27357688|27914912|21873635|31504408" markers = "Cbe1|Smrp1" @@ -30,7 +31,7 @@ def basic_row(): def basic_entities(mock_koza, source_name, basic_row, script, global_table): return mock_koza( source_name, - iter([basic_row]), + basic_row, script, global_table=global_table, ) diff --git a/tests/unit/ncbi/test_ncbi_gene.py b/tests/unit/ncbi/test_ncbi_gene.py index 99b356f6..2f31ff75 100644 --- a/tests/unit/ncbi/test_ncbi_gene.py +++ b/tests/unit/ncbi/test_ncbi_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -24,7 +25,7 @@ def gene_row(): @pytest.fixture def gene_entities(mock_koza, source_name, gene_row, script, taxon_label_map_cache, global_table): - row = iter([gene_row]) + row = gene_row return mock_koza( source_name, row, diff --git a/tests/unit/panther/test_genome_orthologs.py b/tests/unit/panther/test_genome_orthologs.py index cebf0cd6..01937ffd 100644 --- a/tests/unit/panther/test_genome_orthologs.py +++ b/tests/unit/panther/test_genome_orthologs.py @@ -1,7 +1,9 @@ """ Unit tests for Panther Gene Orthology relationships ingest """ + import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -140,7 +142,7 @@ def well_behaved_record_1(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -162,7 +164,7 @@ def well_behaved_record_2(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -185,7 +187,7 @@ def well_behaved_record_3(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -207,7 +209,7 @@ def well_behaved_flybase_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -230,7 +232,7 @@ def well_behaved_wormbase_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -253,7 +255,7 @@ def well_behaved_pombase_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -275,7 +277,7 @@ def odd_mgi_gene_id_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -297,7 +299,7 @@ def pig_gene_id_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -319,7 +321,7 @@ def aspergillus_gene_id_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -342,7 +344,7 @@ def aardvark_is_not_a_species_record(mock_koza, source_name, script, global_tabl } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -364,7 +366,7 @@ def empty_gene_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -386,7 +388,7 @@ def ill_formed_gene_spec_string(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -409,7 +411,7 @@ def gene_prefix_gene_spec_string(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -431,7 +433,7 @@ def geneid_prefix_gene_spec_string(mock_koza, source_name, script, global_table) } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -455,7 +457,7 @@ def gene_orfname_prefix_gene_spec_string(mock_koza, source_name, script, global_ } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -479,7 +481,7 @@ def gene_orderedlocusname_prefix_gene_spec_string(mock_koza, source_name, script } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) @@ -506,7 +508,7 @@ def test_gene_orderedlocusname_gene_spec_string(gene_orderedlocusname_prefix_gen # } # return mock_koza( # name=source_name, -# data=iter([row]), +# data=row, # transform_code=script, # global_table=global_table, # ) diff --git a/tests/unit/pombase/test_pombase_gene.py b/tests/unit/pombase/test_pombase_gene.py index e5fa3750..c500be9a 100644 --- a/tests/unit/pombase/test_pombase_gene.py +++ b/tests/unit/pombase/test_pombase_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -16,12 +17,13 @@ def gene_information_entities(mock_koza, taxon_label_map_cache, global_table): return mock_koza( "pombase_gene", - iter([row]), + row, "./src/monarch_ingest/ingests/pombase/gene.py", map_cache=taxon_label_map_cache, global_table=global_table, ) + @pytest.fixture def gene_entity_no_name(mock_koza, taxon_label_map_cache, global_table): row = { @@ -37,7 +39,7 @@ def gene_entity_no_name(mock_koza, taxon_label_map_cache, global_table): return mock_koza( "pombase_gene", - iter([row]), + row, "./src/monarch_ingest/ingests/pombase/gene.py", map_cache=taxon_label_map_cache, global_table=global_table, @@ -65,8 +67,9 @@ def test_gene_xref(gene_information_entities): gene = gene_information_entities[0] assert "UniProtKB:Q9US52" in gene.xref + def test_gene_systematic_id_as_name(gene_entity_no_name): gene = gene_entity_no_name[0] assert gene.name == "SPAC1002.06c" assert gene.full_name == "SPAC1002.06c" - assert gene.symbol == "SPAC1002.06c" \ No newline at end of file + assert gene.symbol == "SPAC1002.06c" diff --git a/tests/unit/pombase/test_pombase_gene_to_phenotype.py b/tests/unit/pombase/test_pombase_gene_to_phenotype.py index 8096b666..6d956017 100644 --- a/tests/unit/pombase/test_pombase_gene_to_phenotype.py +++ b/tests/unit/pombase/test_pombase_gene_to_phenotype.py @@ -1,35 +1,32 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import Gene, GeneToPhenotypicFeatureAssociation, PhenotypicFeature +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture def entities(mock_koza, global_table): - row = iter( - [ - { - "Database name": "PomBase", - "Gene systematic ID": "SPAC24B11.06c", - "FYPO ID": "FYPO:0004058", - "Allele description": "", - "Expression": "", - "Parental strain": "972 h-", - "Strain name (background)": "", - "Genotype description": "", - "Gene name": "sty1", - "Allele name": "sty1delta", - "Allele synonym": "", - "Allele type": "deletion", - "Evidence": "cell growth assay evidence", - "Condition": "", - "Penetrance": "", - "Severity": "FYPO_EXT:0000001", - "Extension": "", - "Reference": "PMID:19436749", - "Taxon": "4896", - "Date": "2014-11-21", - } - ] - ) + row = { + "Database name": "PomBase", + "Gene systematic ID": "SPAC24B11.06c", + "FYPO ID": "FYPO:0004058", + "Allele description": "", + "Expression": "", + "Parental strain": "972 h-", + "Strain name (background)": "", + "Genotype description": "", + "Gene name": "sty1", + "Allele name": "sty1delta", + "Allele synonym": "", + "Allele type": "deletion", + "Evidence": "cell growth assay evidence", + "Condition": "", + "Penetrance": "", + "Severity": "FYPO_EXT:0000001", + "Extension": "", + "Reference": "PMID:19436749", + "Taxon": "4896", + "Date": "2014-11-21", + } return mock_koza( name="pombase_gene_to_phenotype", diff --git a/tests/unit/reactome/test_reactome_chemical_to_pathway.py b/tests/unit/reactome/test_reactome_chemical_to_pathway.py index e0ace31b..1b941de4 100644 --- a/tests/unit/reactome/test_reactome_chemical_to_pathway.py +++ b/tests/unit/reactome/test_reactome_chemical_to_pathway.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -26,7 +27,7 @@ def basic_row(): @pytest.fixture def basic_g2p(mock_koza, source_name, basic_row, script, global_table, local_table): - return mock_koza(source_name, iter([basic_row]), script, global_table=global_table, local_table=local_table) + return mock_koza(source_name, basic_row, script, global_table=global_table, local_table=local_table) def test_association(basic_g2p): diff --git a/tests/unit/reactome/test_reactome_gene_to_pathway.py b/tests/unit/reactome/test_reactome_gene_to_pathway.py index ca398d42..bd0dd5b8 100644 --- a/tests/unit/reactome/test_reactome_gene_to_pathway.py +++ b/tests/unit/reactome/test_reactome_gene_to_pathway.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -31,7 +32,7 @@ def basic_row(): @pytest.fixture def basic_g2p(mock_koza, source_name, basic_row, script, global_table, local_table): - return mock_koza(source_name, iter([basic_row]), script, global_table=global_table, local_table=local_table) + return mock_koza(source_name, basic_row, script, global_table=global_table, local_table=local_table) def test_association(basic_g2p): diff --git a/tests/unit/reactome/test_reactome_pathway.py b/tests/unit/reactome/test_reactome_pathway.py index d71add40..23428e2b 100644 --- a/tests/unit/reactome/test_reactome_pathway.py +++ b/tests/unit/reactome/test_reactome_pathway.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -26,7 +27,7 @@ def basic_row(): @pytest.fixture def basic_g2p(mock_koza, source_name, basic_row, script, global_table, local_table): - return mock_koza(source_name, iter([basic_row]), script, global_table=global_table, local_table=local_table) + return mock_koza(source_name, basic_row, script, global_table=global_table, local_table=local_table) def test_pathway_id(basic_g2p): diff --git a/tests/unit/rgd/test_rgd_publication_to_gene.py b/tests/unit/rgd/test_rgd_publication_to_gene.py index fd99bf07..f68a9f10 100644 --- a/tests/unit/rgd/test_rgd_publication_to_gene.py +++ b/tests/unit/rgd/test_rgd_publication_to_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 # This name must match the ingest name in the transform code @@ -27,7 +28,7 @@ def basic_row(): def basic_g2p(mock_koza, source_name, basic_row, script, global_table): return mock_koza( source_name, - iter([basic_row]), + basic_row, script, global_table=global_table, ) diff --git a/tests/unit/sgd/test_sgd_publication_to_gene.py b/tests/unit/sgd/test_sgd_publication_to_gene.py index 41cb8ab3..b1ea23cf 100644 --- a/tests/unit/sgd/test_sgd_publication_to_gene.py +++ b/tests/unit/sgd/test_sgd_publication_to_gene.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -23,7 +24,7 @@ def basic_row(): def basic_g2p(mock_koza, source_name, basic_row, script, global_table): return mock_koza( source_name, - iter([basic_row]), + basic_row, script, global_table=global_table, ) diff --git a/tests/unit/string/test_string_protein_links.py b/tests/unit/string/test_string_protein_links.py index 60400bfa..88b6d2af 100644 --- a/tests/unit/string/test_string_protein_links.py +++ b/tests/unit/string/test_string_protein_links.py @@ -1,8 +1,10 @@ """ Unit tests for STRING protein links ingest """ + import pytest from biolink_model.datamodel.pydanticmodel_v2 import PairwiseGeneToGeneInteraction +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -29,8 +31,8 @@ def map_cache(): entrez_2_string = { "10090.ENSMUSP00000000001": {"entrez": "14679"}, "10090.ENSMUSP00000020316": {"entrez": "56480"}, - "9606.ENSP00000349467": {'entrez': '801|805|808'}, - "9606.ENSP00000000233": {'entrez': '123|381'}, + "9606.ENSP00000349467": {"entrez": "801|805|808"}, + "9606.ENSP00000000233": {"entrez": "123|381"}, } return {"entrez_2_string": entrez_2_string} @@ -53,6 +55,7 @@ def basic_row(): "combined_score": "183", } + @pytest.fixture def inverse_duplicate_rows(): return [ @@ -79,9 +82,10 @@ def inverse_duplicate_rows(): "database": "0", "textmining": "67", "combined_score": "183", - } + }, ] + @pytest.fixture def basic_pl(mock_koza, source_name, basic_row, script, global_table, map_cache): """ @@ -97,12 +101,13 @@ def basic_pl(mock_koza, source_name, basic_row, script, global_table, map_cache) """ return mock_koza( name=source_name, - data=iter([basic_row]), + data=basic_row, transform_code=script, global_table=global_table, map_cache=map_cache, ) + @pytest.fixture def duplicate_row_entities(mock_koza, source_name, inverse_duplicate_rows, script, global_table, map_cache): """ @@ -118,12 +123,13 @@ def duplicate_row_entities(mock_koza, source_name, inverse_duplicate_rows, scrip """ return mock_koza( name=source_name, - data=iter(inverse_duplicate_rows), + data=inverse_duplicate_rows, transform_code=script, global_table=global_table, map_cache=map_cache, ) + # def test_proteins(basic_pl): # gene_a = basic_pl[0] # assert gene_a @@ -154,8 +160,8 @@ def duplicate_row_entities(mock_koza, source_name, inverse_duplicate_rows, scrip # assert "NCBITaxon:10090" in gene_b.in_taxon # assert gene_b.source == "infores:entrez" -INCLUDED_ECO_CODES = ['ECO:0000075', 'ECO:0000006', 'ECO:0007833'] -EXCLUDED_ECO_CODES = ['ECO:0000044', 'ECO:0000124', 'ECO:0000080', 'ECO:0007636'] +INCLUDED_ECO_CODES = ["ECO:0000075", "ECO:0000006", "ECO:0007833"] +EXCLUDED_ECO_CODES = ["ECO:0000044", "ECO:0000124", "ECO:0000080", "ECO:0007636"] def test_association(basic_pl): @@ -174,16 +180,16 @@ def test_association(basic_pl): @pytest.fixture def multigene_row(): return { - 'protein1': '9606.ENSP00000000233', - 'protein2': '9606.ENSP00000349467', - 'neighborhood': '0', - 'fusion': '0', - 'cooccurence': '332', - 'coexpression': '62', - 'experimental': '77', - 'database': '0', - 'textmining': '101', - 'combined_score': 410, + "protein1": "9606.ENSP00000000233", + "protein2": "9606.ENSP00000349467", + "neighborhood": "0", + "fusion": "0", + "cooccurence": "332", + "coexpression": "62", + "experimental": "77", + "database": "0", + "textmining": "101", + "combined_score": 410, } @@ -191,7 +197,7 @@ def multigene_row(): def multigene_entities(mock_koza, source_name, multigene_row, script, global_table, map_cache): return mock_koza( name=source_name, - data=iter([multigene_row]), + data=multigene_row, transform_code=script, map_cache=map_cache, global_table=global_table, @@ -204,8 +210,9 @@ def test_multigene_associations(multigene_entities): ] assert len(associations) == 6 + def test_duplicates_are_removed(duplicate_row_entities): associations = [ association for association in duplicate_row_entities if isinstance(association, PairwiseGeneToGeneInteraction) ] - assert len(associations) == 1 \ No newline at end of file + assert len(associations) == 1 diff --git a/tests/unit/xenbase/test_xenbase_gene_to_phenotype.py b/tests/unit/xenbase/test_xenbase_gene_to_phenotype.py index dfaa54ec..dcbee63a 100644 --- a/tests/unit/xenbase/test_xenbase_gene_to_phenotype.py +++ b/tests/unit/xenbase/test_xenbase_gene_to_phenotype.py @@ -1,30 +1,27 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import Gene, GeneToPhenotypicFeatureAssociation, PhenotypicFeature +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture def entities( mock_koza, ): - row = iter( - [ - { - "SUBJECT": "Xenbase:XB-GENE-1000632", - "SUBJECT_LABEL": "dctn2", - "SUBJECT_TAXON": "NCBITaxon:8364", - "SUBJECT_TAXON_LABEL": "Xla", - "OBJECT": "XPO:0102358", - "OBJECT_LABEL": "abnormal tail morphology", - "RELATION": "RO_0002200", - "RELATION_LABEL": "has_phenotype", - "EVIDENCE": "", - "EVIDENCE_LABEL": "", - "SOURCE": "PMID:17112317", - "IS_DEFINED_BY": "", - "QUALIFIER": "", - } - ] - ) + row = { + "SUBJECT": "Xenbase:XB-GENE-1000632", + "SUBJECT_LABEL": "dctn2", + "SUBJECT_TAXON": "NCBITaxon:8364", + "SUBJECT_TAXON_LABEL": "Xla", + "OBJECT": "XPO:0102358", + "OBJECT_LABEL": "abnormal tail morphology", + "RELATION": "RO_0002200", + "RELATION_LABEL": "has_phenotype", + "EVIDENCE": "", + "EVIDENCE_LABEL": "", + "SOURCE": "PMID:17112317", + "IS_DEFINED_BY": "", + "QUALIFIER": "", + } return mock_koza("xenbase_gene_to_phenotype", row, "./src/monarch_ingest/ingests/xenbase/gene_to_phenotype.py") diff --git a/tests/unit/xenbase/test_xenbase_non_entrez_orthologs.py b/tests/unit/xenbase/test_xenbase_non_entrez_orthologs.py index 728313db..b6c55b8f 100644 --- a/tests/unit/xenbase/test_xenbase_non_entrez_orthologs.py +++ b/tests/unit/xenbase/test_xenbase_non_entrez_orthologs.py @@ -1,8 +1,10 @@ """ Unit tests for Xenbase Gene Orthology relationships ingest """ + import pytest from biolink_model.datamodel.pydanticmodel_v2 import GeneToGeneHomologyAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -24,12 +26,12 @@ def script(): @pytest.fixture def ne_orthology_records(mock_koza, source_name, script): row = { - 'Xenbase': "XB-GENE-6485390", - 'OMIM': "614812", - 'MGI': "1891834", - 'ZFIN': "ZDB-GENE-070705-255", + "Xenbase": "XB-GENE-6485390", + "OMIM": "614812", + "MGI": "1891834", + "ZFIN": "ZDB-GENE-070705-255", } - return mock_koza(name=source_name, data=iter([row]), transform_code=script) + return mock_koza(name=source_name, data=row, transform_code=script) def test_ne_orthology_records(ne_orthology_records): diff --git a/tests/unit/xenbase/test_xenbase_orthologs.py b/tests/unit/xenbase/test_xenbase_orthologs.py index 6ecd8157..71cecced 100644 --- a/tests/unit/xenbase/test_xenbase_orthologs.py +++ b/tests/unit/xenbase/test_xenbase_orthologs.py @@ -1,8 +1,10 @@ """ Unit tests for Xenbase Gene Orthology relationships ingest """ + import pytest from biolink_model.datamodel.pydanticmodel_v2 import GeneToGeneHomologyAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -31,7 +33,7 @@ def orthology_record(mock_koza, source_name, script, global_table): } return mock_koza( name=source_name, - data=iter([row]), + data=row, transform_code=script, global_table=global_table, ) diff --git a/tests/unit/xenbase/test_xenbase_publication_to_gene.py b/tests/unit/xenbase/test_xenbase_publication_to_gene.py index d66430d2..84479138 100644 --- a/tests/unit/xenbase/test_xenbase_publication_to_gene.py +++ b/tests/unit/xenbase/test_xenbase_publication_to_gene.py @@ -1,20 +1,18 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import Gene, InformationContentEntityToNamedThingAssociation, Publication -from koza.cli_runner import get_translation_table +from koza.cli_utils import get_translation_table +from koza.utils.testing_utils import mock_koza # noqa: F401 from loguru import logger @pytest.fixture def gene_literature_entities(mock_koza, global_table): - row = iter( - [ - { - "xb_article": "XB-ART-1", - "pmid": "16938438", - "gene_pages": "XB-GENEPAGE-487723 nog,XB-GENEPAGE-490377 msx1,XB-GENEPAGE-481828 bmp2,XB-GENEPAGE-483057 bmp4,XB-GENEPAGE-480982 fgf8,XB-GENEPAGE-6045068 hspa1l,XB-GENEPAGE-485625 hsp70", - } - ] - ) + row = { + "xb_article": "XB-ART-1", + "pmid": "16938438", + "gene_pages": "XB-GENEPAGE-487723 nog,XB-GENEPAGE-490377 msx1,XB-GENEPAGE-481828 bmp2,XB-GENEPAGE-483057 bmp4,XB-GENEPAGE-480982 fgf8,XB-GENEPAGE-6045068 hspa1l,XB-GENEPAGE-485625 hsp70", + } + map_cache = { "genepage-2-gene": { "XB-GENEPAGE-487723": { @@ -54,7 +52,7 @@ def gene_literature_entities(mock_koza, global_table): }, } } - get_translation_table("src/monarch_ingest/translation_table.yaml", None, logger), + (get_translation_table("src/monarch_ingest/translation_table.yaml", None, logger),) return mock_koza( name="xenbase_publication_to_gene", diff --git a/tests/unit/zfin/test_zfin_gene_to_phenotype.py b/tests/unit/zfin/test_zfin_gene_to_phenotype.py index fb6881b4..c7354830 100644 --- a/tests/unit/zfin/test_zfin_gene_to_phenotype.py +++ b/tests/unit/zfin/test_zfin_gene_to_phenotype.py @@ -1,4 +1,5 @@ import pytest +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -56,7 +57,7 @@ def basic_row(): def basic_g2p(mock_koza, source_name, basic_row, script, map_cache, global_table): return mock_koza( source_name, - iter([basic_row]), + basic_row, script, map_cache=map_cache, global_table=global_table, @@ -96,7 +97,7 @@ def test_association(basic_g2p): # return mock_koza( # source_name, -# iter([basic_row]), +# basic_row, # script, # map_cache=map_cache, # global_table=global_table, @@ -123,7 +124,7 @@ def test_association(basic_g2p): # return mock_koza( # source_name, -# iter([basic_row]), +# basic_row, # script, # map_cache=map_cache, # global_table=global_table, @@ -140,7 +141,7 @@ def test_excluded_tags(mock_koza, source_name, basic_row, script, map_cache, tag basic_row["Phenotype Tag"] = tag entities = mock_koza( source_name, - iter([basic_row]), + basic_row, script, map_cache=map_cache, global_table=global_table, @@ -153,7 +154,7 @@ def test_included_tags(mock_koza, source_name, basic_row, script, map_cache, tag basic_row["Phenotype Tag"] = tag entities = mock_koza( source_name, - iter([basic_row]), + basic_row, script, map_cache=map_cache, global_table=global_table, diff --git a/tests/unit/zfin/test_zfin_publication_to_gene.py b/tests/unit/zfin/test_zfin_publication_to_gene.py index b99711b8..0d3e96f3 100644 --- a/tests/unit/zfin/test_zfin_publication_to_gene.py +++ b/tests/unit/zfin/test_zfin_publication_to_gene.py @@ -1,5 +1,6 @@ import pytest from biolink_model.datamodel.pydanticmodel_v2 import InformationContentEntityToNamedThingAssociation +from koza.utils.testing_utils import mock_koza # noqa: F401 @pytest.fixture @@ -17,7 +18,7 @@ def basic_row(): def basic_entities(mock_koza, basic_row, global_table): return mock_koza( "zfin_publication_to_gene", - iter([basic_row]), + basic_row, "./src/monarch_ingest/ingests/zfin/publication_to_gene.py", global_table=global_table, )