diff --git a/.github/workflows/deploy-docs.yaml b/.github/workflows/deploy-docs.yaml index 174363d..37072b2 100644 --- a/.github/workflows/deploy-docs.yaml +++ b/.github/workflows/deploy-docs.yaml @@ -16,7 +16,7 @@ jobs: - name: Set up Python 3. uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Poetry. uses: snok/install-poetry@v1.3 diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 24342f9..d0c4c8a 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ["3.9", "3.10"] + python-version: ["3.10", "3.11", "3.12"] steps: diff --git a/.github/workflows/pypi-publish.yaml b/.github/workflows/pypi-publish.yaml index b1f21a3..268dd9d 100644 --- a/.github/workflows/pypi-publish.yaml +++ b/.github/workflows/pypi-publish.yaml @@ -16,7 +16,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: 3.9 + python-version: "3.10" - name: Install Poetry run: | diff --git a/examples/Bad-TestAsset-001.yaml b/examples/Bad-TestAsset-001.yaml index 171adc6..d3554e9 100644 --- a/examples/Bad-TestAsset-001.yaml +++ b/examples/Bad-TestAsset-001.yaml @@ -8,7 +8,8 @@ name: TestAsset001 description: Fingolimod treats multiple sclerosis input_id: PUBCHEM.COMPOUND:107970 predicate_name: treats -output_id: MONDO:0005301 +output_ids: + - MONDO:0005301 expected_output: Acceptable test_runner_settings: - "inferred" diff --git a/examples/Good-AcceptanceTestAsset-001.yaml b/examples/Good-AcceptanceTestAsset-001.yaml index 2a48722..fb30c39 100644 --- a/examples/Good-AcceptanceTestAsset-001.yaml +++ b/examples/Good-AcceptanceTestAsset-001.yaml @@ -26,7 +26,8 @@ name: AcceptanceTestAsset001 description: Iron treats Aceruloplasminemia input_id: MONDO:0011426 predicate_name: treats -output_id: DRUGBANK:DB01592 +output_ids: + - DRUGBANK:DB01592 expected_output: NeverShow test_metadata: id: "test:1" diff --git a/examples/Good-AcceptanceTestCase-001.yaml b/examples/Good-AcceptanceTestCase-001.yaml index ca6f646..d008ecf 100644 --- a/examples/Good-AcceptanceTestCase-001.yaml +++ b/examples/Good-AcceptanceTestCase-001.yaml @@ -22,7 +22,8 @@ test_assets: description: Iron treats Aceruloplasminemia input_id: MONDO:0011426 predicate_name: treats - output_id: DRUGBANK:DB01592 + output_ids: + - DRUGBANK:DB01592 expected_output: NeverShow test_runner_settings: - "inferred" diff --git a/examples/Good-TestAsset-001.json b/examples/Good-TestAsset-001.json index f773550..31a3005 100644 --- a/examples/Good-TestAsset-001.json +++ b/examples/Good-TestAsset-001.json @@ -4,7 +4,7 @@ "description": "Fingolimod treats multiple sclerosis", "input_id": "PUBCHEM.COMPOUND:107970", "predicate_name": "treats", - "output_id": "MONDO:0005301", + "output_ids": ["MONDO:0005301"], "expected_output": "Acceptable", "test_runner_settings": ["inferred", "test"], "test_metadata": { diff --git a/examples/Good-TestAsset-001.yaml b/examples/Good-TestAsset-001.yaml index 31fd44d..2cbd601 100644 --- a/examples/Good-TestAsset-001.yaml +++ b/examples/Good-TestAsset-001.yaml @@ -16,7 +16,7 @@ # - input_category # - predicate_id # - predicate_name -# - output_id +# - output_ids # - output_name # - output_category # - association @@ -45,7 +45,8 @@ description: Iron treats Aceruloplasminemia input_id: MONDO:0011426 input_name: Aceruloplasminemia predicate_name: treats -output_id: DRUGBANK:DB01592 +output_ids: + - DRUGBANK:DB01592 output_name: Iron (PUBCHEM) expected_output: NeverShow test_reference: https://github.com/NCATSTranslator/Feedback/issues/506 diff --git a/examples/Good-TestAsset-002.json b/examples/Good-TestAsset-002.json new file mode 100644 index 0000000..19b3d38 --- /dev/null +++ b/examples/Good-TestAsset-002.json @@ -0,0 +1,14 @@ +{ + "id": "example:TestAsset002", + "name": "TestAsset002", + "description": "Sirolimus treats Castleman disease", + "input_id": "MONDO:0015564", + "predicate_name": "treats", + "output_ids": ["PUBCHEM.COMPOUND:5284616", "CHEBI:9168"], + "output_name": "sirolimus", + "expected_output": "TopAnswer", + "test_runner_settings": ["inferred"], + "test_metadata": { + "id": "example:TestAsset002" + } +} diff --git a/examples/Good-TestCase-001.json b/examples/Good-TestCase-001.json index d4763fe..62df579 100644 --- a/examples/Good-TestCase-001.json +++ b/examples/Good-TestCase-001.json @@ -9,7 +9,7 @@ "description": "Fingolimod treats multiple sclerosis", "input_id": "PUBCHEM.COMPOUND:107970", "predicate_name": "treats", - "output_id": "MONDO:0005301", + "output_ids": ["MONDO:0005301"], "expected_output": "Acceptable", "test_runner_settings": ["inferred", "test"], "test_metadata": { diff --git a/examples/Good-TestCase-001.yaml b/examples/Good-TestCase-001.yaml index 2af86e1..191cf5e 100644 --- a/examples/Good-TestCase-001.yaml +++ b/examples/Good-TestCase-001.yaml @@ -11,7 +11,6 @@ # TestCase, used to probe a particular test condition. # is_a: TestEntity # slots: -# - test_env # - test_case_type # - query_type # - test_assets @@ -41,7 +40,8 @@ test_assets: name: TestAsset001 input_id: MONDO:0011426 predicate_name: treats - output_id: DRUGBANK:DB01592 + output_ids: + - DRUGBANK:DB01592 expected_output: NeverShow test_runner_settings: - "inferred" diff --git a/examples/SampleTestAssetList.json b/examples/SampleTestAssetList.json index 84bb0e0..5240963 100644 --- a/examples/SampleTestAssetList.json +++ b/examples/SampleTestAssetList.json @@ -5,7 +5,7 @@ "description": "Fingolimod treats multiple sclerosis", "input_id": "PUBCHEM.COMPOUND:107970", "predicate_name": "treats", - "output_id": "MONDO:0005301", + "output_ids": ["MONDO:0005301"], "expected_output": "Acceptable", "runner_settings": ["inferred", "test"], "test_metadata": { @@ -19,7 +19,7 @@ "description": "Carbamazepine treats Cerebral palsy", "input_id": "PUBCHEM.COMPOUND:2554", "predicate_name": "treats", - "output_id": "MONDO:0006497", + "output_ids": ["MONDO:0006497"], "expected_output": "number_2_Acceptable", "runner_settings": ["inferred", "test"], "test_metadata": { diff --git a/poetry.lock b/poetry.lock index e87957d..09c7abb 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.5.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -6,6 +6,7 @@ version = "0.6.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, @@ -17,9 +18,11 @@ version = "4.9.3" description = "ANTLR 4.9.3 runtime for Python 3.7" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "antlr4-python3-runtime-4.9.3.tar.gz", hash = "sha256:f224469b4168294902bb1efa80a8bf7855f24c99aef99cbefc1bcd3cce77881b"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "arrow" @@ -27,10 +30,12 @@ version = "1.3.0" description = "Better dates & times for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] python-dateutil = ">=2.7.0" @@ -46,6 +51,7 @@ version = "23.2.0" description = "Classes Without Boilerplate" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, @@ -56,8 +62,8 @@ cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] dev = ["attrs[tests]", "pre-commit"] docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] +tests-mypy = ["mypy (>=1.6) ; platform_python_implementation == \"CPython\" and python_version >= \"3.8\"", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.8\""] +tests-no-zope = ["attrs[tests-mypy]", "cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] [[package]] name = "beautifulsoup4" @@ -65,6 +71,7 @@ version = "4.12.3" description = "Screen-scraping library" optional = false python-versions = ">=3.6.0" +groups = ["dev"] files = [ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"}, {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"}, @@ -86,6 +93,7 @@ version = "0.11.1" description = "Integrated registry of biological databases and nomenclatures" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "bioregistry-0.11.1-py3-none-any.whl", hash = "sha256:11a1cd66da5755ffb7bcd705666f6446f9dcc14ba03e583d21d6de2cdcb9ca1b"}, {file = "bioregistry-0.11.1.tar.gz", hash = "sha256:6f6a6048db0d70d5a7644333040645d4bd5484e97ed0eab9a256e6eec446d39b"}, @@ -116,6 +124,7 @@ version = "1.4.0" description = "Biolink Model Toolkit: A Python API for working with the Biolink Model" optional = false python-versions = "<4.0,>=3.9" +groups = ["main"] files = [ {file = "bmt-1.4.0-py3-none-any.whl", hash = "sha256:ca81f3e91b3a0312bed01692a93d343d828e556ae14fc00fb016f5a3f38f44c3"}, {file = "bmt-1.4.0.tar.gz", hash = "sha256:26a831eda3d64405d849f49ee579b44412e3e6b9c2e6587e2240a7605b28fc55"}, @@ -132,6 +141,7 @@ version = "5.3.3" description = "Extensible memoizing collections and decorators" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "cachetools-5.3.3-py3-none-any.whl", hash = "sha256:0abad1021d3f8325b2fc1d2e9c8b9c9d57b04c3932657a72465447332c24d945"}, {file = "cachetools-5.3.3.tar.gz", hash = "sha256:ba29e2dfa0b8b556606f097407ed1aa62080ee108ab0dc5ec9d6a723a007d105"}, @@ -143,6 +153,7 @@ version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, @@ -154,9 +165,11 @@ version = "0.2.1" description = "rdflib collections flattening graph" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "CFGraph-0.2.1.tar.gz", hash = "sha256:b57fe7044a10b8ff65aa3a8a8ddc7d4cd77bf511b42e57289cd52cbc29f8fe74"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] rdflib = ">=0.4.2" @@ -167,10 +180,12 @@ version = "5.2.0" description = "Universal encoding detector for Python 3" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970"}, {file = "chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "charset-normalizer" @@ -178,6 +193,7 @@ version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7.0" +groups = ["main", "dev"] files = [ {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, @@ -277,6 +293,7 @@ version = "8.1.7" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, @@ -291,6 +308,8 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] +markers = "platform_system == \"Windows\" or sys_platform == \"win32\"" files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, @@ -302,6 +321,7 @@ version = "0.7.9" description = "Idiomatic conversion between URIs and compact URIs (CURIEs)." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "curies-0.7.9-py3-none-any.whl", hash = "sha256:e4c5beb91642376953c94db0ee2fb5d2b011c3b16749516436114ba61442f260"}, {file = "curies-0.7.9.tar.gz", hash = "sha256:3b63c5fea7b0e967629a3a384b1a8c59b56c503487c1dcbacddeab59e25db4d8"}, @@ -326,6 +346,7 @@ version = "1.3.46" description = "Diff and patch tables" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "daff-1.3.46.tar.gz", hash = "sha256:22d0da9fd6a3275b54c926a9c97b180f9258aad65113ea18f3fec52cbadcd818"}, ] @@ -336,6 +357,7 @@ version = "1.2.14" description = "Python @deprecated decorator to deprecate old python classes, functions or methods." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main", "dev"] files = [ {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, @@ -353,6 +375,7 @@ version = "2.1.0" description = "A library to handle automated deprecations" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, @@ -367,6 +390,7 @@ version = "0.12.4" description = "EditorConfig File Locator and Interpreter for Python" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "EditorConfig-0.12.4.tar.gz", hash = "sha256:24857fa1793917dd9ccf0c7810a07e05404ce9b823521c7dce22a4fb5d125f80"}, ] @@ -377,10 +401,12 @@ version = "1.1.0" description = "An implementation of lxml.xmlfile for the standard library" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "et_xmlfile-1.1.0-py3-none-any.whl", hash = "sha256:a2ba85d1d6a74ef63837eed693bcb89c3f752169b0e3e7ae5b16ca5e1b3deada"}, {file = "et_xmlfile-1.1.0.tar.gz", hash = "sha256:8eb9e2bc2f8c97e37a2dc85a09ecdcdec9d8a396530a6d5a33b30b9a92da0c5c"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "exceptiongroup" @@ -388,6 +414,8 @@ version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, @@ -402,10 +430,12 @@ version = "1.5.1" description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" optional = false python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" +groups = ["main", "dev"] files = [ {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "ghp-import" @@ -413,6 +443,7 @@ version = "2.1.0" description = "Copy your docs directly to the gh-pages branch." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343"}, {file = "ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619"}, @@ -430,6 +461,7 @@ version = "3.0.0" description = "Python bindings to the Google search engine." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "google-3.0.0-py2.py3-none-any.whl", hash = "sha256:889cf695f84e4ae2c55fbc0cfdaf4c1e729417fa52ab1db0485202ba173e4935"}, {file = "google-3.0.0.tar.gz", hash = "sha256:143530122ee5130509ad5e989f0512f7cb218b2d4eddbafbad40fd10e8d8ccbe"}, @@ -444,22 +476,23 @@ version = "2.18.0" description = "Google API client core library" optional = false python-versions = ">=3.7" +groups = ["dev"] 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"}, ] [package.dependencies] -google-auth = ">=2.14.1,<3.0.dev0" -googleapis-common-protos = ">=1.56.2,<2.0.dev0" -proto-plus = ">=1.22.3,<2.0.0dev" -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.0 || >4.21.0,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" -requests = ">=2.18.0,<3.0.0.dev0" +google-auth = ">=2.14.1,<3.0" +googleapis-common-protos = ">=1.56.2,<2.0" +proto-plus = ">=1.22.3,<2.0.0" +protobuf = ">=3.19.5,!=3.20.0,!=3.20.1,!=4.21.0,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0" +requests = ">=2.18.0,<3.0.0" [package.extras] -grpc = ["grpcio (>=1.33.2,<2.0dev)", "grpcio (>=1.49.1,<2.0dev)", "grpcio-status (>=1.33.2,<2.0.dev0)", "grpcio-status (>=1.49.1,<2.0.dev0)"] -grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] -grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0.dev0)"] +grpc = ["grpcio (>=1.33.2,<2.0)", "grpcio (>=1.49.1,<2.0) ; python_version >= \"3.11\"", "grpcio-status (>=1.33.2,<2.0)", "grpcio-status (>=1.49.1,<2.0) ; python_version >= \"3.11\""] +grpcgcp = ["grpcio-gcp (>=0.2.2,<1.0)"] +grpcio-gcp = ["grpcio-gcp (>=0.2.2,<1.0)"] [[package]] name = "google-api-python-client" @@ -467,16 +500,17 @@ version = "2.127.0" description = "Google API Client Library for Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "google-api-python-client-2.127.0.tar.gz", hash = "sha256:bbb51b0fbccdf40e536c26341e372d7800f09afebb53103bbcc94e08f14b523b"}, {file = "google_api_python_client-2.127.0-py2.py3-none-any.whl", hash = "sha256:d01c70c7840ec37888aa02b1aea5d9baba4c1701e268d1a0251640afd56e5e90"}, ] [package.dependencies] -google-api-core = ">=1.31.5,<2.0.dev0 || >2.3.0,<3.0.0.dev0" -google-auth = ">=1.32.0,<2.24.0 || >2.24.0,<2.25.0 || >2.25.0,<3.0.0.dev0" +google-api-core = ">=1.31.5,<2.0 || >=2.3.dev0,!=2.3.0,<3.0.0" +google-auth = ">=1.32.0,!=2.24.0,!=2.25.0,<3.0.0" google-auth-httplib2 = ">=0.2.0,<1.0.0" -httplib2 = ">=0.19.0,<1.dev0" +httplib2 = ">=0.19.0,<1" uritemplate = ">=3.0.1,<5" [[package]] @@ -485,6 +519,7 @@ version = "2.29.0" description = "Google Authentication Library" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "google-auth-2.29.0.tar.gz", hash = "sha256:672dff332d073227550ffc7457868ac4218d6c500b155fe6cc17d2b13602c360"}, {file = "google_auth-2.29.0-py2.py3-none-any.whl", hash = "sha256:d452ad095688cd52bae0ad6fafe027f6a6d6f560e810fec20914e17a09526415"}, @@ -496,11 +531,11 @@ pyasn1-modules = ">=0.2.1" rsa = ">=3.1.4,<5" [package.extras] -aiohttp = ["aiohttp (>=3.6.2,<4.0.0.dev0)", "requests (>=2.20.0,<3.0.0.dev0)"] +aiohttp = ["aiohttp (>=3.6.2,<4.0.0)", "requests (>=2.20.0,<3.0.0)"] enterprise-cert = ["cryptography (==36.0.2)", "pyopenssl (==22.0.0)"] pyopenssl = ["cryptography (>=38.0.3)", "pyopenssl (>=20.0.0)"] reauth = ["pyu2f (>=0.1.5)"] -requests = ["requests (>=2.20.0,<3.0.0.dev0)"] +requests = ["requests (>=2.20.0,<3.0.0)"] [[package]] name = "google-auth-httplib2" @@ -508,6 +543,7 @@ version = "0.2.0" description = "Google Authentication Library: httplib2 transport" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "google-auth-httplib2-0.2.0.tar.gz", hash = "sha256:38aa7badf48f974f1eb9861794e9c0cb2a0511a4ec0679b1f886d108f5640e05"}, {file = "google_auth_httplib2-0.2.0-py2.py3-none-any.whl", hash = "sha256:b65a0a2123300dd71281a7bf6e64d65a0759287df52729bdd1ae2e47dc311a3d"}, @@ -523,6 +559,7 @@ version = "1.2.0" description = "Google Authentication Library" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "google-auth-oauthlib-1.2.0.tar.gz", hash = "sha256:292d2d3783349f2b0734a0a0207b1e1e322ac193c2c09d8f7c613fb7cc501ea8"}, {file = "google_auth_oauthlib-1.2.0-py2.py3-none-any.whl", hash = "sha256:297c1ce4cb13a99b5834c74a1fe03252e1e499716718b190f56bcb9c4abc4faf"}, @@ -541,16 +578,17 @@ version = "1.63.0" description = "Common protobufs used in Google APIs" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "googleapis-common-protos-1.63.0.tar.gz", hash = "sha256:17ad01b11d5f1d0171c06d3ba5c04c54474e883b66b949722b4938ee2694ef4e"}, {file = "googleapis_common_protos-1.63.0-py2.py3-none-any.whl", hash = "sha256:ae45f75702f7c08b541f750854a678bd8f534a1a6bace6afe975f1d0a82d6632"}, ] [package.dependencies] -protobuf = ">=3.19.5,<3.20.0 || >3.20.0,<3.20.1 || >3.20.1,<4.21.1 || >4.21.1,<4.21.2 || >4.21.2,<4.21.3 || >4.21.3,<4.21.4 || >4.21.4,<4.21.5 || >4.21.5,<5.0.0.dev0" +protobuf = ">=3.19.5,!=3.20.0,!=3.20.1,!=4.21.1,!=4.21.2,!=4.21.3,!=4.21.4,!=4.21.5,<5.0.0" [package.extras] -grpc = ["grpcio (>=1.44.0,<2.0.0.dev0)"] +grpc = ["grpcio (>=1.44.0,<2.0.0)"] [[package]] name = "graphviz" @@ -558,10 +596,12 @@ version = "0.20.3" description = "Simple Python interface for Graphviz" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, ] +markers = {main = "extra == \"docs\""} [package.extras] dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] @@ -574,6 +614,7 @@ version = "3.0.3" description = "Lightweight in-process concurrent programming" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "greenlet-3.0.3-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:9da2bd29ed9e4f15955dd1595ad7bc9320308a3b766ef7f837e23ad4b4aac31a"}, {file = "greenlet-3.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d353cadd6083fdb056bb46ed07e4340b0869c305c8ca54ef9da3421acbdf6881"}, @@ -634,6 +675,7 @@ files = [ {file = "greenlet-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:c5ee858cfe08f34712f548c3c363e807e7186f03ad7a5039ebadb29e8c6be067"}, {file = "greenlet-3.0.3.tar.gz", hash = "sha256:43374442353259554ce33599da8b692d5aa96f8976d567d4badf263371fbe491"}, ] +markers = {main = "extra == \"docs\" and (platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\")", dev = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} [package.extras] docs = ["Sphinx", "furo"] @@ -645,6 +687,7 @@ version = "6.1.0" description = "Google Spreadsheets Python API" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "gspread-6.1.0-py3-none-any.whl", hash = "sha256:67aa3335cfcbb2625e41b53129433ba779f2890244a4c532624362ce5e022342"}, {file = "gspread-6.1.0.tar.gz", hash = "sha256:576b72b628b251d2ee41e02b982d3c714d511d2a5aa3a88e587ed9efc4d6e752"}, @@ -661,6 +704,7 @@ version = "1.1.2" description = "Complete Google Sheets formatting support for gspread worksheets" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "gspread-formatting-1.1.2.tar.gz", hash = "sha256:4d954d8c283880c4189f5684652b114c3889ffa4b442f339b80e2371782cb4c0"}, {file = "gspread_formatting-1.1.2-py2.py3-none-any.whl", hash = "sha256:e5d14477f18ec2f08db0a00d22470d1c621d53b0633412c4873d86712c9a7bca"}, @@ -675,6 +719,7 @@ version = "0.9.1" description = "Honey Badger reader - a generic file/url/string open and read tool" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "hbreader-0.9.1-py3-none-any.whl", hash = "sha256:9a6e76c9d1afc1b977374a5dc430a1ebb0ea0488205546d4678d6e31cc5f6801"}, {file = "hbreader-0.9.1.tar.gz", hash = "sha256:d2c132f8ba6276d794c66224c3297cec25c8079d0a4cf019c061611e0a3b94fa"}, @@ -686,13 +731,14 @@ version = "0.22.0" description = "A comprehensive HTTP client library." optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["dev"] files = [ {file = "httplib2-0.22.0-py3-none-any.whl", hash = "sha256:14ae0a53c1ba8f3d37e9e27cf37eabb0fb9980f435ba405d546948b009dd64dc"}, {file = "httplib2-0.22.0.tar.gz", hash = "sha256:d7a10bc5ef5ab08322488bde8c726eeee5c8618723fdb399597ec58f3d82df81"}, ] [package.dependencies] -pyparsing = {version = ">=2.4.2,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.0.2 || >3.0.2,<3.0.3 || >3.0.3,<4", markers = "python_version > \"3.0\""} +pyparsing = {version = ">=2.4.2,!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,<4", markers = "python_version > \"3.0\""} [[package]] name = "idna" @@ -700,36 +746,19 @@ version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" +groups = ["main", "dev"] files = [ {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] -[[package]] -name = "importlib-metadata" -version = "7.1.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-7.1.0-py3-none-any.whl", hash = "sha256:30962b96c0c223483ed6cc7280e7f0199feb01a0e40cfae4d4450fc6fab1f570"}, - {file = "importlib_metadata-7.1.0.tar.gz", hash = "sha256:b78938b926ee8d5f020fc4772d487045805a55ddbad2ecf21c6d60938dc7fcd2"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "jaraco.test (>=5.4)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy", "pytest-perf (>=0.9.2)", "pytest-ruff (>=0.2.1)"] - [[package]] name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, @@ -741,6 +770,7 @@ version = "0.6.1" description = "An ISO 8601 date/time/duration parser and formatter" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, @@ -755,10 +785,12 @@ version = "20.11.0" description = "Operations with ISO 8601 durations" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] arrow = ">=0.15.0" @@ -769,10 +801,12 @@ version = "3.1.3" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "Jinja2-3.1.3-py3-none-any.whl", hash = "sha256:7d6d50dd97d52cbc355597bd845fabfbac3f551e1f99619e39a35ce8c370b5fa"}, {file = "Jinja2-3.1.3.tar.gz", hash = "sha256:ac8bd6544d4bb2c9792bf3a159e80bba8fda7f07e81bc3aed565432d5925ba90"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] MarkupSafe = ">=2.0" @@ -786,6 +820,7 @@ version = "1.15.1" description = "JavaScript unobfuscator and beautifier." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "jsbeautifier-1.15.1.tar.gz", hash = "sha256:ebd733b560704c602d744eafc839db60a1ee9326e30a2a80c4adb8718adc1b24"}, ] @@ -800,6 +835,7 @@ version = "0.1.9" description = "Python library for denormalizing nested dicts or json objects to tables and back" optional = false python-versions = ">=3.7.0" +groups = ["main", "dev"] files = [ {file = "json_flattener-0.1.9-py3-none-any.whl", hash = "sha256:6b027746f08bf37a75270f30c6690c7149d5f704d8af1740c346a3a1236bc941"}, {file = "json_flattener-0.1.9.tar.gz", hash = "sha256:84cf8523045ffb124301a602602201665fcb003a171ece87e6f46ed02f7f0c15"}, @@ -815,10 +851,12 @@ version = "1.3.1" description = "JSON as python objects" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "jsonasobj-1.3.1-py3-none-any.whl", hash = "sha256:b9e329dc1ceaae7cf5d5b214684a0b100e0dad0be6d5bbabac281ec35ddeca65"}, {file = "jsonasobj-1.3.1.tar.gz", hash = "sha256:d52e0544a54a08f6ea3f77fa3387271e3648655e0eace2f21e825c26370e44a2"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "jsonasobj2" @@ -826,6 +864,7 @@ version = "1.0.4" description = "JSON as python objects - version 2" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "jsonasobj2-1.0.4-py3-none-any.whl", hash = "sha256:12e86f86324d54fcf60632db94ea74488d5314e3da554c994fe1e2c6f29acb79"}, {file = "jsonasobj2-1.0.4.tar.gz", hash = "sha256:f50b1668ef478004aa487b2d2d094c304e5cb6b79337809f4a1f2975cc7fbb4e"}, @@ -840,10 +879,12 @@ version = "1.33" description = "Apply JSON-Patches (RFC 6902)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main", "dev"] files = [ {file = "jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade"}, {file = "jsonpatch-1.33.tar.gz", hash = "sha256:9fcd4009c41e6d12348b4a0ff2563ba56a2923a7dfee731d004e212e1ee5030c"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] jsonpointer = ">=1.9" @@ -854,10 +895,12 @@ version = "1.6.1" description = "A final implementation of JSONPath for Python that aims to be standard compliant, including arithmetic and binary comparison operators and providing clear AST for metaprogramming." optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "jsonpath-ng-1.6.1.tar.gz", hash = "sha256:086c37ba4917304850bd837aeab806670224d3f038fe2833ff593a672ef0a5fa"}, {file = "jsonpath_ng-1.6.1-py3-none-any.whl", hash = "sha256:8f22cd8273d7772eea9aaa84d922e0841aa36fdb8a2c6b7f6c3791a16a9bc0be"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] ply = "*" @@ -868,10 +911,12 @@ version = "2.4" description = "Identify specific nodes in a JSON document (RFC 6901)" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" +groups = ["main", "dev"] files = [ {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "jsonschema" @@ -879,6 +924,7 @@ version = "4.21.1" description = "An implementation of JSON Schema validation for Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, @@ -890,7 +936,7 @@ fqdn = {version = "*", optional = true, markers = "extra == \"format\""} idna = {version = "*", optional = true, markers = "extra == \"format\""} isoduration = {version = "*", optional = true, markers = "extra == \"format\""} jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format\""} -jsonschema-specifications = ">=2023.03.6" +jsonschema-specifications = ">=2023.3.6" referencing = ">=0.28.4" rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format\""} rfc3987 = {version = "*", optional = true, markers = "extra == \"format\""} @@ -908,6 +954,7 @@ version = "2023.12.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, @@ -922,10 +969,12 @@ version = "1.7.8" description = "Linked Open Data Modeling Language" optional = false python-versions = "<4.0.0,>=3.8.1" +groups = ["main", "dev"] files = [ {file = "linkml-1.7.8-py3-none-any.whl", hash = "sha256:4b8ebe33b422517b08ca01802dc2899ac133c502a71d811c58fa6f4263130709"}, {file = "linkml-1.7.8.tar.gz", hash = "sha256:af48ee1ad6751c8d20de2832dbeefe225da9be5f39a7f8ea7821a691cf7c0148"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] antlr4-python3-runtime = ">=4.9.0,<4.10" @@ -964,10 +1013,12 @@ version = "0.1.0" description = "LinkML Data Operations API" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "linkml_dataops-0.1.0-py3-none-any.whl", hash = "sha256:193cf7f659e5f07946d2c2761896910d5f7151d91282543b1363801f68307f4c"}, {file = "linkml_dataops-0.1.0.tar.gz", hash = "sha256:4550eab65e78b70dc3b9c651724a94ac2b1d1edb2fbe576465f1d6951a54ed04"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] jinja2 = "*" @@ -982,6 +1033,7 @@ version = "1.7.5" description = "Runtime environment for LinkML, the Linked open data modeling language" optional = false python-versions = "<4.0,>=3.8" +groups = ["main", "dev"] files = [ {file = "linkml_runtime-1.7.5-py3-none-any.whl", hash = "sha256:c58000c7c68fa97b7d76c50421a85a64e25f07eec5bcac464bc00c4cd79007a6"}, {file = "linkml_runtime-1.7.5.tar.gz", hash = "sha256:b31197a5398359441ae1ed43470c54377a1d08db961366dda670300dddcd71d7"}, @@ -993,7 +1045,7 @@ curies = ">=0.5.4" deprecated = "*" hbreader = "*" json-flattener = ">=0.1.9" -jsonasobj2 = ">=1.0.4,<2.dev0" +jsonasobj2 = ">=1.0.4,<2" jsonschema = ">=3.2.0" prefixcommons = ">=0.1.12" prefixmaps = ">=0.1.4" @@ -1008,14 +1060,12 @@ version = "3.6" description = "Python implementation of John Gruber's Markdown." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "Markdown-3.6-py3-none-any.whl", hash = "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f"}, {file = "Markdown-3.6.tar.gz", hash = "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"}, ] -[package.dependencies] -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} - [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -1026,6 +1076,7 @@ version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, @@ -1088,6 +1139,7 @@ files = [ {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "mergedeep" @@ -1095,6 +1147,7 @@ version = "1.3.4" description = "A deep merge function for 🐍." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307"}, {file = "mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8"}, @@ -1106,6 +1159,7 @@ version = "1.6.0" description = "Project documentation with Markdown." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mkdocs-1.6.0-py3-none-any.whl", hash = "sha256:1eb5cb7676b7d89323e62b56235010216319217d4af5ddc543a91beb8d125ea7"}, {file = "mkdocs-1.6.0.tar.gz", hash = "sha256:a73f735824ef83a4f3bcb7a231dcab23f5a838f88b7efc54a0eef5fbdbc3c512"}, @@ -1115,7 +1169,6 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" -importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -1129,7 +1182,7 @@ 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.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)"] +min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4) ; platform_system == \"Windows\"", "ghp-import (==1.0)", "importlib-metadata (==4.4) ; python_version < \"3.10\"", "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-get-deps" @@ -1137,13 +1190,13 @@ version = "0.2.0" description = "MkDocs extension that lists all dependencies according to a mkdocs.yml file" optional = false python-versions = ">=3.8" +groups = ["dev"] 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] -importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" @@ -1154,6 +1207,7 @@ version = "8.5.11" description = "Documentation that simply works" optional = false python-versions = ">=3.7" +groups = ["dev"] 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"}, @@ -1174,6 +1228,7 @@ version = "1.3.1" description = "Extension pack for Python Markdown and MkDocs Material." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31"}, {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, @@ -1185,6 +1240,7 @@ version = "0.6.0" description = "A MkDocs plugin for including mermaid graphs in markdown sources" optional = false python-versions = ">=3.5" +groups = ["dev"] 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"}, @@ -1206,6 +1262,7 @@ version = "0.1.2" description = "More click." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "more_click-0.1.2-py3-none-any.whl", hash = "sha256:f6387af37ef7e7423bd94b72a81a53c79c5086a3bfe5cc035da534ff0c2a0a9e"}, {file = "more_click-0.1.2.tar.gz", hash = "sha256:085da66d5a9b823c5d912a888dca1fa0c8b3a14ed1b21ea9c8a1b814857a3981"}, @@ -1223,6 +1280,7 @@ version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" +groups = ["main"] files = [ {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, @@ -1268,6 +1326,7 @@ version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "oauthlib-3.2.2-py3-none-any.whl", hash = "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca"}, {file = "oauthlib-3.2.2.tar.gz", hash = "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918"}, @@ -1284,6 +1343,7 @@ version = "0.3.3" description = "COGS Operates Google Sheets" optional = false python-versions = ">=3.6, <4" +groups = ["dev"] files = [ {file = "ontodev-cogs-0.3.3.tar.gz", hash = "sha256:04cf448eda59e0645c6626453f7617a6b2be3129c8586c4d4a515ad031f61a18"}, {file = "ontodev_cogs-0.3.3-py3-none-any.whl", hash = "sha256:b3299b7884891d00e016f9cb0329a1a0dc8af4bfba45dce3815f654360b1f333"}, @@ -1305,10 +1365,12 @@ version = "3.1.2" description = "A Python library to read/write Excel 2010 xlsx/xlsm files" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "openpyxl-3.1.2-py2.py3-none-any.whl", hash = "sha256:f91456ead12ab3c6c2e9491cf33ba6d08357d802192379bb482f1033ade496f5"}, {file = "openpyxl-3.1.2.tar.gz", hash = "sha256:a6f5977418eff3b2d5500d54d9db50c8277a368436f4e4f8ddb1be3422870184"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] et-xmlfile = "*" @@ -1319,6 +1381,7 @@ version = "24.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, @@ -1330,6 +1393,7 @@ version = "2.2.2" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.9" +groups = ["main"] files = [ {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, @@ -1403,10 +1467,12 @@ version = "1.20.1" description = "parse() is the opposite of format()" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "parse-1.20.1-py2.py3-none-any.whl", hash = "sha256:76ddd5214255ae711db4c512be636151fbabaa948c6f30115aecc440422ca82c"}, {file = "parse-1.20.1.tar.gz", hash = "sha256:09002ca350ad42e76629995f71f7b518670bcf93548bdde3684fd55d2be51975"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "pathspec" @@ -1414,6 +1480,7 @@ version = "0.12.1" description = "Utility library for gitignore style pattern matching of file paths." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, @@ -1425,6 +1492,7 @@ version = "4.2.1" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "platformdirs-4.2.1-py3-none-any.whl", hash = "sha256:17d5a1161b3fd67b390023cb2d3b026bbd40abde6fdb052dfbd3a29c3ba22ee1"}, {file = "platformdirs-4.2.1.tar.gz", hash = "sha256:031cd18d4ec63ec53e82dceaac0417d218a6863f7745dfcc9efe7793b7039bdf"}, @@ -1441,6 +1509,7 @@ version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1456,10 +1525,12 @@ version = "3.11" description = "Python Lex & Yacc" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "prefixcommons" @@ -1467,6 +1538,7 @@ version = "0.1.12" description = "A python API for working with ID prefixes" optional = false python-versions = ">=3.7,<4.0" +groups = ["main", "dev"] files = [ {file = "prefixcommons-0.1.12-py3-none-any.whl", hash = "sha256:16dbc0a1f775e003c724f19a694fcfa3174608f5c8b0e893d494cf8098ac7f8b"}, {file = "prefixcommons-0.1.12.tar.gz", hash = "sha256:22c4e2d37b63487b3ab48f0495b70f14564cb346a15220f23919eb0c1851f69f"}, @@ -1484,6 +1556,7 @@ version = "0.2.4" description = "A python library for retrieving semantic prefix maps" optional = false python-versions = "<4.0,>=3.8" +groups = ["main", "dev"] files = [ {file = "prefixmaps-0.2.4-py3-none-any.whl", hash = "sha256:89bf0e6fb08c276f754f9624c42adf2e87c64ee92a3dde1f7eff01f22d85b512"}, {file = "prefixmaps-0.2.4.tar.gz", hash = "sha256:ae86a1b31189d0516d199756d5808f75f44b39e86546c356cc78c0fe8d2078af"}, @@ -1499,13 +1572,14 @@ version = "1.23.0" description = "Beautiful, Pythonic protocol buffers." optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "proto-plus-1.23.0.tar.gz", hash = "sha256:89075171ef11988b3fa157f5dbd8b9cf09d65fffee97e29ce403cd8defba19d2"}, {file = "proto_plus-1.23.0-py3-none-any.whl", hash = "sha256:a829c79e619e1cf632de091013a4173deed13a55f326ef84f05af6f50ff4c82c"}, ] [package.dependencies] -protobuf = ">=3.19.0,<5.0.0dev" +protobuf = ">=3.19.0,<5.0.0" [package.extras] testing = ["google-api-core[grpc] (>=1.31.5)"] @@ -1516,6 +1590,7 @@ version = "4.25.3" description = "" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, @@ -1536,6 +1611,7 @@ version = "0.6.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pyasn1-0.6.0-py2.py3-none-any.whl", hash = "sha256:cca4bb0f2df5504f02f6f8a775b6e416ff9b0b3b16f7ee80b5a3153d9b804473"}, {file = "pyasn1-0.6.0.tar.gz", hash = "sha256:3a35ab2c4b5ef98e17dfdec8ab074046fbda76e281c5a706ccd82328cfc8f64c"}, @@ -1547,6 +1623,7 @@ version = "0.4.0" description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pyasn1_modules-0.4.0-py3-none-any.whl", hash = "sha256:be04f15b66c206eed667e0bb5ab27e2b1855ea54a842e5037738099e8ca4ae0b"}, {file = "pyasn1_modules-0.4.0.tar.gz", hash = "sha256:831dbcea1b177b28c9baddf4c6d1013c24c3accd14a1873fffaa6a2e905f17b6"}, @@ -1561,6 +1638,7 @@ version = "2.7.1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, @@ -1580,6 +1658,7 @@ version = "2.18.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {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"}, @@ -1663,7 +1742,7 @@ files = [ ] [package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +typing-extensions = ">=4.6.0,!=4.7.0" [[package]] name = "pygments" @@ -1671,13 +1750,14 @@ version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, ] [package.extras] -plugins = ["importlib-metadata"] +plugins = ["importlib-metadata ; python_version < \"3.8\""] windows-terminal = ["colorama (>=0.4.6)"] [[package]] @@ -1686,10 +1766,12 @@ version = "0.11.10" description = "Python JSON Schema Grammar interpreter" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "PyJSG-0.11.10-py3-none-any.whl", hash = "sha256:10af60ff42219be7e85bf7f11c19b648715b0b29eb2ddbd269e87069a7c3f26d"}, {file = "PyJSG-0.11.10.tar.gz", hash = "sha256:4bd6e3ff2833fa2b395bbe803a2d72a5f0bab5b7285bccd0da1a1bc0aee88bfa"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] antlr4-python3-runtime = ">=4.9.3,<4.10.0" @@ -1701,6 +1783,7 @@ version = "10.8" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pymdown_extensions-10.8-py3-none-any.whl", hash = "sha256:3539003ff0d5e219ba979d2dc961d18fcad5ac259e66c764482e8347b4c0503c"}, {file = "pymdown_extensions-10.8.tar.gz", hash = "sha256:91ca336caf414e1e5e0626feca86e145de9f85a3921a7bcbd32890b51738c428"}, @@ -1719,6 +1802,7 @@ version = "3.1.2" description = "pyparsing module - Classes and methods to define and execute parsing grammars" optional = false python-versions = ">=3.6.8" +groups = ["main", "dev"] files = [ {file = "pyparsing-3.1.2-py3-none-any.whl", hash = "sha256:f9db75911801ed778fe61bb643079ff86601aca99fcae6345aa67292038fb742"}, {file = "pyparsing-3.1.2.tar.gz", hash = "sha256:a1bac0ce561155ecc3ed78ca94d3c9378656ad4c94c1270de543f621420f94ad"}, @@ -1733,10 +1817,12 @@ version = "0.8.1" description = "Python ShEx Implementation" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "PyShEx-0.8.1-py3-none-any.whl", hash = "sha256:6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a"}, {file = "PyShEx-0.8.1.tar.gz", hash = "sha256:3c5c4d45fe27faaadae803cb008c41acf8ee784da7868b04fd84967e75be70d0"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] cfgraph = ">=0.2.1" @@ -1755,10 +1841,12 @@ version = "0.9.1" description = "PyShExC - Python ShEx compiler" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "PyShExC-0.9.1-py2.py3-none-any.whl", hash = "sha256:efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028"}, {file = "PyShExC-0.9.1.tar.gz", hash = "sha256:35a9975d4b9afeb20ef710fb6680871756381d0c39fbb5470b3b506581a304d3"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] antlr4-python3-runtime = ">=4.9.3,<4.10.0" @@ -1774,6 +1862,7 @@ version = "0.5.4" description = "Easily pick a place to store data for your python package." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "pystow-0.5.4-py3-none-any.whl", hash = "sha256:c377cc9fff11127007e60eb5c4dc18f2ffd986c0d0cec27134cdcd4c805bc7d8"}, {file = "pystow-0.5.4.tar.gz", hash = "sha256:2692180cb405bd77259bee6c7f4db545d10e81939980064730609f21750567ff"}, @@ -1798,6 +1887,7 @@ version = "8.1.1" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "pytest-8.1.1-py3-none-any.whl", hash = "sha256:2a8386cfc11fa9d2c50ee7b2a57e7d898ef90470a7a34c4b949ff59662bb78b7"}, {file = "pytest-8.1.1.tar.gz", hash = "sha256:ac978141a75948948817d360297b7aae0fcb9d6ff6bc9ec6d514b85d5a65c044"}, @@ -1820,6 +1910,7 @@ version = "2015.11.4" description = "Configures logging and allows tweaking the log level with a py.test flag" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "pytest-logging-2015.11.4.tar.gz", hash = "sha256:cec5c85ecf18aab7b2ead5498a31b9f758680ef5a902b9054ab3f2bdbb77c896"}, ] @@ -1833,6 +1924,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main", "dev"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -1847,6 +1939,7 @@ version = "0.4.0" description = "A pure Python implementation of the trie data structure." optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "PyTrie-0.4.0-py3-none-any.whl", hash = "sha256:f687c224ee8c66cda8e8628a903011b692635ffbb08d4b39c5f92b18eb78c950"}, {file = "PyTrie-0.4.0.tar.gz", hash = "sha256:8f4488f402d3465993fb6b6efa09866849ed8cda7903b50647b7d0342b805379"}, @@ -1861,6 +1954,7 @@ version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, @@ -1872,6 +1966,7 @@ version = "6.0.1" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, @@ -1932,6 +2027,7 @@ version = "0.1" description = "A custom YAML tag for referencing environment variables in YAML files. " optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "pyyaml_env_tag-0.1-py3-none-any.whl", hash = "sha256:af31106dec8a4d68c60207c1886031cbf839b68aa7abccdb19868200532c2069"}, {file = "pyyaml_env_tag-0.1.tar.gz", hash = "sha256:70092675bda14fdec33b31ba77e7543de9ddc88f2e5b99160396572d11525bdb"}, @@ -1946,6 +2042,7 @@ version = "6.3.2" description = "RDFLib is a Python library for working with RDF, a simple yet powerful language for representing information." optional = false python-versions = ">=3.7,<4.0" +groups = ["main", "dev"] files = [ {file = "rdflib-6.3.2-py3-none-any.whl", hash = "sha256:36b4e74a32aa1e4fa7b8719876fb192f19ecd45ff932ea5ebbd2e417a0247e63"}, {file = "rdflib-6.3.2.tar.gz", hash = "sha256:72af591ff704f4caacea7ecc0c5a9056b8553e0489dd4f35a9bc52dbd41522e0"}, @@ -1967,10 +2064,12 @@ version = "0.6.1" description = "rdflib extension adding JSON-LD parser and serializer" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "rdflib-jsonld-0.6.1.tar.gz", hash = "sha256:eda5a42a2e09f80d4da78e32b5c684bccdf275368f1541e6b7bcddfb1382a0e0"}, {file = "rdflib_jsonld-0.6.1-py2.py3-none-any.whl", hash = "sha256:bcf84317e947a661bae0a3f2aee1eced697075fc4ac4db6065a3340ea0f10fc2"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] rdflib = ">=5.0.0" @@ -1981,10 +2080,12 @@ version = "1.0.3" description = "Shim for rdflib 5 and 6 incompatibilities" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "rdflib_shim-1.0.3-py3-none-any.whl", hash = "sha256:7a853e7750ef1e9bf4e35dea27d54e02d4ed087de5a9e0c329c4a6d82d647081"}, {file = "rdflib_shim-1.0.3.tar.gz", hash = "sha256:d955d11e2986aab42b6830ca56ac6bc9c893abd1d049a161c6de2f1b99d4fc0d"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] rdflib = ">=5.0.0" @@ -1996,6 +2097,7 @@ version = "0.35.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "referencing-0.35.0-py3-none-any.whl", hash = "sha256:8080727b30e364e5783152903672df9b6b091c926a146a759080b62ca3126cd6"}, {file = "referencing-0.35.0.tar.gz", hash = "sha256:191e936b0c696d0af17ad7430a3dc68e88bc11be6514f4757dc890f04ab05889"}, @@ -2011,6 +2113,7 @@ version = "2.31.0" description = "Python HTTP for Humans." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, @@ -2032,6 +2135,7 @@ version = "2.0.0" description = "OAuthlib authentication support for Requests." optional = false python-versions = ">=3.4" +groups = ["dev"] files = [ {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, @@ -2050,10 +2154,12 @@ version = "0.1.4" description = "A pure python RFC3339 validator" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +groups = ["main", "dev"] files = [ {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] six = "*" @@ -2064,10 +2170,12 @@ version = "1.3.8" description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "rpds-py" @@ -2075,6 +2183,7 @@ version = "0.18.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] 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"}, @@ -2183,6 +2292,7 @@ version = "4.9" description = "Pure-Python RSA implementation" optional = false python-versions = ">=3.6,<4" +groups = ["dev"] files = [ {file = "rsa-4.9-py3-none-any.whl", hash = "sha256:90260d9058e514786967344d0ef75fa8727eed8a7d2e43ce9f4bcf1b536174f7"}, {file = "rsa-4.9.tar.gz", hash = "sha256:e38464a49c6c85d7f1351b0126661487a7e0a14a50f1675ec50eb34d4f20ef21"}, @@ -2197,10 +2307,12 @@ version = "0.18.6" description = "ruamel.yaml is a YAML parser/emitter that supports roundtrip preservation of comments, seq/map flow style, and map key order" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "ruamel.yaml-0.18.6-py3-none-any.whl", hash = "sha256:57b53ba33def16c4f3d807c0ccbc00f8a6081827e81ba2491691b76882d0c636"}, {file = "ruamel.yaml-0.18.6.tar.gz", hash = "sha256:8b27e6a217e786c6fbe5634d8f3f11bc63e0f80f6a5890f28863d9c45aac311b"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] "ruamel.yaml.clib" = {version = ">=0.2.7", markers = "platform_python_implementation == \"CPython\" and python_version < \"3.13\""} @@ -2215,6 +2327,7 @@ version = "0.2.8" description = "C version of reader, parser and emitter for ruamel.yaml derived from libyaml" optional = false python-versions = ">=3.6" +groups = ["main", "dev"] 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"}, @@ -2267,6 +2380,7 @@ files = [ {file = "ruamel.yaml.clib-0.2.8-cp39-cp39-win_amd64.whl", hash = "sha256:25ac8c08322002b06fa1d49d1646181f0b2c72f5cbc15a85e80b4c30a544bb15"}, {file = "ruamel.yaml.clib-0.2.8.tar.gz", hash = "sha256:beb2e0404003de9a4cab9753a8805a8fe9320ee6673136ed7f04255fe60bb512"}, ] +markers = {main = "platform_python_implementation == \"CPython\" and extra == \"docs\"", dev = "platform_python_implementation == \"CPython\""} [[package]] name = "schemasheets" @@ -2274,6 +2388,7 @@ version = "0.1.24" description = "Package to author schemas using spreadsheets" optional = false python-versions = ">=3.9,<4.0" +groups = ["dev"] files = [ {file = "schemasheets-0.1.24-py3-none-any.whl", hash = "sha256:b7ebceb28e6cd61bbe743945d54e5d45540e794cfc0432b52cb228af8015c4cc"}, {file = "schemasheets-0.1.24.tar.gz", hash = "sha256:af18b1012994989cd6c811b770ed547ac52067a640e04b5a4a63cf32306dab3a"}, @@ -2292,6 +2407,7 @@ version = "69.5.1" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, @@ -2299,7 +2415,7 @@ files = [ [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov ; platform_python_implementation != \"PyPy\"", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] [[package]] @@ -2308,10 +2424,12 @@ version = "0.8.2" description = "ShExJSG - Astract Syntax Tree for the ShEx 2.0 language" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "ShExJSG-0.8.2-py2.py3-none-any.whl", hash = "sha256:3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766"}, {file = "ShExJSG-0.8.2.tar.gz", hash = "sha256:f17a629fc577fa344382bdee143cd9ff86588537f9f811f66cea6f63cdbcd0b6"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] pyjsg = ">=0.11.10" @@ -2322,6 +2440,7 @@ version = "1.16.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +groups = ["main", "dev"] files = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -2333,6 +2452,7 @@ version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" optional = false python-versions = "*" +groups = ["main", "dev"] files = [ {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, @@ -2344,6 +2464,7 @@ version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, @@ -2355,10 +2476,12 @@ version = "0.5.1" description = "SPARQL Slurper for rdflib" optional = false python-versions = ">=3.7.4" +groups = ["main", "dev"] files = [ {file = "sparqlslurper-0.5.1-py3-none-any.whl", hash = "sha256:ae49b2d8ce3dd38df7a40465b228ad5d33fb7e11b3f248d195f9cadfc9cfff87"}, {file = "sparqlslurper-0.5.1.tar.gz", hash = "sha256:9282ebb064fc6152a58269d194cb1e7b275b0f095425a578d75b96dcc851f546"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] rdflib = ">=5.0.0" @@ -2371,10 +2494,12 @@ version = "2.0.0" description = "SPARQL Endpoint interface to Python" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "SPARQLWrapper-2.0.0-py3-none-any.whl", hash = "sha256:c99a7204fff676ee28e6acef327dc1ff8451c6f7217dcd8d49e8872f324a8a20"}, {file = "SPARQLWrapper-2.0.0.tar.gz", hash = "sha256:3fed3ebcc77617a4a74d2644b86fd88e0f32e7f7003ac7b2b334c026201731f1"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] rdflib = ">=6.1.1" @@ -2391,6 +2516,7 @@ version = "2.0.29" description = "Database Abstraction Library" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "SQLAlchemy-2.0.29-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c142852ae192e9fe5aad5c350ea6befe9db14370b34047e1f0f7cf99e63c63b"}, {file = "SQLAlchemy-2.0.29-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:99a1e69d4e26f71e750e9ad6fdc8614fbddb67cfe2173a3628a2566034e223c7"}, @@ -2442,6 +2568,7 @@ files = [ {file = "SQLAlchemy-2.0.29-py3-none-any.whl", hash = "sha256:dc4ee2d4ee43251905f88637d5281a8d52e916a021384ec10758826f5cbae305"}, {file = "SQLAlchemy-2.0.29.tar.gz", hash = "sha256:bd9566b8e58cabd700bc367b60e90d9349cd16f0984973f98a9a09f9c64e86f0"}, ] +markers = {main = "extra == \"docs\""} [package.dependencies] greenlet = {version = "!=0.4.17", markers = "platform_machine == \"aarch64\" or platform_machine == \"ppc64le\" or platform_machine == \"x86_64\" or platform_machine == \"amd64\" or platform_machine == \"AMD64\" or platform_machine == \"win32\" or platform_machine == \"WIN32\""} @@ -2478,6 +2605,7 @@ version = "0.4.15" description = "An Enum that inherits from str." optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "StrEnum-0.4.15-py3-none-any.whl", hash = "sha256:a30cda4af7cc6b5bf52c8055bc4bf4b2b6b14a93b574626da33df53cf7740659"}, {file = "StrEnum-0.4.15.tar.gz", hash = "sha256:878fb5ab705442070e4dd1929bb5e2249511c0bcf2b0eeacf3bcd80875c82eff"}, @@ -2494,6 +2622,7 @@ version = "1.2.0" description = "String case converter." optional = false python-versions = "*" +groups = ["main"] files = [ {file = "stringcase-1.2.0.tar.gz", hash = "sha256:48a06980661908efe8d9d34eab2b6c13aefa2163b3ced26972902e3bdfd87008"}, ] @@ -2504,6 +2633,7 @@ version = "0.9.0" description = "Pretty-print tabular data" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f"}, {file = "tabulate-0.9.0.tar.gz", hash = "sha256:0095b12bf5966de529c0feb1fa08671671b3368eec77d7ef7ab114be2c068b3c"}, @@ -2518,6 +2648,7 @@ version = "2.4.0" description = "ANSI color formatting for output in terminal" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "termcolor-2.4.0-py3-none-any.whl", hash = "sha256:9297c0df9c99445c2412e832e882a7884038a25617c60cea2ad69488d4040d63"}, {file = "termcolor-2.4.0.tar.gz", hash = "sha256:aab9e56047c8ac41ed798fa36d892a37aca6b3e9159f3e0c24bc64a9b3ac7b7a"}, @@ -2532,6 +2663,8 @@ version = "2.0.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version == \"3.10\"" files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, @@ -2543,6 +2676,7 @@ version = "4.66.2" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, @@ -2563,10 +2697,12 @@ version = "2.9.0.20240316" description = "Typing stubs for python-dateutil" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "types-python-dateutil-2.9.0.20240316.tar.gz", hash = "sha256:5d2f2e240b86905e40944dd787db6da9263f0deabef1076ddaed797351ec0202"}, {file = "types_python_dateutil-2.9.0.20240316-py3-none-any.whl", hash = "sha256:6b8cb66d960771ce5ff974e9dd45e38facb81718cc1e208b10b1baccbfdbee3b"}, ] +markers = {main = "extra == \"docs\""} [[package]] name = "typing-extensions" @@ -2574,6 +2710,7 @@ version = "4.11.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, @@ -2585,6 +2722,7 @@ version = "2024.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["main"] files = [ {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, @@ -2596,10 +2734,12 @@ version = "1.3.0" description = "RFC 6570 URI Template Processor" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, ] +markers = {main = "extra == \"docs\""} [package.extras] dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] @@ -2610,6 +2750,7 @@ version = "4.1.1" description = "Implementation of RFC 6570 URI Templates" optional = false python-versions = ">=3.6" +groups = ["dev"] files = [ {file = "uritemplate-4.1.1-py2.py3-none-any.whl", hash = "sha256:830c08b8d99bdd312ea4ead05994a38e8936266f84b9a7878232db50b044e02e"}, {file = "uritemplate-4.1.1.tar.gz", hash = "sha256:4346edfc5c3b79f694bccd6d6099a322bbeb628dbf2cd86eea55a456ce5124f0"}, @@ -2621,13 +2762,14 @@ version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2638,6 +2780,7 @@ version = "4.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] files = [ {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:39cb34b1f1afbf23e9562501673e7146777efe95da24fab5707b88f7fb11649b"}, {file = "watchdog-4.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c522392acc5e962bcac3b22b9592493ffd06d1fc5d755954e6be9f4990de932b"}, @@ -2669,6 +2812,7 @@ files = [ {file = "watchdog-4.0.0-py3-none-win_ia64.whl", hash = "sha256:9a03e16e55465177d416699331b0f3564138f1807ecc5f2de9d55d8f188d08c7"}, {file = "watchdog-4.0.0.tar.gz", hash = "sha256:e3e7065cbdabe6183ab82199d7a4f6b3ba0a438c5a512a68559846ccb76a78ec"}, ] +markers = {main = "extra == \"docs\""} [package.extras] watchmedo = ["PyYAML (>=3.10)"] @@ -2679,10 +2823,12 @@ version = "1.13" description = "A library for working with the color formats defined by HTML and CSS." optional = false python-versions = ">=3.7" +groups = ["main", "dev"] files = [ {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, ] +markers = {main = "extra == \"docs\""} [package.extras] docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] @@ -2694,6 +2840,7 @@ version = "1.16.0" description = "Module for decorators, wrappers and monkey patching." optional = false python-versions = ">=3.6" +groups = ["main", "dev"] files = [ {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, @@ -2767,25 +2914,10 @@ files = [ {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, ] -[[package]] -name = "zipp" -version = "3.18.1" -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"}, -] - -[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)"] - [extras] docs = ["linkml"] [metadata] -lock-version = "2.0" -python-versions = ">=3.9,<3.13" -content-hash = "202ac816d3eaef06b635098d127e5ba6a4837d2b207200900281220518f6c53f" +lock-version = "2.1" +python-versions = ">=3.10,<3.13" +content-hash = "35c44982ce919987c5d31bd72d51c15eb41026534dc135f9bc110e45c8c2ea6f" diff --git a/project/excel/translator_testing_model.xlsx b/project/excel/translator_testing_model.xlsx index de1b275..8568fe0 100644 Binary files a/project/excel/translator_testing_model.xlsx and b/project/excel/translator_testing_model.xlsx differ diff --git a/project/graphql/translator_testing_model.graphql b/project/graphql/translator_testing_model.graphql index 0e8e82a..a3de7a3 100644 --- a/project/graphql/translator_testing_model.graphql +++ b/project/graphql/translator_testing_model.graphql @@ -7,7 +7,7 @@ type AcceptanceTestAsset inputCategory: ConceptCategory predicateId: PredicateType predicateName: String - outputId: Uriorcurie + outputIds: [Uriorcurie] outputName: String outputCategory: ConceptCategory association: AssociationCategory @@ -52,7 +52,6 @@ type AcceptanceTestCase inputCategory: ConceptCategory outputCategory: ConceptCategory components: [ComponentEnum] - testEnv: TestEnvEnum tags: [String] testAssets: [AcceptanceTestAsset]! } @@ -133,7 +132,6 @@ type PathfinderTestCase testAssets: [PathfinderTestAsset]! testCaseObjective: TestObjectiveEnum components: [ComponentEnum] - testEnv: TestEnvEnum } type PerformanceTestCase @@ -154,7 +152,6 @@ type PerformanceTestCase inputCategory: ConceptCategory outputCategory: ConceptCategory components: [ComponentEnum] - testEnv: TestEnvEnum tags: [String] testRunTime: Integer! spawnRate: Float! @@ -208,7 +205,6 @@ type QuantitativeTestCase inputCategory: ConceptCategory outputCategory: ConceptCategory components: [ComponentEnum] - testEnv: TestEnvEnum tags: [String] } @@ -234,7 +230,7 @@ type TestAsset inputCategory: ConceptCategory predicateId: PredicateType predicateName: String - outputId: Uriorcurie + outputIds: [Uriorcurie] outputName: String outputCategory: ConceptCategory association: AssociationCategory @@ -270,7 +266,6 @@ type TestCase inputCategory: ConceptCategory outputCategory: ConceptCategory components: [ComponentEnum] - testEnv: TestEnvEnum tags: [String] } @@ -295,7 +290,7 @@ type TestEdgeData inputCategory: ConceptCategory predicateId: PredicateType predicateName: String - outputId: Uriorcurie + outputIds: [Uriorcurie] outputName: String outputCategory: ConceptCategory association: AssociationCategory diff --git a/project/jsonld/translator_testing_model.context.jsonld b/project/jsonld/translator_testing_model.context.jsonld index bd68ee0..8388f5e 100644 --- a/project/jsonld/translator_testing_model.context.jsonld +++ b/project/jsonld/translator_testing_model.context.jsonld @@ -1,7 +1,7 @@ { "comments": { "description": "Auto generated by LinkML jsonld context generator", - "generation_date": "2025-10-22T15:23:25", + "generation_date": "2026-10-29T16:38:18", "source": "translator_testing_model.yaml" }, "@context": { @@ -137,9 +137,9 @@ "@type": "@id", "@id": "output_category" }, - "output_id": { + "output_ids": { "@type": "@id", - "@id": "output_id" + "@id": "output_ids" }, "output_name": { "@id": "output_name" diff --git a/project/jsonld/translator_testing_model.jsonld b/project/jsonld/translator_testing_model.jsonld index 3c5066b..76e18e4 100644 --- a/project/jsonld/translator_testing_model.jsonld +++ b/project/jsonld/translator_testing_model.jsonld @@ -1411,14 +1411,16 @@ "@type": "SlotDefinition" }, { - "name": "output_id", - "definition_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/output_id", + "name": "output_ids", + "definition_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/output_ids", + "description": "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.", "from_schema": "https://w3id.org/TranslatorSRI/TranslatorTestingModel", "aliases": [ "OutputID", "ObjectID" ], - "slot_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/output_id", + "slot_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/output_ids", + "multivalued": true, "owner": "TestAsset", "domain_of": [ "TestAsset" @@ -1777,13 +1779,11 @@ { "name": "test_env", "definition_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/test_env", - "description": "Deployment environment within which the associated TestSuite is run.", + "description": "Deployment environment within which a TestRunSession ran. Test cases don't carry one: the same suite runs in every environment, and the TestHarness is told which one to test.", "from_schema": "https://w3id.org/TranslatorSRI/TranslatorTestingModel", "slot_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/test_env", "owner": "TestRunSession", "domain_of": [ - "TestCase", - "PathfinderTestCase", "TestRunSession" ], "range": "TestEnvEnum", @@ -2502,7 +2502,7 @@ "input_category", "predicate_id", "predicate_name", - "output_id", + "output_ids", "output_name", "output_category", "association", @@ -2565,7 +2565,7 @@ "input_category", "predicate_id", "predicate_name", - "output_id", + "output_ids", "output_name", "output_category", "association", @@ -2609,7 +2609,7 @@ "input_category", "predicate_id", "predicate_name", - "output_id", + "output_ids", "output_name", "output_category", "association", @@ -2670,7 +2670,6 @@ "input_category", "output_category", "components", - "test_env", "TestCase_tags" ], "slot_usage": {}, @@ -2690,8 +2689,7 @@ "test_runner_settings", "PathfinderTestCase_test_assets", "test_case_objective", - "components", - "test_env" + "components" ], "slot_usage": {}, "class_uri": "https://w3id.org/TranslatorSRI/TranslatorTestingModel/PathfinderTestCase", @@ -2720,7 +2718,6 @@ "input_category", "output_category", "components", - "test_env", "TestCase_tags", "AcceptanceTestCase_test_assets" ], @@ -2752,7 +2749,6 @@ "input_category", "output_category", "components", - "test_env", "TestCase_tags" ], "slot_usage": {}, @@ -2782,7 +2778,6 @@ "input_category", "output_category", "components", - "test_env", "TestCase_tags", "performanceTestCase__test_run_time", "performanceTestCase__spawn_rate", @@ -3039,9 +3034,9 @@ ], "metamodel_version": "1.7.0", "source_file": "translator_testing_model.yaml", - "source_file_date": "2025-10-22T15:23:19", - "source_file_size": 32116, - "generation_date": "2025-10-22T15:23:25", + "source_file_date": "2026-10-29T16:38:03", + "source_file_size": 32498, + "generation_date": "2026-10-29T16:38:18", "@type": "SchemaDefinition", "@context": [ "project/jsonld/translator_testing_model.context.jsonld", diff --git a/project/jsonschema/translator_testing_model.schema.json b/project/jsonschema/translator_testing_model.schema.json index f228878..575c41f 100644 --- a/project/jsonschema/translator_testing_model.schema.json +++ b/project/jsonschema/translator_testing_model.schema.json @@ -63,8 +63,12 @@ "output_category": { "type": "string" }, - "output_id": { - "type": "string" + "output_ids": { + "description": "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.", + "items": { + "type": "string" + }, + "type": "array" }, "output_name": { "type": "string" @@ -213,10 +217,6 @@ "$ref": "#/$defs/TestSourceEnum", "description": "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_runner_settings": { "description": "Scalar parameters for the TestRunner processing a given TestEntity.", "items": { @@ -686,10 +686,6 @@ "$ref": "#/$defs/TestObjectiveEnum", "description": "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_runner_settings": { "description": "Scalar parameters for the TestRunner processing a given TestEntity.", "items": { @@ -785,10 +781,6 @@ "$ref": "#/$defs/TestSourceEnum", "description": "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_run_time": { "type": "integer" }, @@ -893,10 +885,6 @@ "$ref": "#/$defs/TestSourceEnum", "description": "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_run_time": { "type": "integer" }, @@ -1106,10 +1094,6 @@ "$ref": "#/$defs/TestSourceEnum", "description": "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_runner_settings": { "description": "Scalar parameters for the TestRunner processing a given TestEntity.", "items": { @@ -1263,8 +1247,12 @@ "output_category": { "type": "string" }, - "output_id": { - "type": "string" + "output_ids": { + "description": "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.", + "items": { + "type": "string" + }, + "type": "array" }, "output_name": { "type": "string" @@ -1397,10 +1385,6 @@ "$ref": "#/$defs/TestSourceEnum", "description": "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_runner_settings": { "description": "Scalar parameters for the TestRunner processing a given TestEntity.", "items": { @@ -1603,10 +1587,6 @@ "$ref": "#/$defs/TestSourceEnum", "description": "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." }, - "test_env": { - "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." - }, "test_runner_settings": { "description": "Scalar parameters for the TestRunner processing a given TestEntity.", "items": { @@ -1663,8 +1643,12 @@ "output_category": { "type": "string" }, - "output_id": { - "type": "string" + "output_ids": { + "description": "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.", + "items": { + "type": "string" + }, + "type": "array" }, "output_name": { "type": "string" @@ -2005,7 +1989,7 @@ }, "test_env": { "$ref": "#/$defs/TestEnvEnum", - "description": "Deployment environment within which the associated TestSuite is run." + "description": "Deployment environment within which a TestRunSession ran. Test cases don't carry one: the same suite runs in every environment, and the TestHarness is told which one to test." }, "test_run_parameters": { "description": "Different TestRunners could expect additional global test configuration parameters, like the applicable TRAPI version (\"trapi_version\") or Biolink Model versions (\"biolink_version\").", diff --git a/project/owl/translator_testing_model.owl.ttl b/project/owl/translator_testing_model.owl.ttl index cbc49c9..607a188 100644 --- a/project/owl/translator_testing_model.owl.ttl +++ b/project/owl/translator_testing_model.owl.ttl @@ -45,10 +45,10 @@ ttm:PerformanceTestSuite a owl:Class, linkml:ClassDefinition ; rdfs:label "PerformanceTestSuite" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom ttm:PerformanceTestCase ; + owl:minCardinality 0 ; owl:onProperty ttm:test_cases ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom ttm:PerformanceTestCase ; owl:onProperty ttm:test_cases ], ttm:TestSuite ; skos:definition "A small test suite designed to test the performance of the Translator system." ; @@ -79,59 +79,59 @@ ttm:TestRunSession a owl:Class, linkml:ClassDefinition ; rdfs:label "TestRunSession" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_runner_name ], + owl:allValuesFrom ttm:TestEnvEnum ; + owl:onProperty ttm:test_env ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:test_run_parameters ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:TestCaseResult ; + owl:onProperty ttm:test_case_results ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_env ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:test_runner_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_entities ], + owl:onProperty ttm:test_case_results ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_env ], + owl:allValuesFrom linkml:Datetime ; + owl:onProperty ttm:timestamp ], [ a owl:Restriction ; owl:allValuesFrom ttm:TestEntity ; owl:onProperty ttm:test_entities ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestEnvEnum ; - owl:onProperty ttm:test_env ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_run_parameters ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:ComponentEnum ; - owl:onProperty ttm:components ], + owl:onProperty ttm:test_runner_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:components ], + owl:onProperty ttm:timestamp ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:minCardinality 0 ; owl:onProperty ttm:test_run_parameters ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:test_env ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_runner_name ], + owl:onProperty ttm:test_entities ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_run_parameters ], + owl:allValuesFrom ttm:ComponentEnum ; + owl:onProperty ttm:components ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:timestamp ], + owl:onProperty ttm:components ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ttm:test_runner_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:timestamp ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_case_results ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestCaseResult ; - owl:onProperty ttm:test_case_results ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Datetime ; - owl:onProperty ttm:timestamp ], + owl:maxCardinality 1 ; + owl:onProperty ttm:test_run_parameters ], ttm:TestEntity ; skos:definition "Single run of a TestRunner in a given environment, with a specified set of test_entities (generally, one or more instances of TestSuite)." ; skos:inScheme . @@ -204,95 +204,95 @@ ttm:AcceptanceTestAsset a owl:Class, linkml:ClassDefinition ; rdfs:label "AcceptanceTestAsset" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:query_node ], - [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:answer_informal_concept ], + owl:onProperty ttm:query_node ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:string_entry ], + owl:onProperty ttm:answer_informal_concept ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:string_entry ], + owl:allValuesFrom ttm:DirectionEnum ; + owl:onProperty ttm:direction ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:top_level ], + owl:onProperty ttm:scientific_question ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:direction ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:expected_result ], + owl:allValuesFrom ttm:NodeEnum ; + owl:onProperty ttm:query_node ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; - owl:onProperty ttm:top_level ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:notes ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:string_entry ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:scientific_question ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ttm:query_node ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:expected_result ], + owl:onProperty ttm:top_level ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ttm:scientific_question ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:notes ], + owl:minCardinality 0 ; + owl:onProperty ttm:expected_result ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:answer_informal_concept ], + owl:onProperty ttm:string_entry ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:notes ], + owl:onProperty ttm:direction ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:must_pass_environment ], + owl:onProperty ttm:must_pass_date ], [ a owl:Restriction ; - owl:allValuesFrom ttm:ExpectedResultsEnum ; + owl:maxCardinality 1 ; owl:onProperty ttm:expected_result ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:answer_informal_concept ], + owl:maxCardinality 1 ; + owl:onProperty ttm:must_pass_environment ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:notes ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:string_entry ], [ a owl:Restriction ; owl:allValuesFrom ttm:TestEnvEnum ; owl:onProperty ttm:must_pass_environment ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:top_level ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:must_pass_environment ], + owl:onProperty ttm:notes ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:answer_informal_concept ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ttm:must_pass_date ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Integer ; owl:onProperty ttm:top_level ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:scientific_question ], + owl:onProperty ttm:must_pass_environment ], [ a owl:Restriction ; - owl:allValuesFrom ttm:DirectionEnum ; - owl:onProperty ttm:direction ], + owl:allValuesFrom ttm:ExpectedResultsEnum ; + owl:onProperty ttm:expected_result ], [ a owl:Restriction ; owl:allValuesFrom linkml:Date ; owl:onProperty ttm:must_pass_date ], [ a owl:Restriction ; - owl:allValuesFrom ttm:NodeEnum ; - owl:onProperty ttm:query_node ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:answer_informal_concept ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:must_pass_date ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:must_pass_date ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:direction ], + owl:onProperty ttm:notes ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:scientific_question ], + owl:onProperty ttm:string_entry ], ttm:TestAsset ; skos:definition "Model derived from Jenn's test asset design and Shervin's runner JSON here as an example." ; skos:inScheme . @@ -305,103 +305,103 @@ ttm:PathfinderTestAsset a owl:Class, owl:onProperty ttm:path_nodes ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:target_input_name ], + owl:onProperty ttm:predicate_id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:target_input_id ], + owl:maxCardinality 1 ; + owl:onProperty ttm:source_input_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:predicate_name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ttm:target_input_name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:source_input_name ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:qualifiers ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:expected_output ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:source_input_id ], + owl:allValuesFrom ttm:Qualifier ; + owl:onProperty ttm:qualifiers ], [ a owl:Restriction ; - owl:allValuesFrom ttm:concept_category ; + owl:minCardinality 0 ; owl:onProperty ttm:source_input_category ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:minimum_required_path_nodes ], + owl:onProperty ttm:target_input_name ], [ a owl:Restriction ; - owl:allValuesFrom ttm:predicate_type ; - owl:onProperty ttm:predicate_id ], + owl:allValuesFrom linkml:Integer ; + owl:onProperty ttm:minimum_required_path_nodes ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:predicate_id ], + owl:minCardinality 0 ; + owl:onProperty ttm:target_input_name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:source_input_category ], + owl:allValuesFrom ttm:concept_category ; + owl:onProperty ttm:target_input_category ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ttm:minimum_required_path_nodes ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:predicate_name ], + owl:onProperty ttm:expected_output ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:source_input_name ], + owl:allValuesFrom ttm:concept_category ; + owl:onProperty ttm:source_input_category ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ttm:source_input_name ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:source_input_id ], + owl:minCardinality 0 ; + owl:onProperty ttm:target_input_category ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ttm:path_nodes ], + owl:allValuesFrom ttm:predicate_type ; + owl:onProperty ttm:predicate_id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:expected_output ], + owl:onProperty ttm:source_input_id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:target_input_id ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Integer ; owl:onProperty ttm:minimum_required_path_nodes ], [ a owl:Restriction ; - owl:allValuesFrom ttm:Qualifier ; - owl:onProperty ttm:qualifiers ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:source_input_id ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:predicate_id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:target_input_category ], + owl:onProperty ttm:expected_output ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; + owl:onProperty ttm:source_input_category ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty ttm:target_input_id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:expected_output ], + owl:minCardinality 1 ; + owl:onProperty ttm:path_nodes ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:target_input_category ], + owl:onProperty ttm:target_input_id ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:target_input_id ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ttm:expected_output ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; owl:onProperty ttm:predicate_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:source_input_category ], + owl:onProperty ttm:predicate_name ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:target_input_name ], + owl:onProperty ttm:source_input_name ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:predicate_name ], + owl:maxCardinality 1 ; + owl:onProperty ttm:source_input_id ], [ a owl:Restriction ; - owl:allValuesFrom ttm:concept_category ; + owl:maxCardinality 1 ; owl:onProperty ttm:target_input_category ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:source_input_id ], ttm:TestEntity ; skos:definition "Represents a Test Asset, which is a single specific instance of TestCase-agnostic semantic parameters representing the specification of a Translator test target with inputs and (expected) outputs." ; skos:inScheme . @@ -415,11 +415,8 @@ ttm:TestOutput a owl:Class, linkml:ClassDefinition ; rdfs:label "TestOutput" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ttm:test_case_id ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestResultPKSet ; - owl:onProperty ttm:pks ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_case_id ], @@ -427,8 +424,11 @@ ttm:TestOutput a owl:Class, owl:minCardinality 0 ; owl:onProperty ttm:pks ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ttm:test_case_id ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:TestResultPKSet ; + owl:onProperty ttm:pks ], ttm:TestEntity ; skos:definition "The output of a TestRunner run of one specific TestCase." ; skos:inScheme . @@ -507,7 +507,7 @@ ttm:PathfinderPathNode a owl:Class, linkml:ClassDefinition ; rdfs:label "PathfinderPathNode" ; rdfs:subClassOf [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -516,7 +516,7 @@ ttm:PathfinderPathNode a owl:Class, owl:minCardinality 0 ; owl:onProperty ttm:ids ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ttm:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; @@ -550,32 +550,32 @@ ttm:TestCaseResult a owl:Class, linkml:ClassDefinition ; rdfs:label "TestCaseResult" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_suite_id ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_suite_id ], - [ a owl:Restriction ; owl:allValuesFrom ttm:TestCase ; owl:onProperty ttm:test_case ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestCaseResultEnum ; - owl:onProperty ttm:test_case_result ], + owl:minCardinality 0 ; + owl:onProperty ttm:test_case ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty ttm:test_suite_id ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_case ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:test_case_result ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_case ], + owl:onProperty ttm:test_suite_id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:test_suite_id ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:TestCaseResultEnum ; + owl:onProperty ttm:test_case_result ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_case_result ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:test_case ], ttm:TestEntity ; skos:definition "The outcome of a TestRunner run of one specific TestCase." ; skos:inScheme . @@ -599,22 +599,22 @@ ttm:TestEntityParameter a owl:Class, linkml:ClassDefinition ; rdfs:label "TestEntityParameter" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ttm:parameter ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:value ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:value ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:String ; owl:onProperty ttm:parameter ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:parameter ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty ttm:value ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty ttm:value ] ; skos:definition "A single 'tag = value' pair (where 'value' is a simple string)." ; skos:inScheme . @@ -721,41 +721,41 @@ ttm:TestResultPKSet a owl:Class, owl:maxCardinality 1 ; owl:onProperty ttm:bte ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:arax ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:unsecret ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:unsecret ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:parent_pk ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:aragorn ], + owl:onProperty ttm:improving ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:improving ], + owl:onProperty ttm:merged_pk ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:parent_pk ], + owl:onProperty ttm:improving ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ttm:merged_pk ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:arax ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ttm:arax ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:unsecret ], + owl:onProperty ttm:aragorn ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:bte ], + owl:onProperty ttm:parent_pk ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:merged_pk ], + owl:onProperty ttm:bte ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:bte ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ttm:aragorn ], @@ -764,22 +764,22 @@ ttm:TestResultPKSet a owl:Class, owl:onProperty ttm:improving ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:improving ], + owl:onProperty ttm:unsecret ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:aragorn ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:bte ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:unsecret ], + owl:onProperty ttm:arax ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:parent_pk ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; + owl:maxCardinality 1 ; owl:onProperty ttm:merged_pk ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:parent_pk ], ttm:TestEntity ; skos:definition "Primary keys for a given ARA result set from a SmokeTest result for a given TestCase." ; skos:inScheme . @@ -819,16 +819,16 @@ ttm:TestSuiteSpecification a owl:Class, linkml:ClassDefinition ; rdfs:label "TestSuiteSpecification" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom ttm:FileFormatEnum ; - owl:onProperty ttm:test_data_file_format ], - [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:test_data_file_format ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom linkml:Uriorcurie ; owl:onProperty ttm:test_data_file_locator ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:allValuesFrom ttm:FileFormatEnum ; + owl:onProperty ttm:test_data_file_format ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty ttm:test_data_file_locator ], [ a owl:Restriction ; owl:minCardinality 0 ; @@ -878,6 +878,15 @@ ttm:ids a owl:ObjectProperty, rdfs:label "ids" ; skos:inScheme . +ttm:output_ids a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "output_ids" ; + rdfs:range linkml:Uriorcurie ; + skos:altLabel "ObjectID", + "OutputID" ; + skos:definition "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept." ; + skos:inScheme . + ttm:path_nodes a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "path_nodes" ; @@ -1012,35 +1021,26 @@ ttm:PathfinderTestCase a owl:Class, linkml:ClassDefinition ; rdfs:label "PathfinderTestCase" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom ttm:TestEnvEnum ; - owl:onProperty ttm:test_env ], + owl:allValuesFrom ttm:TestObjectiveEnum ; + owl:onProperty ttm:test_case_objective ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:components ], + owl:maxCardinality 1 ; + owl:onProperty ttm:test_case_objective ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ttm:test_assets ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_env ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_case_objective ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:ComponentEnum ; owl:onProperty ttm:components ], [ a owl:Restriction ; owl:allValuesFrom ttm:PathfinderTestAsset ; owl:onProperty ttm:test_assets ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_env ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestObjectiveEnum ; + owl:minCardinality 0 ; owl:onProperty ttm:test_case_objective ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_case_objective ], + owl:allValuesFrom ttm:ComponentEnum ; + owl:onProperty ttm:components ], ttm:TestEntity ; skos:inScheme . @@ -1048,14 +1048,17 @@ ttm:PerformanceTestCase a owl:Class, linkml:ClassDefinition ; rdfs:label "PerformanceTestCase" ; rdfs:subClassOf [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:spawn_rate ], + [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:test_run_time ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Float ; + owl:onProperty ttm:spawn_rate ], [ a owl:Restriction ; owl:allValuesFrom linkml:Integer ; owl:onProperty ttm:test_run_time ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestAsset ; - owl:onProperty ttm:test_assets ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ttm:test_run_time ], @@ -1066,11 +1069,8 @@ ttm:PerformanceTestCase a owl:Class, owl:minCardinality 1 ; owl:onProperty ttm:test_assets ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Float ; - owl:onProperty ttm:spawn_rate ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:spawn_rate ], + owl:allValuesFrom ttm:TestAsset ; + owl:onProperty ttm:test_assets ], ttm:TestCase ; skos:definition "Represents a performance test case." ; skos:inScheme . @@ -1079,41 +1079,41 @@ ttm:TestMetadata a owl:Class, linkml:ClassDefinition ; rdfs:label "TestMetadata" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:minCardinality 0 ; owl:onProperty ttm:test_annotations ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_objective ], + owl:onProperty ttm:test_reference ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:test_annotations ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:test_reference ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestSourceEnum ; - owl:onProperty ttm:test_source ], + owl:maxCardinality 1 ; + owl:onProperty ttm:test_reference ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:test_source ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:test_annotations ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_reference ], + owl:onProperty ttm:test_objective ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_reference ], + owl:minCardinality 0 ; + owl:onProperty ttm:test_source ], [ a owl:Restriction ; owl:allValuesFrom ttm:TestObjectiveEnum ; owl:onProperty ttm:test_objective ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_source ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:test_objective ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:test_reference ], + owl:allValuesFrom ttm:TestSourceEnum ; + owl:onProperty ttm:test_source ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:test_annotations ], ttm:TestEntity ; skos:definition "Represents metadata related to (external SME, SMURF, Translator feedback, large scale batch, etc.) like the provenance of test assets, cases and/or suites." ; skos:inScheme . @@ -1232,14 +1232,6 @@ ttm:notes a owl:ObjectProperty, skos:definition "The notes of the query" ; skos:inScheme . -ttm:output_id a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "output_id" ; - rdfs:range linkml:Uriorcurie ; - skos:altLabel "ObjectID", - "OutputID" ; - skos:inScheme . - ttm:output_name a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "output_name" ; @@ -1401,6 +1393,13 @@ ttm:test_data_file_locator a owl:ObjectProperty, skos:definition "An web accessible file resource link to test entity data (e.g. a web accessible text file of Test Asset entries)" ; skos:inScheme . +ttm:test_env a owl:ObjectProperty, + linkml:SlotDefinition ; + rdfs:label "test_env" ; + rdfs:range ttm:TestEnvEnum ; + skos:definition "Deployment environment within which a TestRunSession ran. Test cases don't carry one: the same suite runs in every environment, and the TestHarness is told which one to test." ; + skos:inScheme . + ttm:test_issue a owl:ObjectProperty, linkml:SlotDefinition ; rdfs:label "test_issue" ; @@ -1499,12 +1498,12 @@ ttm:Qualifier a owl:Class, rdfs:label "Qualifier" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:parameter ], + owl:onProperty ttm:value ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ttm:parameter ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty ttm:value ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -1513,8 +1512,8 @@ ttm:Qualifier a owl:Class, owl:maxCardinality 1 ; owl:onProperty ttm:value ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:value ], + owl:minCardinality 0 ; + owl:onProperty ttm:parameter ], ttm:TestEntityParameter ; skos:inScheme . @@ -1541,176 +1540,173 @@ ttm:TestAsset a owl:Class, linkml:ClassDefinition ; rdfs:label "TestAsset" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:expected_output ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:id ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:tags ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:output_name ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:input_name ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:concept_category ; - owl:onProperty ttm:output_category ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:test_reference ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:well_known ], + owl:allValuesFrom ttm:Qualifier ; + owl:onProperty ttm:qualifiers ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:id ], + owl:allValuesFrom ttm:association_category ; + owl:onProperty ttm:association ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:expected_output ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:association ], + owl:allValuesFrom ttm:SemanticSeverityEnum ; + owl:onProperty ttm:semantic_severity ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:output_name ], + owl:onProperty ttm:input_name ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:TestMetadata ; + owl:onProperty ttm:test_metadata ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:input_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:predicate_id ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:expected_output ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ttm:in_v1 ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:semantic_severity ], + owl:onProperty ttm:expected_output ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:semantic_severity ], + owl:onProperty ttm:output_name ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:well_known ], + owl:allValuesFrom ttm:concept_category ; + owl:onProperty ttm:output_category ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_issue ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:output_ids ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_metadata ], + owl:minCardinality 0 ; + owl:onProperty ttm:input_category ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; owl:onProperty ttm:test_runner_settings ], [ a owl:Restriction ; owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:output_id ], + owl:onProperty ttm:id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:predicate_name ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:tags ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:in_v1 ], + owl:onProperty ttm:semantic_severity ], [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ttm:id ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:input_name ], [ a owl:Restriction ; - owl:allValuesFrom ttm:predicate_type ; - owl:onProperty ttm:predicate_id ], + owl:minCardinality 0 ; + owl:onProperty ttm:association ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:output_id ], + owl:onProperty ttm:input_id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:in_v1 ], + owl:onProperty ttm:test_metadata ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_reference ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestMetadata ; - owl:onProperty ttm:test_metadata ], + owl:onProperty ttm:well_known ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:qualifiers ], + owl:onProperty ttm:output_name ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestIssueEnum ; - owl:onProperty ttm:test_issue ], + owl:minCardinality 0 ; + owl:onProperty ttm:tags ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:output_id ], + owl:allValuesFrom linkml:Boolean ; + owl:onProperty ttm:well_known ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:tags ], + owl:onProperty ttm:output_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:test_issue ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_runner_settings ], + owl:onProperty ttm:predicate_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:test_reference ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:input_id ], + owl:onProperty ttm:predicate_name ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:input_category ], + owl:onProperty ttm:well_known ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ttm:in_v1 ], + owl:allValuesFrom ttm:concept_category ; + owl:onProperty ttm:input_category ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_metadata ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:expected_output ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:output_category ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom linkml:String ; owl:onProperty ttm:predicate_name ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:in_v1 ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:output_category ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:predicate_id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:input_name ], + owl:onProperty ttm:qualifiers ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:output_name ], + owl:minCardinality 0 ; + owl:onProperty ttm:test_issue ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:input_name ], + owl:onProperty ttm:input_id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:output_category ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:test_reference ], + owl:onProperty ttm:association ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:input_id ], + owl:onProperty ttm:semantic_severity ], [ a owl:Restriction ; - owl:allValuesFrom ttm:concept_category ; + owl:maxCardinality 1 ; owl:onProperty ttm:input_category ], [ a owl:Restriction ; - owl:allValuesFrom ttm:association_category ; - owl:onProperty ttm:association ], + owl:maxCardinality 1 ; + owl:onProperty ttm:test_reference ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:allValuesFrom ttm:TestIssueEnum ; owl:onProperty ttm:test_issue ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:association ], + owl:onProperty ttm:output_ids ], [ a owl:Restriction ; - owl:allValuesFrom ttm:SemanticSeverityEnum ; - owl:onProperty ttm:semantic_severity ], + owl:minCardinality 0 ; + owl:onProperty ttm:test_runner_settings ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:predicate_type ; + owl:onProperty ttm:predicate_id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:input_id ], + owl:onProperty ttm:test_metadata ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Boolean ; - owl:onProperty ttm:well_known ], + owl:maxCardinality 1 ; + owl:onProperty ttm:id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:predicate_name ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:input_id ], + [ a owl:Restriction ; + owl:minCardinality 1 ; + owl:onProperty ttm:id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:input_category ], + owl:onProperty ttm:test_reference ], [ a owl:Restriction ; - owl:allValuesFrom ttm:Qualifier ; - owl:onProperty ttm:qualifiers ], + owl:minCardinality 0 ; + owl:onProperty ttm:in_v1 ], ttm:TestEntity ; skos:definition "Represents a Test Asset, which is a single specific instance of TestCase-agnostic semantic parameters representing the specification of a Translator test target with inputs and (expected) outputs." ; skos:inScheme . @@ -1726,6 +1722,9 @@ ttm:TestSuite a owl:Class, owl:onProperty ttm:test_cases ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ttm:test_metadata ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:TestSuiteSpecification ; owl:onProperty ttm:test_suite_specification ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -1733,23 +1732,20 @@ ttm:TestSuite a owl:Class, [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_metadata ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:TestPersonaEnum ; + owl:onProperty ttm:test_persona ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_cases ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestMetadata ; - owl:onProperty ttm:test_metadata ], - [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:test_suite_specification ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestSuiteSpecification ; + owl:minCardinality 0 ; owl:onProperty ttm:test_suite_specification ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestPersonaEnum ; - owl:onProperty ttm:test_persona ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom ttm:TestMetadata ; owl:onProperty ttm:test_metadata ], ttm:TestEntity ; skos:definition "Specification of a set of Test Cases, one of either with a static list of 'test_cases' or a dynamic 'test_suite_specification' slot values. Note: at least one slot or the other, but generally not both(?) needs to be present." ; @@ -1906,136 +1902,120 @@ ttm:TestCase a owl:Class, linkml:ClassDefinition ; rdfs:label "TestCase" ; rdfs:subClassOf [ a owl:Restriction ; - owl:allValuesFrom ttm:Qualifier ; - owl:onProperty ttm:qualifiers ], - [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:output_category ], + owl:onProperty ttm:preconditions ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_case_predicate_id ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_env ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ttm:test_case_predicate_name ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:QueryTypeEnum ; owl:onProperty ttm:query_type ], [ a owl:Restriction ; owl:allValuesFrom ttm:TrapiTemplateEnum ; owl:onProperty ttm:trapi_template ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:test_case_predicate_name ], + owl:allValuesFrom ttm:concept_category ; + owl:onProperty ttm:output_category ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:output_category ], - [ a owl:Restriction ; - owl:allValuesFrom ttm:TestAsset ; - owl:onProperty ttm:test_assets ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:preconditions ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:qualifiers ], + owl:onProperty ttm:test_case_input_id ], [ a owl:Restriction ; - owl:minCardinality 0 ; + owl:maxCardinality 1 ; owl:onProperty ttm:trapi_template ], [ a owl:Restriction ; owl:maxCardinality 1 ; + owl:onProperty ttm:input_category ], + [ a owl:Restriction ; + owl:minCardinality 0 ; owl:onProperty ttm:test_case_predicate_name ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestObjectiveEnum ; - owl:onProperty ttm:test_case_objective ], + owl:maxCardinality 1 ; + owl:onProperty ttm:test_case_source ], [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_case_objective ], + owl:allValuesFrom ttm:TestAsset ; + owl:onProperty ttm:test_assets ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:test_case_input_id ], + owl:onProperty ttm:tags ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:test_case_predicate_id ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_case_objective ], + owl:onProperty ttm:test_case_predicate_name ], [ a owl:Restriction ; owl:minCardinality 1 ; owl:onProperty ttm:test_assets ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_case_source ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:input_category ], - [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_env ], - [ a owl:Restriction ; - owl:minCardinality 0 ; - owl:onProperty ttm:test_case_predicate_name ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty ttm:query_type ], [ a owl:Restriction ; - owl:maxCardinality 1 ; + owl:allValuesFrom ttm:TestSourceEnum ; owl:onProperty ttm:test_case_source ], [ a owl:Restriction ; - owl:allValuesFrom ttm:concept_category ; - owl:onProperty ttm:output_category ], + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:test_case_input_id ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:trapi_template ], + owl:allValuesFrom ttm:concept_category ; + owl:onProperty ttm:input_category ], [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:test_case_predicate_id ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:tags ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestSourceEnum ; - owl:onProperty ttm:test_case_source ], + owl:minCardinality 0 ; + owl:onProperty ttm:query_type ], [ a owl:Restriction ; owl:allValuesFrom ttm:ComponentEnum ; owl:onProperty ttm:components ], [ a owl:Restriction ; - owl:allValuesFrom ttm:QueryTypeEnum ; - owl:onProperty ttm:query_type ], + owl:allValuesFrom linkml:String ; + owl:onProperty ttm:test_case_predicate_id ], [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; - owl:onProperty ttm:test_case_input_id ], + owl:minCardinality 0 ; + owl:onProperty ttm:test_case_source ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:input_category ], + owl:onProperty ttm:test_case_objective ], [ a owl:Restriction ; owl:maxCardinality 1 ; owl:onProperty ttm:test_case_input_id ], [ a owl:Restriction ; - owl:allValuesFrom ttm:Precondition ; - owl:onProperty ttm:preconditions ], + owl:minCardinality 0 ; + owl:onProperty ttm:qualifiers ], [ a owl:Restriction ; - owl:allValuesFrom ttm:TestEnvEnum ; - owl:onProperty ttm:test_env ], + owl:allValuesFrom ttm:Qualifier ; + owl:onProperty ttm:qualifiers ], [ a owl:Restriction ; - owl:allValuesFrom linkml:String ; - owl:onProperty ttm:tags ], + owl:allValuesFrom ttm:TestObjectiveEnum ; + owl:onProperty ttm:test_case_objective ], [ a owl:Restriction ; - owl:allValuesFrom ttm:concept_category ; - owl:onProperty ttm:input_category ], + owl:maxCardinality 1 ; + owl:onProperty ttm:test_case_predicate_id ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; + owl:onProperty ttm:test_case_objective ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:output_category ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:components ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:tags ], + owl:onProperty ttm:input_category ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:trapi_template ], + [ a owl:Restriction ; + owl:allValuesFrom ttm:Precondition ; + owl:onProperty ttm:preconditions ], ttm:TestEntity ; skos:definition "Represents a single enumerated instance of Test Case, derived from a given collection of one or more TestAsset instances (the value of the 'test_assets' slot) which define the 'inputs' and 'outputs' of the TestCase, used to probe a particular test condition." ; skos:inScheme . -ttm:test_env a owl:ObjectProperty, - linkml:SlotDefinition ; - rdfs:label "test_env" ; - rdfs:range ttm:TestEnvEnum ; - skos:definition "Deployment environment within which the associated TestSuite is run." ; - skos:inScheme . - ttm:ExpectedOutputEnum a owl:Class, linkml:EnumDefinition ; owl:unionOf ( ) ; @@ -2057,6 +2037,14 @@ ttm:concept_category a owl:Class, linkml:TypeDefinition ; rdfs:subClassOf ttm:category_type . +ttm:TestEnvEnum a owl:Class, + linkml:EnumDefinition ; + owl:unionOf ( ) ; + linkml:permissible_values , + , + , + . + ttm:TrapiTemplateEnum a owl:Class, linkml:EnumDefinition ; owl:unionOf ( ) ; @@ -2070,10 +2058,7 @@ ttm:TestEntity a owl:Class, linkml:ClassDefinition ; rdfs:label "TestEntity" ; rdfs:subClassOf [ a owl:Restriction ; - owl:maxCardinality 1 ; - owl:onProperty ttm:description ], - [ a owl:Restriction ; - owl:allValuesFrom linkml:Uriorcurie ; + owl:minCardinality 1 ; owl:onProperty ttm:id ], [ a owl:Restriction ; owl:maxCardinality 1 ; @@ -2081,44 +2066,39 @@ ttm:TestEntity a owl:Class, [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:test_runner_settings ], + [ a owl:Restriction ; + owl:allValuesFrom linkml:Uriorcurie ; + owl:onProperty ttm:id ], [ a owl:Restriction ; owl:maxCardinality 1 ; - owl:onProperty ttm:name ], + owl:onProperty ttm:description ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:description ], + owl:onProperty ttm:tags ], + [ a owl:Restriction ; + owl:minCardinality 0 ; + owl:onProperty ttm:tags ], [ a owl:Restriction ; owl:minCardinality 0 ; owl:onProperty ttm:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:test_runner_settings ], + owl:onProperty ttm:name ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; - owl:onProperty ttm:tags ], - [ a owl:Restriction ; - owl:minCardinality 0 ; owl:onProperty ttm:description ], - [ a owl:Restriction ; - owl:minCardinality 1 ; - owl:onProperty ttm:id ], [ a owl:Restriction ; owl:minCardinality 0 ; - owl:onProperty ttm:tags ], + owl:onProperty ttm:description ], [ a owl:Restriction ; owl:allValuesFrom linkml:String ; + owl:onProperty ttm:test_runner_settings ], + [ a owl:Restriction ; + owl:maxCardinality 1 ; owl:onProperty ttm:name ] ; skos:definition "Abstract global 'identification' class shared as a parent with all major model classes within the data model for Translator testing." ; skos:inScheme . -ttm:TestEnvEnum a owl:Class, - linkml:EnumDefinition ; - owl:unionOf ( ) ; - linkml:permissible_values , - , - , - . - ttm:TestIssueEnum a owl:Class, linkml:EnumDefinition ; owl:unionOf ( ) ; diff --git a/project/protobuf/translator_testing_model.proto b/project/protobuf/translator_testing_model.proto index fcdaaaa..4d604fd 100644 --- a/project/protobuf/translator_testing_model.proto +++ b/project/protobuf/translator_testing_model.proto @@ -8,7 +8,7 @@ message AcceptanceTestAsset conceptCategory inputCategory = 0 predicateType predicateId = 0 string predicateName = 0 - uriorcurie outputId = 0 + repeated uriorcurie outputIds = 0 string outputName = 0 conceptCategory outputCategory = 0 associationCategory association = 0 @@ -53,7 +53,6 @@ message AcceptanceTestCase conceptCategory inputCategory = 0 conceptCategory outputCategory = 0 repeated componentEnum components = 0 - testEnvEnum testEnv = 0 repeated string tags = 0 repeated acceptanceTestAsset testAssets = 0 } @@ -131,7 +130,6 @@ message PathfinderTestCase repeated pathfinderTestAsset testAssets = 0 testObjectiveEnum testCaseObjective = 0 repeated componentEnum components = 0 - testEnvEnum testEnv = 0 } // Represents a performance test case. message PerformanceTestCase @@ -152,7 +150,6 @@ message PerformanceTestCase conceptCategory inputCategory = 0 conceptCategory outputCategory = 0 repeated componentEnum components = 0 - testEnvEnum testEnv = 0 repeated string tags = 0 integer testRunTime = 0 float spawnRate = 0 @@ -205,7 +202,6 @@ message QuantitativeTestCase conceptCategory inputCategory = 0 conceptCategory outputCategory = 0 repeated componentEnum components = 0 - testEnvEnum testEnv = 0 repeated string tags = 0 } // Test suite for testing Translator components against releases of standards like TRAPI and the Biolink Model. @@ -231,7 +227,7 @@ message TestAsset conceptCategory inputCategory = 0 predicateType predicateId = 0 string predicateName = 0 - uriorcurie outputId = 0 + repeated uriorcurie outputIds = 0 string outputName = 0 conceptCategory outputCategory = 0 associationCategory association = 0 @@ -267,7 +263,6 @@ message TestCase conceptCategory inputCategory = 0 conceptCategory outputCategory = 0 repeated componentEnum components = 0 - testEnvEnum testEnv = 0 repeated string tags = 0 } // The outcome of a TestRunner run of one specific TestCase. @@ -292,7 +287,7 @@ message TestEdgeData conceptCategory inputCategory = 0 predicateType predicateId = 0 string predicateName = 0 - uriorcurie outputId = 0 + repeated uriorcurie outputIds = 0 string outputName = 0 conceptCategory outputCategory = 0 associationCategory association = 0 diff --git a/project/shacl/translator_testing_model.shacl.ttl b/project/shacl/translator_testing_model.shacl.ttl index a88243e..6ca8410 100644 --- a/project/shacl/translator_testing_model.shacl.ttl +++ b/project/shacl/translator_testing_model.shacl.ttl @@ -9,166 +9,172 @@ ttm:AcceptanceTestCase a sh:NodeShape ; sh:closed true ; sh:description "See AcceptanceTestAsset above for more details." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class ttm:Qualifier ; + sh:property [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; + sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; + sh:order 12 ; + sh:path ttm:components ], + [ sh:maxCount 1 ; + sh:order 11 ; + sh:path ttm:output_category ], + [ sh:class ttm:Qualifier ; sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 9 ; sh:path ttm:qualifiers ], - [ sh:description "Deployment environment within which the associated TestSuite is run." ; - sh:in ( "dev" "ci" "test" "prod" ) ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path ttm:test_env ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 15 ; - sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 18 ; + sh:order 17 ; sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 7 ; + sh:path ttm:test_case_predicate_id ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 6 ; sh:path ttm:test_case_predicate_name ], - [ sh:maxCount 1 ; - sh:order 11 ; - sh:path ttm:output_category ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; + [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 16 ; - sh:path schema1:description ], + sh:minCount 1 ; + sh:order 13 ; + sh:path schema1:identifier ], + [ sh:description "A template for a query, which can be used to generate a query for a test case. note: the current enumerated values for this slot come from the Benchmarks repo config/benchmarks.json \"templates\" collection and refer to the \"name\" field of each template. Templates themselves are currently stored in the config/[source_name]/templates directory." ; + sh:in ( "ameliorates" "treats" "three_hop" "drug_treats_rare_disease" "drug-to-gene" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path ttm:trapi_template ], [ sh:class ttm:Precondition ; sh:nodeKind sh:IRI ; sh:order 2 ; sh:path ttm:preconditions ], - [ sh:maxCount 1 ; - sh:order 10 ; - sh:path ttm:input_category ], - [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; - sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:test_case_objective ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:test_case_predicate_id ], [ sh:datatype xsd:string ; sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; - sh:order 17 ; + sh:order 16 ; sh:path schema1:additionalType ], [ sh:maxCount 1 ; sh:order 8 ; sh:path ttm:test_case_input_id ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 14 ; - sh:path schema1:identifier ], - [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; - sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; - sh:order 12 ; - sh:path ttm:components ], - [ sh:description "A template for a query, which can be used to generate a query for a test case. note: the current enumerated values for this slot come from the Benchmarks repo config/benchmarks.json \"templates\" collection and refer to the \"name\" field of each template. Templates themselves are currently stored in the config/[source_name]/templates directory." ; - sh:in ( "ameliorates" "treats" "three_hop" "drug_treats_rare_disease" "drug-to-gene" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:trapi_template ], [ sh:class ttm:AcceptanceTestAsset ; sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in 'test_assets' slot (\"Block List\") collection." ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 1 ; sh:path ttm:test_assets ], + [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; + sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path ttm:test_case_objective ], [ sh:description "Type of TestCase query." ; sh:in ( "treats" ) ; sh:maxCount 1 ; sh:order 0 ; sh:path ttm:query_type ], + [ sh:maxCount 1 ; + sh:order 10 ; + sh:path ttm:input_category ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path schema1:name ], [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; sh:maxCount 1 ; sh:order 5 ; - sh:path ttm:test_case_source ] ; + sh:path ttm:test_case_source ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path schema1:description ] ; sh:targetClass ttm:AcceptanceTestCase . ttm:AcceptanceTestSuite a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "List of explicitly enumerated Test Cases." ; - sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; - sh:order 2 ; - sh:path ttm:test_cases ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 4 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:string ; + sh:property [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 6 ; sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 7 ; - sh:path schema1:additionalType ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], [ sh:class ttm:TestSuiteSpecification ; sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 3 ; sh:path ttm:test_suite_specification ], + [ sh:datatype xsd:string ; + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 7 ; + sh:path schema1:additionalType ], [ sh:description "A Test persona describes the user or operational context of a given test." ; sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:test_persona ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path schema1:name ], [ sh:class ttm:TestMetadata ; sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; - sh:path ttm:test_metadata ] ; + sh:path ttm:test_metadata ], + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path schema1:identifier ], + [ sh:description "List of explicitly enumerated Test Cases." ; + sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; + sh:order 2 ; + sh:path ttm:test_cases ] ; sh:targetClass ttm:AcceptanceTestSuite . ttm:BenchmarkTestSuite a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], + sh:property [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path schema1:identifier ], [ sh:description "A Test persona describes the user or operational context of a given test." ; sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:test_persona ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], [ sh:description "List of explicitly enumerated Test Cases." ; sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; sh:order 2 ; sh:path ttm:test_cases ], + [ sh:datatype xsd:string ; + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 7 ; + sh:path schema1:additionalType ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 5 ; sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 7 ; - sh:path schema1:additionalType ], + [ sh:class ttm:TestMetadata ; + sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path ttm:test_metadata ], [ sh:class ttm:TestSuiteSpecification ; sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; sh:maxCount 1 ; @@ -179,68 +185,57 @@ ttm:BenchmarkTestSuite a sh:NodeShape ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 6 ; - sh:path schema1:description ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 4 ; - sh:path schema1:identifier ], - [ sh:class ttm:TestMetadata ; - sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path ttm:test_metadata ] ; + sh:path schema1:description ] ; sh:targetClass ttm:BenchmarkTestSuite . ttm:OneHopTestSuite a sh:NodeShape ; sh:closed true ; sh:description "Test case for testing the integrity of \"One Hop\" knowledge graph retrievals sensa legacy SRI_Testing harness." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 7 ; - sh:path schema1:additionalType ], - [ sh:description "List of explicitly enumerated Test Cases." ; - sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; - sh:order 2 ; - sh:path ttm:test_cases ], - [ sh:class ttm:TestMetadata ; + sh:property [ sh:class ttm:TestMetadata ; sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path ttm:test_metadata ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], + [ sh:class ttm:TestSuiteSpecification ; + sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path ttm:test_suite_specification ], [ sh:description "A Test persona describes the user or operational context of a given test." ; sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:test_persona ], [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 7 ; + sh:path schema1:additionalType ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path schema1:description ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 5 ; sh:path schema1:name ], + [ sh:description "List of explicitly enumerated Test Cases." ; + sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; + sh:order 2 ; + sh:path ttm:test_cases ], [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 4 ; - sh:path schema1:identifier ], - [ sh:class ttm:TestSuiteSpecification ; - sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path ttm:test_suite_specification ] ; + sh:path schema1:identifier ] ; sh:targetClass ttm:OneHopTestSuite . ttm:PerformanceTestSuite a sh:NodeShape ; @@ -252,35 +247,10 @@ ttm:PerformanceTestSuite a sh:NodeShape ; sh:minCount 1 ; sh:order 4 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 7 ; sh:path schema1:additionalType ], - [ sh:class ttm:TestSuiteSpecification ; - sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 3 ; - sh:path ttm:test_suite_specification ], - [ sh:description "A Test persona describes the user or operational context of a given test." ; - sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:test_persona ], [ sh:class ttm:PerformanceTestCase ; sh:description "List of explicitly enumerated Test Cases." ; sh:nodeKind sh:IRI ; @@ -291,75 +261,72 @@ ttm:PerformanceTestSuite a sh:NodeShape ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; - sh:path ttm:test_metadata ] ; - sh:targetClass ttm:PerformanceTestSuite . - -ttm:QuantitativeTestCase a sh:NodeShape ; - sh:closed true ; - sh:description "Assumed additional model from Shervin's runner JSON here as an example. This schema is not yet complete." ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; - sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; + sh:path ttm:test_metadata ], + [ sh:description "A Test persona describes the user or operational context of a given test." ; + sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:test_case_objective ], - [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; - sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; - sh:order 12 ; - sh:path ttm:components ], - [ sh:maxCount 1 ; - sh:order 11 ; - sh:path ttm:output_category ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 18 ; - sh:path ttm:test_runner_settings ], + sh:order 1 ; + sh:path ttm:test_persona ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 15 ; + sh:order 5 ; sh:path schema1:name ], - [ sh:class ttm:Qualifier ; - sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path ttm:qualifiers ], - [ sh:description "A unique identifier for a Test Entity" ; + [ sh:class ttm:TestSuiteSpecification ; + sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 14 ; - sh:path schema1:identifier ], - [ sh:description "Deployment environment within which the associated TestSuite is run." ; - sh:in ( "dev" "ci" "test" "prod" ) ; + sh:nodeKind sh:IRI ; + sh:order 3 ; + sh:path ttm:test_suite_specification ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 13 ; - sh:path ttm:test_env ], + sh:order 6 ; + sh:path schema1:description ] ; + sh:targetClass ttm:PerformanceTestSuite . + +ttm:QuantitativeTestCase a sh:NodeShape ; + sh:closed true ; + sh:description "Assumed additional model from Shervin's runner JSON here as an example. This schema is not yet complete." ; + sh:ignoredProperties ( rdf:type ) ; + sh:property [ sh:maxCount 1 ; + sh:order 10 ; + sh:path ttm:input_category ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 17 ; + sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; + sh:order 16 ; + sh:path schema1:additionalType ], [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; sh:maxCount 1 ; sh:order 5 ; sh:path ttm:test_case_source ], + [ sh:maxCount 1 ; + sh:order 11 ; + sh:path ttm:output_category ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 16 ; + sh:order 15 ; sh:path schema1:description ], - [ sh:maxCount 1 ; - sh:order 10 ; - sh:path ttm:input_category ], - [ sh:datatype xsd:string ; + [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; + sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:test_case_predicate_id ], - [ sh:description "Type of TestCase query." ; - sh:in ( "treats" ) ; + sh:order 4 ; + sh:path ttm:test_case_objective ], + [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:query_type ], - [ sh:datatype xsd:string ; - sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; - sh:order 17 ; - sh:path schema1:additionalType ], + sh:minCount 1 ; + sh:order 13 ; + sh:path schema1:identifier ], [ sh:class ttm:TestAsset ; sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in 'test_assets' slot (\"Block List\") collection." ; sh:minCount 1 ; @@ -375,6 +342,29 @@ ttm:QuantitativeTestCase a sh:NodeShape ; sh:maxCount 1 ; sh:order 3 ; sh:path ttm:trapi_template ], + [ sh:class ttm:Qualifier ; + sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 9 ; + sh:path ttm:qualifiers ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 7 ; + sh:path ttm:test_case_predicate_id ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path schema1:name ], + [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; + sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; + sh:order 12 ; + sh:path ttm:components ], + [ sh:description "Type of TestCase query." ; + sh:in ( "treats" ) ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path ttm:query_type ], [ sh:maxCount 1 ; sh:order 8 ; sh:path ttm:test_case_input_id ], @@ -388,7 +378,24 @@ ttm:StandardsComplianceTestSuite a sh:NodeShape ; sh:closed true ; sh:description "Test suite for testing Translator components against releases of standards like TRAPI and the Biolink Model." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class ttm:TestSuiteSpecification ; + sh:property [ sh:description "List of explicitly enumerated Test Cases." ; + sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; + sh:order 2 ; + sh:path ttm:test_cases ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path schema1:description ], + [ sh:datatype xsd:string ; + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 7 ; + sh:path schema1:additionalType ], + [ sh:class ttm:TestSuiteSpecification ; sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; @@ -405,33 +412,16 @@ ttm:StandardsComplianceTestSuite a sh:NodeShape ; sh:maxCount 1 ; sh:order 5 ; sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], - [ sh:description "A Test persona describes the user or operational context of a given test." ; - sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:test_persona ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path schema1:description ], - [ sh:description "List of explicitly enumerated Test Cases." ; - sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; - sh:order 2 ; - sh:path ttm:test_cases ], [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 4 ; sh:path schema1:identifier ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 7 ; - sh:path schema1:additionalType ] ; + [ sh:description "A Test persona describes the user or operational context of a given test." ; + sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path ttm:test_persona ] ; sh:targetClass ttm:StandardsComplianceTestSuite . ttm:TestEdgeData a sh:NodeShape ; @@ -439,47 +429,28 @@ ttm:TestEdgeData a sh:NodeShape ; sh:description "Represents a single Biolink Model compliant instance of a subject-predicate-object edge that can be used for testing." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:predicate_name ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 17 ; - sh:path schema1:identifier ], + sh:order 19 ; + sh:path schema1:description ], + [ sh:maxCount 1 ; + sh:order 7 ; + sh:path ttm:output_category ], + [ sh:description "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept." ; + sh:order 5 ; + sh:path ttm:output_ids ], [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:order 14 ; sh:path ttm:well_known ], [ sh:datatype xsd:string ; + sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a \"Block List\" collection" ; + sh:order 20 ; + sh:path schema1:additionalType ], + [ sh:in ( "causes not treats" "TMKP" "category too generic" "contraindications" "chemical roles" "test_issue" ) ; sh:maxCount 1 ; - sh:order 10 ; - sh:path ttm:expected_output ], - [ sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:output_category ], - [ sh:description "Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement" ; - sh:maxCount 1 ; - sh:order 8 ; - sh:path ttm:association ], - [ sh:class ttm:Qualifier ; - sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path ttm:qualifiers ], - [ sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:input_id ], - [ sh:datatype xsd:string ; - sh:description "Scalar settings for the TestRunner, e.g. \"inferred\"" ; - sh:order 21 ; - sh:path ttm:test_runner_settings ], - [ sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:predicate_id ], - [ sh:maxCount 1 ; - sh:order 2 ; - sh:path ttm:input_category ], + sh:order 11 ; + sh:path ttm:test_issue ], [ sh:class ttm:TestMetadata ; sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; sh:maxCount 1 ; @@ -490,82 +461,101 @@ ttm:TestEdgeData a sh:NodeShape ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:input_name ], - [ sh:in ( "High" "Low" "NotApplicable" ) ; + [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; sh:maxCount 1 ; - sh:order 12 ; - sh:path ttm:semantic_severity ], + sh:order 15 ; + sh:path ttm:test_reference ], [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:order 13 ; sh:path ttm:in_v1 ], [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 19 ; - sh:path schema1:description ], + sh:order 6 ; + sh:path ttm:output_name ], + [ sh:maxCount 1 ; + sh:order 0 ; + sh:path ttm:input_id ], + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 17 ; + sh:path schema1:identifier ], + [ sh:in ( "High" "Low" "NotApplicable" ) ; + sh:maxCount 1 ; + sh:order 12 ; + sh:path ttm:semantic_severity ], + [ sh:class ttm:Qualifier ; + sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 9 ; + sh:path ttm:qualifiers ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path ttm:predicate_name ], + [ sh:description "Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement" ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path ttm:association ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 18 ; sh:path schema1:name ], [ sh:datatype xsd:string ; - sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a \"Block List\" collection" ; - sh:order 20 ; - sh:path schema1:additionalType ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path ttm:output_name ], - [ sh:in ( "causes not treats" "TMKP" "category too generic" "contraindications" "chemical roles" "test_issue" ) ; - sh:maxCount 1 ; - sh:order 11 ; - sh:path ttm:test_issue ], - [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; sh:maxCount 1 ; - sh:order 15 ; - sh:path ttm:test_reference ], + sh:order 10 ; + sh:path ttm:expected_output ], + [ sh:datatype xsd:string ; + sh:description "Scalar settings for the TestRunner, e.g. \"inferred\"" ; + sh:order 21 ; + sh:path ttm:test_runner_settings ], [ sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:output_id ] ; + sh:order 2 ; + sh:path ttm:input_category ], + [ sh:maxCount 1 ; + sh:order 3 ; + sh:path ttm:predicate_id ] ; sh:targetClass ttm:TestEdgeData . ttm:TestOutput a sh:NodeShape ; sh:closed true ; sh:description "The output of a TestRunner run of one specific TestCase." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; + sh:property [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path schema1:description ], + sh:minCount 1 ; + sh:order 2 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "CURIE id of a TestCase registered in the system." ; sh:maxCount 1 ; sh:order 0 ; sh:path ttm:test_case_id ], + [ sh:class ttm:TestResultPKSet ; + sh:description "Primary keys for a given ARA result set from a SmokeTest result for a given TestCase." ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ttm:pks ], [ sh:datatype xsd:string ; sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; sh:order 6 ; sh:path ttm:test_runner_settings ], - [ sh:description "A unique identifier for a Test Entity" ; + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 2 ; - sh:path schema1:identifier ], + sh:order 3 ; + sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 5 ; sh:path schema1:additionalType ], - [ sh:class ttm:TestResultPKSet ; - sh:description "Primary keys for a given ARA result set from a SmokeTest result for a given TestCase." ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path ttm:pks ] ; + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path schema1:description ] ; sh:targetClass ttm:TestOutput . ttm:TestRunSession a sh:NodeShape ; @@ -573,92 +563,98 @@ ttm:TestRunSession a sh:NodeShape ; sh:description "Single run of a TestRunner in a given environment, with a specified set of test_entities (generally, one or more instances of TestSuite)." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 11 ; - sh:path ttm:test_runner_settings ], - [ sh:description "A unique identifier for a Test Entity" ; + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 10 ; + sh:path schema1:additionalType ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 7 ; - sh:path schema1:identifier ], + sh:order 8 ; + sh:path schema1:name ], [ sh:class ttm:TestEntityParameter ; sh:description "Different TestRunners could expect additional global test configuration parameters, like the applicable TRAPI version (\"trapi_version\") or Biolink Model versions (\"biolink_version\")." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; sh:path ttm:test_run_parameters ], - [ sh:class ttm:TestEntity ; - sh:description "Different TestRunners could expect specific kinds of TestEntity as an input. These 'test_entities' are one or more instances of TestAsset, TestCase or (preferably?) TestSuite." ; - sh:nodeKind sh:IRI ; - sh:order 4 ; - sh:path ttm:test_entities ], - [ sh:description "Deployment environment within which the associated TestSuite is run." ; - sh:in ( "dev" "ci" "test" "prod" ) ; + [ sh:datatype xsd:dateTime ; + sh:description "Date time when a given entity was created." ; sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:test_env ], + sh:order 6 ; + sh:path ttm:timestamp ], [ sh:class ttm:TestCaseResult ; sh:description "One or more instances of TestCaseResult." ; sh:nodeKind sh:IRI ; sh:order 5 ; sh:path ttm:test_case_results ], [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 11 ; + sh:path ttm:test_runner_settings ], + [ sh:description "Deployment environment within which a TestRunSession ran. Test cases don't carry one: the same suite runs in every environment, and the TestHarness is told which one to test." ; + sh:in ( "dev" "ci" "test" "prod" ) ; sh:maxCount 1 ; - sh:order 8 ; - sh:path schema1:name ], + sh:order 1 ; + sh:path ttm:test_env ], [ sh:datatype xsd:string ; sh:description "Global system name of a TestRunner." ; sh:maxCount 1 ; sh:order 2 ; sh:path ttm:test_runner_name ], - [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; - sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; - sh:order 0 ; - sh:path ttm:components ], - [ sh:datatype xsd:dateTime ; - sh:description "Date time when a given entity was created." ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path ttm:timestamp ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 9 ; sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 10 ; - sh:path schema1:additionalType ] ; + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 7 ; + sh:path schema1:identifier ], + [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; + sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; + sh:order 0 ; + sh:path ttm:components ], + [ sh:class ttm:TestEntity ; + sh:description "Different TestRunners could expect specific kinds of TestEntity as an input. These 'test_entities' are one or more instances of TestAsset, TestCase or (preferably?) TestSuite." ; + sh:nodeKind sh:IRI ; + sh:order 4 ; + sh:path ttm:test_entities ] ; sh:targetClass ttm:TestRunSession . ttm:TestSuite a sh:NodeShape ; sh:closed true ; sh:description "Specification of a set of Test Cases, one of either with a static list of 'test_cases' or a dynamic 'test_suite_specification' slot values. Note: at least one slot or the other, but generally not both(?) needs to be present." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 4 ; - sh:path schema1:identifier ], - [ sh:class ttm:TestMetadata ; + sh:property [ sh:class ttm:TestMetadata ; sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path ttm:test_metadata ], - [ sh:description "List of explicitly enumerated Test Cases." ; - sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; - sh:order 2 ; - sh:path ttm:test_cases ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path schema1:description ], [ sh:description "A Test persona describes the user or operational context of a given test." ; sh:in ( "All" "Clinical" "LookUp" "Mechanistic" ) ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:test_persona ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 4 ; + sh:path schema1:identifier ], + [ sh:description "List of explicitly enumerated Test Cases." ; + sh:or ( [ sh:class ttm:PathfinderTestCase ] [ sh:class ttm:TestCase ] [ sh:class ttm:PerformanceTestCase ] ) ; + sh:order 2 ; + sh:path ttm:test_cases ], [ sh:class ttm:TestSuiteSpecification ; sh:description "Declarative specification of a Test Suite of Test Cases whose generation is deferred, (i.e. within a Test Runner) or whose creation is achieved by stream processing of an external data source." ; sh:maxCount 1 ; @@ -666,15 +662,9 @@ ttm:TestSuite a sh:NodeShape ; sh:order 3 ; sh:path ttm:test_suite_specification ], [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path schema1:name ], + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 7 ; @@ -685,38 +675,53 @@ ttm:AcceptanceTestAsset a sh:NodeShape ; sh:closed true ; sh:description "Model derived from Jenn's test asset design and Shervin's runner JSON here as an example." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:in ( "High" "Low" "NotApplicable" ) ; + sh:property [ sh:maxCount 1 ; + sh:order 10 ; + sh:path ttm:input_id ], + [ sh:datatype xsd:string ; sh:maxCount 1 ; - sh:order 22 ; - sh:path ttm:semantic_severity ], - [ sh:in ( "causes not treats" "TMKP" "category too generic" "contraindications" "chemical roles" "test_issue" ) ; + sh:order 14 ; + sh:path ttm:predicate_name ], + [ sh:description "Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement" ; sh:maxCount 1 ; - sh:order 21 ; - sh:path ttm:test_issue ], - [ sh:description "A unique identifier for a Test Entity" ; + sh:order 18 ; + sh:path ttm:association ], + [ sh:datatype xsd:date ; + sh:description "The date by which this test must pass" ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 27 ; - sh:path schema1:identifier ], - [ sh:class ttm:Qualifier ; - sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 19 ; - sh:path ttm:qualifiers ], - [ sh:datatype xsd:string ; - sh:description "An answer that is returned from the test case, note: this must be combined with the expected_result to form a complete answer. It might make sense to couple these in their own object instead of strictly sticking to the flat schema introduced by the spreadsheet here: https://docs.google.com/spreadsheets/d/1yj7zIchFeVl1OHqL_kE_pqvzNLmGml_FLbHDs-8Yvig/edit#gid=0" ; + sh:order 0 ; + sh:path ttm:must_pass_date ], + [ sh:datatype xsd:integer ; + sh:description "The answer must return in these many results" ; sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:answer_informal_concept ], + sh:order 7 ; + sh:path ttm:top_level ], [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; sh:maxCount 1 ; sh:order 25 ; sh:path ttm:test_reference ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 20 ; + sh:path ttm:expected_output ], + [ sh:datatype xsd:string ; + sh:description "An answer that is returned from the test case, note: this must be combined with the expected_result to form a complete answer. It might make sense to couple these in their own object instead of strictly sticking to the flat schema introduced by the spreadsheet here: https://docs.google.com/spreadsheets/d/1yj7zIchFeVl1OHqL_kE_pqvzNLmGml_FLbHDs-8Yvig/edit#gid=0" ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path ttm:answer_informal_concept ], + [ sh:maxCount 1 ; + sh:order 17 ; + sh:path ttm:output_category ], [ sh:description "The node of the (templated) TRAPI query to replace" ; sh:in ( "subject" "object" ) ; sh:maxCount 1 ; sh:order 8 ; sh:path ttm:query_node ], + [ sh:datatype xsd:string ; + sh:description "The notes of the query" ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path ttm:notes ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 16 ; @@ -725,105 +730,90 @@ ttm:AcceptanceTestAsset a sh:NodeShape ; sh:description "Scalar settings for the TestRunner, e.g. \"inferred\"" ; sh:order 31 ; sh:path ttm:test_runner_settings ], - [ sh:class ttm:TestMetadata ; - sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 26 ; - sh:path ttm:test_metadata ], - [ sh:datatype xsd:string ; - sh:description "The full human-readable scientific question a SME would ask, which is encoded into the test asset." ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path ttm:scientific_question ], - [ sh:datatype xsd:string ; - sh:description "The notes of the query" ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path ttm:notes ], - [ sh:maxCount 1 ; - sh:order 13 ; - sh:path ttm:predicate_id ], - [ sh:datatype xsd:string ; - sh:description "The object of the core triple to be tested" ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:string_entry ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 29 ; sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a \"Block List\" collection" ; - sh:order 30 ; - sh:path schema1:additionalType ], - [ sh:maxCount 1 ; - sh:order 17 ; - sh:path ttm:output_category ], - [ sh:datatype xsd:integer ; - sh:description "The answer must return in these many results" ; - sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:top_level ], - [ sh:description "Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement" ; - sh:maxCount 1 ; - sh:order 18 ; - sh:path ttm:association ], [ sh:maxCount 1 ; - sh:order 10 ; - sh:path ttm:input_id ], - [ sh:description "The expected result of the query" ; - sh:in ( "include_good" "exclude_bad" ) ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path ttm:expected_result ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 11 ; - sh:path ttm:input_name ], + sh:order 12 ; + sh:path ttm:input_category ], [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:order 23 ; sh:path ttm:in_v1 ], + [ sh:in ( "causes not treats" "TMKP" "category too generic" "contraindications" "chemical roles" "test_issue" ) ; + sh:maxCount 1 ; + sh:order 21 ; + sh:path ttm:test_issue ], [ sh:description "The deployment environment within which this test must pass." ; sh:in ( "dev" "ci" "test" "prod" ) ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:must_pass_environment ], + [ sh:description "The expected result of the query" ; + sh:in ( "include_good" "exclude_bad" ) ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path ttm:expected_result ], + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 27 ; + sh:path schema1:identifier ], + [ sh:description "The direction of the expected query result triple" ; + sh:in ( "increased" "decreased" ) ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path ttm:direction ], + [ sh:description "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept." ; + sh:order 15 ; + sh:path ttm:output_ids ], + [ sh:datatype xsd:string ; + sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a \"Block List\" collection" ; + sh:order 30 ; + sh:path schema1:additionalType ], [ sh:maxCount 1 ; - sh:order 12 ; - sh:path ttm:input_category ], - [ sh:datatype xsd:date ; - sh:description "The date by which this test must pass" ; + sh:order 13 ; + sh:path ttm:predicate_id ], + [ sh:datatype xsd:string ; + sh:description "The object of the core triple to be tested" ; sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:must_pass_date ], + sh:order 3 ; + sh:path ttm:string_entry ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 28 ; sh:path schema1:name ], + [ sh:class ttm:TestMetadata ; + sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 26 ; + sh:path ttm:test_metadata ], [ sh:datatype xsd:boolean ; sh:maxCount 1 ; sh:order 24 ; sh:path ttm:well_known ], - [ sh:datatype xsd:string ; + [ sh:in ( "High" "Low" "NotApplicable" ) ; sh:maxCount 1 ; - sh:order 14 ; - sh:path ttm:predicate_name ], + sh:order 22 ; + sh:path ttm:semantic_severity ], [ sh:datatype xsd:string ; sh:maxCount 1 ; - sh:order 20 ; - sh:path ttm:expected_output ], - [ sh:description "The direction of the expected query result triple" ; - sh:in ( "increased" "decreased" ) ; + sh:order 11 ; + sh:path ttm:input_name ], + [ sh:datatype xsd:string ; + sh:description "The full human-readable scientific question a SME would ask, which is encoded into the test asset." ; sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:direction ], - [ sh:maxCount 1 ; - sh:order 15 ; - sh:path ttm:output_id ] ; + sh:order 2 ; + sh:path ttm:scientific_question ], + [ sh:class ttm:Qualifier ; + sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 19 ; + sh:path ttm:qualifiers ] ; sh:targetClass ttm:AcceptanceTestAsset . ttm:PathfinderPathNode a sh:NodeShape ; @@ -831,52 +821,61 @@ ttm:PathfinderPathNode a sh:NodeShape ; sh:description "Represents an output path node" ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:order 0 ; + sh:path schema1:additionalType ], + [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 1 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:order 0 ; - sh:path schema1:additionalType ] ; + sh:path schema1:name ] ; sh:targetClass ttm:PathfinderPathNode . ttm:PathfinderTestAsset a sh:NodeShape ; sh:closed true ; sh:description "Represents a Test Asset, which is a single specific instance of TestCase-agnostic semantic parameters representing the specification of a Translator test target with inputs and (expected) outputs." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:order 2 ; - sh:path ttm:source_input_category ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:target_input_name ], - [ sh:class ttm:Qualifier ; + sh:property [ sh:class ttm:Qualifier ; sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 8 ; sh:path ttm:qualifiers ], [ sh:datatype xsd:string ; sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:predicate_name ], + sh:order 4 ; + sh:path ttm:target_input_name ], [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 13 ; - sh:path schema1:name ], + sh:order 7 ; + sh:path ttm:predicate_name ], + [ sh:maxCount 1 ; + sh:order 6 ; + sh:path ttm:predicate_id ], [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 12 ; sh:path schema1:identifier ], + [ sh:maxCount 1 ; + sh:order 5 ; + sh:path ttm:target_input_category ], + [ sh:class ttm:PathfinderPathNode ; + sh:minCount 1 ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 10 ; + sh:path ttm:path_nodes ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 13 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 16 ; + sh:path ttm:test_runner_settings ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 11 ; sh:path ttm:expected_output ], - [ sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:target_input_id ], [ sh:datatype xsd:integer ; sh:description "The number of nodes required in a path to pass this test." ; sh:maxCount 1 ; @@ -888,39 +887,34 @@ ttm:PathfinderTestAsset a sh:NodeShape ; sh:order 1 ; sh:path ttm:source_input_name ], [ sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:target_input_category ], + sh:order 0 ; + sh:path ttm:source_input_id ], [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 16 ; - sh:path ttm:test_runner_settings ], + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 15 ; + sh:path schema1:additionalType ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 14 ; sh:path schema1:description ], [ sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:source_input_id ], - [ sh:class ttm:PathfinderPathNode ; - sh:minCount 1 ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 10 ; - sh:path ttm:path_nodes ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 15 ; - sh:path schema1:additionalType ], + sh:order 2 ; + sh:path ttm:source_input_category ], [ sh:maxCount 1 ; - sh:order 6 ; - sh:path ttm:predicate_id ] ; + sh:order 3 ; + sh:path ttm:target_input_id ] ; sh:targetClass ttm:PathfinderTestAsset . ttm:TestCaseResult a sh:NodeShape ; sh:closed true ; sh:description "The outcome of a TestRunner run of one specific TestCase." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:description "CURIE id of a TestSuite registered in the system." ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path ttm:test_suite_id ], + [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 6 ; sh:path schema1:additionalType ], @@ -928,64 +922,60 @@ ttm:TestCaseResult a sh:NodeShape ; sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; sh:order 7 ; sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path schema1:name ], + [ sh:class ttm:TestCase ; + sh:description "Slot referencing a single TestCase." ; + sh:maxCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ttm:test_case ], [ sh:description "Encoded result of a single test run of a given test case" ; sh:in ( "PASSED" "FAILED" "SKIPPED" ) ; sh:maxCount 1 ; sh:order 2 ; sh:path ttm:test_case_result ], - [ sh:description "CURIE id of a TestSuite registered in the system." ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:test_suite_id ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 3 ; - sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 5 ; sh:path schema1:description ], - [ sh:class ttm:TestCase ; - sh:description "Slot referencing a single TestCase." ; - sh:maxCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path ttm:test_case ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; + [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 4 ; - sh:path schema1:name ] ; + sh:minCount 1 ; + sh:order 3 ; + sh:path schema1:identifier ] ; sh:targetClass ttm:TestCaseResult . ttm:TestEntity a sh:NodeShape ; sh:closed false ; sh:description "Abstract global 'identification' class shared as a parent with all major model classes within the data model for Translator testing." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path schema1:identifier ], + sh:property [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 4 ; + sh:path ttm:test_runner_settings ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 1 ; sh:path schema1:name ], [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 4 ; - sh:path ttm:test_runner_settings ], + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path schema1:description ], [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 3 ; - sh:path schema1:additionalType ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; + sh:path schema1:additionalType ], + [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 2 ; - sh:path schema1:description ] ; + sh:order 0 ; + sh:path schema1:identifier ] ; sh:targetClass ttm:TestEntity . ttm:TestResultPKSet a sh:NodeShape ; @@ -993,17 +983,10 @@ ttm:TestResultPKSet a sh:NodeShape ; sh:description "Primary keys for a given ARA result set from a SmokeTest result for a given TestCase." ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:arax ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path ttm:aragorn ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:bte ], + sh:order 9 ; + sh:path schema1:description ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 1 ; @@ -1013,36 +996,43 @@ ttm:TestResultPKSet a sh:NodeShape ; sh:order 0 ; sh:path ttm:parent_pk ], [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path schema1:description ], + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 10 ; + sh:path schema1:additionalType ], [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 8 ; - sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 11 ; - sh:path ttm:test_runner_settings ], + sh:order 3 ; + sh:path ttm:arax ], [ sh:datatype xsd:string ; sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:unsecret ], + sh:order 5 ; + sh:path ttm:bte ], [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 7 ; sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path ttm:aragorn ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 8 ; + sh:path schema1:name ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 6 ; sh:path ttm:improving ], [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 10 ; - sh:path schema1:additionalType ] ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 11 ; + sh:path ttm:test_runner_settings ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path ttm:unsecret ] ; sh:targetClass ttm:TestResultPKSet . ttm:TestEntityParameter a sh:NodeShape ; @@ -1065,10 +1055,19 @@ ttm:TestAsset a sh:NodeShape ; sh:closed true ; sh:description "Represents a Test Asset, which is a single specific instance of TestCase-agnostic semantic parameters representing the specification of a Translator test target with inputs and (expected) outputs." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:maxCount 1 ; + sh:order 7 ; + sh:path ttm:output_category ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 6 ; - sh:path ttm:output_name ], + sh:order 19 ; + sh:path schema1:description ], + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 17 ; + sh:path schema1:identifier ], [ sh:class ttm:Qualifier ; sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; sh:nodeKind sh:BlankNodeOrIRI ; @@ -1076,190 +1075,190 @@ ttm:TestAsset a sh:NodeShape ; sh:path ttm:qualifiers ], [ sh:datatype xsd:string ; sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:predicate_name ], - [ sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:output_category ], + sh:order 10 ; + sh:path ttm:expected_output ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path ttm:input_name ], + [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:order 14 ; + sh:path ttm:well_known ], [ sh:datatype xsd:string ; sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a \"Block List\" collection" ; sh:order 20 ; sh:path schema1:additionalType ], - [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; + [ sh:datatype xsd:string ; sh:maxCount 1 ; - sh:order 15 ; - sh:path ttm:test_reference ], - [ sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:output_id ], - [ sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:input_id ], + sh:order 6 ; + sh:path ttm:output_name ], [ sh:datatype xsd:string ; - sh:description "Scalar settings for the TestRunner, e.g. \"inferred\"" ; - sh:order 21 ; - sh:path ttm:test_runner_settings ], + sh:maxCount 1 ; + sh:order 4 ; + sh:path ttm:predicate_name ], [ sh:description "Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement" ; sh:maxCount 1 ; sh:order 8 ; sh:path ttm:association ], - [ sh:in ( "causes not treats" "TMKP" "category too generic" "contraindications" "chemical roles" "test_issue" ) ; - sh:maxCount 1 ; - sh:order 11 ; - sh:path ttm:test_issue ], [ sh:class ttm:TestMetadata ; sh:description "Test metadata describes the external provenance, cross-references and objectives for a given test." ; sh:maxCount 1 ; sh:nodeKind sh:IRI ; sh:order 16 ; sh:path ttm:test_metadata ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 10 ; - sh:path ttm:expected_output ], - [ sh:datatype xsd:boolean ; - sh:maxCount 1 ; - sh:order 13 ; - sh:path ttm:in_v1 ], [ sh:in ( "High" "Low" "NotApplicable" ) ; sh:maxCount 1 ; sh:order 12 ; sh:path ttm:semantic_severity ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 19 ; - sh:path schema1:description ], - [ sh:datatype xsd:boolean ; - sh:maxCount 1 ; - sh:order 14 ; - sh:path ttm:well_known ], [ sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:predicate_id ], + sh:order 0 ; + sh:path ttm:input_id ], + [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path ttm:test_reference ], [ sh:maxCount 1 ; sh:order 2 ; sh:path ttm:input_category ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:input_name ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 17 ; - sh:path schema1:identifier ], + [ sh:maxCount 1 ; + sh:order 3 ; + sh:path ttm:predicate_id ], + [ sh:description "One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept." ; + sh:order 5 ; + sh:path ttm:output_ids ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; sh:order 18 ; - sh:path schema1:name ] ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Scalar settings for the TestRunner, e.g. \"inferred\"" ; + sh:order 21 ; + sh:path ttm:test_runner_settings ], + [ sh:in ( "causes not treats" "TMKP" "category too generic" "contraindications" "chemical roles" "test_issue" ) ; + sh:maxCount 1 ; + sh:order 11 ; + sh:path ttm:test_issue ], + [ sh:datatype xsd:boolean ; + sh:maxCount 1 ; + sh:order 13 ; + sh:path ttm:in_v1 ] ; sh:targetClass ttm:TestAsset . ttm:Precondition a sh:NodeShape ; sh:closed true ; sh:description "Represents a precondition for a TestCase" ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; + sh:property [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 0 ; + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 2 ; + sh:path schema1:description ], + [ sh:datatype xsd:string ; sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; sh:order 4 ; sh:path ttm:test_runner_settings ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 3 ; sh:path schema1:additionalType ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 0 ; - sh:path schema1:identifier ], [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; + sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 2 ; - sh:path schema1:description ] ; + sh:order 1 ; + sh:path schema1:name ] ; sh:targetClass ttm:Precondition . ttm:PathfinderTestCase a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 4 ; - sh:path schema1:identifier ], - [ sh:datatype xsd:string ; + sh:property [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 5 ; + sh:order 4 ; sh:path schema1:name ], [ sh:datatype xsd:string ; sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; + sh:order 7 ; sh:path ttm:test_runner_settings ], + [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; + sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path ttm:test_case_objective ], + [ sh:description "A unique identifier for a Test Entity" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:order 3 ; + sh:path schema1:identifier ], [ sh:class ttm:PathfinderTestAsset ; sh:description "List of explicitly enumerated Test Assets. The class attributes of TestAsset would be included in the TestCase versus being referred to by the identifier (curie) of the TestAsset. That is, this would be a list of objects (in JSONSchema serialization) versus a list of strings (where each string is an identifier pointing to another class)." ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 0 ; sh:path ttm:test_assets ], - [ sh:description "Deployment environment within which the associated TestSuite is run." ; - sh:in ( "dev" "ci" "test" "prod" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:test_env ], - [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; - sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:test_case_objective ], + [ sh:datatype xsd:string ; + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 6 ; + sh:path schema1:additionalType ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; - sh:order 6 ; + sh:order 5 ; sh:path schema1:description ], [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; sh:order 2 ; - sh:path ttm:components ], - [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 7 ; - sh:path schema1:additionalType ] ; + sh:path ttm:components ] ; sh:targetClass ttm:PathfinderTestCase . ttm:PerformanceTestCase a sh:NodeShape ; sh:closed true ; sh:description "Represents a performance test case." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Deployment environment within which the associated TestSuite is run." ; - sh:in ( "dev" "ci" "test" "prod" ) ; + sh:property [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; + sh:minCount 1 ; sh:order 15 ; - sh:path ttm:test_env ], + sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; + sh:order 18 ; + sh:path schema1:additionalType ], [ sh:datatype xsd:integer ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 0 ; sh:path ttm:test_run_time ], - [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; - sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path ttm:test_case_objective ], [ sh:datatype xsd:string ; - sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; sh:order 19 ; - sh:path schema1:additionalType ], + sh:path ttm:test_runner_settings ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 8 ; sh:path ttm:test_case_predicate_name ], + [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; + sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path ttm:test_case_objective ], + [ sh:class ttm:Qualifier ; + sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 11 ; + sh:path ttm:qualifiers ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 17 ; + sh:path schema1:description ], [ sh:class ttm:Precondition ; sh:nodeKind sh:IRI ; sh:order 4 ; @@ -1269,173 +1268,145 @@ ttm:PerformanceTestCase a sh:NodeShape ; sh:minCount 1 ; sh:order 1 ; sh:path ttm:spawn_rate ], - [ sh:datatype xsd:string ; - sh:maxCount 1 ; - sh:order 9 ; - sh:path ttm:test_case_predicate_id ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 16 ; - sh:path schema1:identifier ], + [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; + sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; + sh:order 14 ; + sh:path ttm:components ], [ sh:maxCount 1 ; sh:order 10 ; sh:path ttm:test_case_input_id ], - [ sh:description "Type of TestCase query." ; - sh:in ( "treats" ) ; - sh:maxCount 1 ; - sh:order 2 ; - sh:path ttm:query_type ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 17 ; + sh:order 16 ; sh:path schema1:name ], [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; sh:maxCount 1 ; sh:order 7 ; sh:path ttm:test_case_source ], - [ sh:description "A template for a query, which can be used to generate a query for a test case. note: the current enumerated values for this slot come from the Benchmarks repo config/benchmarks.json \"templates\" collection and refer to the \"name\" field of each template. Templates themselves are currently stored in the config/[source_name]/templates directory." ; - sh:in ( "ameliorates" "treats" "three_hop" "drug_treats_rare_disease" "drug-to-gene" ) ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:trapi_template ], - [ sh:class ttm:Qualifier ; - sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 11 ; - sh:path ttm:qualifiers ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; + [ sh:description "Type of TestCase query." ; + sh:in ( "treats" ) ; sh:maxCount 1 ; - sh:order 18 ; - sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 20 ; - sh:path ttm:test_runner_settings ], - [ sh:maxCount 1 ; - sh:order 13 ; - sh:path ttm:output_category ], - [ sh:maxCount 1 ; - sh:order 12 ; - sh:path ttm:input_category ], - [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; - sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; - sh:order 14 ; - sh:path ttm:components ], + sh:order 2 ; + sh:path ttm:query_type ], [ sh:class ttm:TestAsset ; sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in 'test_assets' slot (\"Block List\") collection." ; sh:minCount 1 ; sh:nodeKind sh:IRI ; sh:order 3 ; - sh:path ttm:test_assets ] ; + sh:path ttm:test_assets ], + [ sh:maxCount 1 ; + sh:order 12 ; + sh:path ttm:input_category ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 9 ; + sh:path ttm:test_case_predicate_id ], + [ sh:maxCount 1 ; + sh:order 13 ; + sh:path ttm:output_category ], + [ sh:description "A template for a query, which can be used to generate a query for a test case. note: the current enumerated values for this slot come from the Benchmarks repo config/benchmarks.json \"templates\" collection and refer to the \"name\" field of each template. Templates themselves are currently stored in the config/[source_name]/templates directory." ; + sh:in ( "ameliorates" "treats" "three_hop" "drug_treats_rare_disease" "drug-to-gene" ) ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path ttm:trapi_template ] ; sh:targetClass ttm:PerformanceTestCase . ttm:TestCase a sh:NodeShape ; sh:closed true ; sh:description "Represents a single enumerated instance of Test Case, derived from a given collection of one or more TestAsset instances (the value of the 'test_assets' slot) which define the 'inputs' and 'outputs' of the TestCase, used to probe a particular test condition." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; - sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; - sh:maxCount 1 ; - sh:order 4 ; - sh:path ttm:test_case_objective ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 16 ; - sh:path schema1:description ], - [ sh:class ttm:Qualifier ; - sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; - sh:nodeKind sh:BlankNodeOrIRI ; - sh:order 9 ; - sh:path ttm:qualifiers ], + sh:property [ sh:maxCount 1 ; + sh:order 10 ; + sh:path ttm:input_category ], [ sh:description "The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX." ; sh:in ( infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ) ; sh:order 12 ; sh:path ttm:components ], - [ sh:maxCount 1 ; - sh:order 10 ; - sh:path ttm:input_category ], - [ sh:maxCount 1 ; - sh:order 8 ; - sh:path ttm:test_case_input_id ], - [ sh:description "A template for a query, which can be used to generate a query for a test case. note: the current enumerated values for this slot come from the Benchmarks repo config/benchmarks.json \"templates\" collection and refer to the \"name\" field of each template. Templates themselves are currently stored in the config/[source_name]/templates directory." ; - sh:in ( "ameliorates" "treats" "three_hop" "drug_treats_rare_disease" "drug-to-gene" ) ; - sh:maxCount 1 ; - sh:order 3 ; - sh:path ttm:trapi_template ], - [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; - sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path ttm:test_case_source ], [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 18 ; - sh:path ttm:test_runner_settings ], + sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; + sh:order 16 ; + sh:path schema1:additionalType ], + [ sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:order 7 ; + sh:path ttm:test_case_predicate_id ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; - sh:order 15 ; + sh:order 14 ; sh:path schema1:name ], - [ sh:datatype xsd:string ; - sh:description "One or more 'tags' slot values (slot inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in a \"Block List\" collection." ; - sh:order 17 ; - sh:path schema1:additionalType ], - [ sh:class ttm:TestAsset ; - sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in 'test_assets' slot (\"Block List\") collection." ; - sh:minCount 1 ; - sh:nodeKind sh:IRI ; - sh:order 1 ; - sh:path ttm:test_assets ], [ sh:description "Type of TestCase query." ; sh:in ( "treats" ) ; sh:maxCount 1 ; sh:order 0 ; sh:path ttm:query_type ], - [ sh:datatype xsd:string ; + [ sh:maxCount 1 ; + sh:order 8 ; + sh:path ttm:test_case_input_id ], + [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 7 ; - sh:path ttm:test_case_predicate_id ], + sh:minCount 1 ; + sh:order 13 ; + sh:path schema1:identifier ], [ sh:class ttm:Precondition ; sh:nodeKind sh:IRI ; sh:order 2 ; sh:path ttm:preconditions ], + [ sh:class ttm:Qualifier ; + sh:description "Optional qualifiers which constrain to the test asset defined knowledge statement. Note that this field records such qualifier slots and values as tag=value pairs, where the tag is the Biolink Model qualifier slot named and the value is an acceptable (Biolink Model enum?) value of the said qualifier slot." ; + sh:nodeKind sh:BlankNodeOrIRI ; + sh:order 9 ; + sh:path ttm:qualifiers ], + [ sh:class ttm:TestAsset ; + sh:description "One or more 'tags' slot values (inherited from TestEntity) should generally be defined as filters to specify TestAsset membership in 'test_assets' slot (\"Block List\") collection." ; + sh:minCount 1 ; + sh:nodeKind sh:IRI ; + sh:order 1 ; + sh:path ttm:test_assets ], + [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; + sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; + sh:maxCount 1 ; + sh:order 4 ; + sh:path ttm:test_case_objective ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 15 ; + sh:path schema1:description ], + [ sh:description "A template for a query, which can be used to generate a query for a test case. note: the current enumerated values for this slot come from the Benchmarks repo config/benchmarks.json \"templates\" collection and refer to the \"name\" field of each template. Templates themselves are currently stored in the config/[source_name]/templates directory." ; + sh:in ( "ameliorates" "treats" "three_hop" "drug_treats_rare_disease" "drug-to-gene" ) ; + sh:maxCount 1 ; + sh:order 3 ; + sh:path ttm:trapi_template ], [ sh:datatype xsd:string ; sh:maxCount 1 ; sh:order 6 ; sh:path ttm:test_case_predicate_name ], - [ sh:description "A unique identifier for a Test Entity" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 14 ; - sh:path schema1:identifier ], - [ sh:description "Deployment environment within which the associated TestSuite is run." ; - sh:in ( "dev" "ci" "test" "prod" ) ; + [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; + sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; sh:maxCount 1 ; - sh:order 13 ; - sh:path ttm:test_env ], + sh:order 5 ; + sh:path ttm:test_case_source ], [ sh:maxCount 1 ; sh:order 11 ; - sh:path ttm:output_category ] ; + sh:path ttm:output_category ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 17 ; + sh:path ttm:test_runner_settings ] ; sh:targetClass ttm:TestCase . ttm:TestSuiteSpecification a sh:NodeShape ; sh:closed true ; sh:description "Parameters for a Test Case instances either dynamically generated from some external source of Test Assets." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:description "File format of test entity data (e.g. TSV, YAML or JSON)" ; - sh:in ( "TSV" "YAML" "JSON" ) ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:test_data_file_format ], - [ sh:description "An web accessible file resource link to test entity data (e.g. a web accessible text file of Test Asset entries)" ; + sh:property [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:test_data_file_locator ], + sh:minCount 1 ; + sh:order 2 ; + sh:path schema1:identifier ], [ sh:datatype xsd:string ; sh:description "A human-readable name for a Test Entity" ; sh:maxCount 1 ; @@ -1445,16 +1416,20 @@ ttm:TestSuiteSpecification a sh:NodeShape ; sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; sh:order 6 ; sh:path ttm:test_runner_settings ], + [ sh:description "An web accessible file resource link to test entity data (e.g. a web accessible text file of Test Asset entries)" ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path ttm:test_data_file_locator ], [ sh:datatype xsd:string ; sh:description "A human-readable description for a Test Entity" ; sh:maxCount 1 ; sh:order 4 ; sh:path schema1:description ], - [ sh:description "A unique identifier for a Test Entity" ; + [ sh:description "File format of test entity data (e.g. TSV, YAML or JSON)" ; + sh:in ( "TSV" "YAML" "JSON" ) ; sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 2 ; - sh:path schema1:identifier ], + sh:order 1 ; + sh:path ttm:test_data_file_format ], [ sh:datatype xsd:string ; sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; sh:order 5 ; @@ -1465,62 +1440,62 @@ ttm:Qualifier a sh:NodeShape ; sh:closed true ; sh:ignoredProperties ( rdf:type ) ; sh:property [ sh:datatype xsd:string ; - sh:description "The 'value' of should be a suitable value generally drawn from an applicable Biolink Model (\"Enum\") value set of the specified Qualifier." ; - sh:maxCount 1 ; - sh:order 1 ; - sh:path ttm:value ], - [ sh:datatype xsd:string ; sh:description "The 'parameter' of a Qualifier should be a `qualifier` slot name from the Biolink Model ('biolink' namespace) 'biolink:qualifier' hierarchy." ; sh:maxCount 1 ; sh:order 0 ; - sh:path ttm:parameter ] ; + sh:path ttm:parameter ], + [ sh:datatype xsd:string ; + sh:description "The 'value' of should be a suitable value generally drawn from an applicable Biolink Model (\"Enum\") value set of the specified Qualifier." ; + sh:maxCount 1 ; + sh:order 1 ; + sh:path ttm:value ] ; sh:targetClass ttm:Qualifier . ttm:TestMetadata a sh:NodeShape ; sh:closed true ; sh:description "Represents metadata related to (external SME, SMURF, Translator feedback, large scale batch, etc.) like the provenance of test assets, cases and/or suites." ; sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:datatype xsd:string ; - sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; - sh:order 7 ; - sh:path schema1:additionalType ], - [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; - sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; - sh:maxCount 1 ; - sh:order 0 ; - sh:path ttm:test_source ], - [ sh:datatype xsd:string ; - sh:description "A human-readable description for a Test Entity" ; - sh:maxCount 1 ; - sh:order 6 ; - sh:path schema1:description ], - [ sh:datatype xsd:string ; - sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; - sh:order 8 ; - sh:path ttm:test_runner_settings ], - [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; + sh:property [ sh:description "Document URL where original test source particulars are registered (e.g. Github repo)" ; sh:maxCount 1 ; sh:order 1 ; sh:path ttm:test_reference ], - [ sh:datatype xsd:string ; - sh:description "A human-readable name for a Test Entity" ; - sh:maxCount 1 ; - sh:order 5 ; - sh:path schema1:name ], [ sh:description "A unique identifier for a Test Entity" ; sh:maxCount 1 ; sh:minCount 1 ; sh:order 4 ; sh:path schema1:identifier ], + [ sh:datatype xsd:string ; + sh:description "A human-readable name for a Test Entity" ; + sh:maxCount 1 ; + sh:order 5 ; + sh:path schema1:name ], + [ sh:datatype xsd:string ; + sh:description "Scalar parameters for the TestRunner processing a given TestEntity." ; + sh:order 8 ; + sh:path ttm:test_runner_settings ], [ sh:description "Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)" ; sh:in ( "AcceptanceTest" "BenchmarkTest" "QuantitativeTest" "StandardsValidationTest" "OneHopTest" ) ; sh:maxCount 1 ; sh:order 2 ; sh:path ttm:test_objective ], + [ sh:description "Provenance of a specific set of test assets, cases and/or suites. Or, the person who cares about this, know about this. We would like this to be an ORCID eventually, but currently it is just a string." ; + sh:in ( "SME" "SMURF" "GitHubUserFeedback" "TACT" "BenchMark" "TranslatorTeam" "TestDataLocation" ) ; + sh:maxCount 1 ; + sh:order 0 ; + sh:path ttm:test_source ], + [ sh:datatype xsd:string ; + sh:description "A human-readable tags for categorical memberships of a TestEntity (preferably a URI or CURIE). Typically used to aggregate instances of TestEntity into formally typed or ad hoc lists." ; + sh:order 7 ; + sh:path schema1:additionalType ], [ sh:class ttm:TestEntityParameter ; sh:description "Metadata annotation." ; sh:nodeKind sh:BlankNodeOrIRI ; sh:order 3 ; - sh:path ttm:test_annotations ] ; + sh:path ttm:test_annotations ], + [ sh:datatype xsd:string ; + sh:description "A human-readable description for a Test Entity" ; + sh:maxCount 1 ; + sh:order 6 ; + sh:path schema1:description ] ; sh:targetClass ttm:TestMetadata . diff --git a/project/shex/translator_testing_model.shex b/project/shex/translator_testing_model.shex index 58ca779..18033a4 100644 --- a/project/shex/translator_testing_model.shex +++ b/project/shex/translator_testing_model.shex @@ -149,11 +149,7 @@ linkml:Sparqlpath xsd:string [ infores:ncats-ars infores:arax infores:explanatory-agent infores:improving-agent infores:aragorn infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict - infores:knowledge-collaboratory infores:connections-hypothesis ] * ; - [ - - - ] ? + infores:knowledge-collaboratory infores:connections-hypothesis ] * ) ; rdf:type [ ] ) @@ -222,7 +218,7 @@ linkml:Sparqlpath xsd:string @ ? ; @ ? ; @linkml:String ? ; - @linkml:Uriorcurie ? ; + @linkml:Uriorcurie * ; @linkml:String ? ; @ ? ; @ ? ; @@ -283,10 +279,6 @@ linkml:Sparqlpath xsd:string infores:biothings-explorer infores:unsecret-agent infores:rtx-kg2 infores:icees-kg infores:cam-kp infores:spoke infores:molepro infores:genetics-data-provider infores:textmining-kp infores:cohd infores:openpredict infores:knowledge-collaboratory infores:connections-hypothesis ] * ; - [ - - - ] ? ; schema1:additionalType @linkml:String * ) ; rdf:type [ ] diff --git a/project/sqlschema/translator_testing_model.sql b/project/sqlschema/translator_testing_model.sql index 5dd3653..a5d2fc2 100644 --- a/project/sqlschema/translator_testing_model.sql +++ b/project/sqlschema/translator_testing_model.sql @@ -37,7 +37,6 @@ -- * Slot: input_category Description: -- * Slot: predicate_id Description: -- * Slot: predicate_name Description: --- * Slot: output_id Description: -- * Slot: output_name Description: -- * Slot: output_category Description: -- * Slot: association Description: Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement @@ -85,7 +84,6 @@ -- * Slot: input_category Description: -- * Slot: predicate_id Description: -- * Slot: predicate_name Description: --- * Slot: output_id Description: -- * Slot: output_name Description: -- * Slot: output_category Description: -- * Slot: association Description: Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement @@ -106,7 +104,6 @@ -- * Slot: input_category Description: -- * Slot: predicate_id Description: -- * Slot: predicate_name Description: --- * Slot: output_id Description: -- * Slot: output_name Description: -- * Slot: output_category Description: -- * Slot: association Description: Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement @@ -134,7 +131,6 @@ -- * Slot: test_case_input_id Description: -- * Slot: input_category Description: -- * Slot: output_category Description: --- * Slot: test_env Description: Deployment environment within which the associated TestSuite is run. -- * Slot: id Description: A unique identifier for a Test Entity -- * Slot: name Description: A human-readable name for a Test Entity -- * Slot: description Description: A human-readable description for a Test Entity @@ -145,7 +141,6 @@ -- * Slot: OneHopTestSuite_id Description: Autocreated FK slot -- # Class: "PathfinderTestCase" Description: "" -- * Slot: test_case_objective Description: Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity) --- * Slot: test_env Description: Deployment environment within which the associated TestSuite is run. -- * Slot: id Description: A unique identifier for a Test Entity -- * Slot: name Description: A human-readable name for a Test Entity -- * Slot: description Description: A human-readable description for a Test Entity @@ -159,7 +154,6 @@ -- * Slot: test_case_input_id Description: -- * Slot: input_category Description: -- * Slot: output_category Description: --- * Slot: test_env Description: Deployment environment within which the associated TestSuite is run. -- * Slot: id Description: A unique identifier for a Test Entity -- * Slot: name Description: A human-readable name for a Test Entity -- * Slot: description Description: A human-readable description for a Test Entity @@ -173,7 +167,6 @@ -- * Slot: test_case_input_id Description: -- * Slot: input_category Description: -- * Slot: output_category Description: --- * Slot: test_env Description: Deployment environment within which the associated TestSuite is run. -- * Slot: id Description: A unique identifier for a Test Entity -- * Slot: name Description: A human-readable name for a Test Entity -- * Slot: description Description: A human-readable description for a Test Entity @@ -189,7 +182,6 @@ -- * Slot: test_case_input_id Description: -- * Slot: input_category Description: -- * Slot: output_category Description: --- * Slot: test_env Description: Deployment environment within which the associated TestSuite is run. -- * Slot: id Description: A unique identifier for a Test Entity -- * Slot: name Description: A human-readable name for a Test Entity -- * Slot: description Description: A human-readable description for a Test Entity @@ -251,7 +243,7 @@ -- * Slot: TestRunSession_id Description: Autocreated FK slot -- * Slot: test_case_id Description: Slot referencing a single TestCase. -- # Class: "TestRunSession" Description: "Single run of a TestRunner in a given environment, with a specified set of test_entities (generally, one or more instances of TestSuite)." --- * Slot: test_env Description: Deployment environment within which the associated TestSuite is run. +-- * Slot: test_env Description: Deployment environment within which a TestRunSession ran. Test cases don't carry one: the same suite runs in every environment, and the TestHarness is told which one to test. -- * Slot: test_runner_name Description: Global system name of a TestRunner. -- * Slot: timestamp Description: Date time when a given entity was created. -- * Slot: id Description: A unique identifier for a Test Entity @@ -288,6 +280,9 @@ -- # Class: "PathfinderPathNode_ids" Description: "" -- * Slot: PathfinderPathNode_id Description: Autocreated FK slot -- * Slot: ids Description: +-- # Class: "TestAsset_output_ids" Description: "" +-- * Slot: TestAsset_id Description: Autocreated FK slot +-- * Slot: output_ids Description: One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept. -- # Class: "TestAsset_tags" Description: "" -- * Slot: TestAsset_id Description: Autocreated FK slot -- * Slot: tags Description: One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a "Block List" collection @@ -303,12 +298,18 @@ -- # Class: "PathfinderTestAsset_test_runner_settings" Description: "" -- * Slot: PathfinderTestAsset_id Description: Autocreated FK slot -- * Slot: test_runner_settings Description: Scalar parameters for the TestRunner processing a given TestEntity. +-- # Class: "AcceptanceTestAsset_output_ids" Description: "" +-- * Slot: AcceptanceTestAsset_id Description: Autocreated FK slot +-- * Slot: output_ids Description: One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept. -- # Class: "AcceptanceTestAsset_tags" Description: "" -- * Slot: AcceptanceTestAsset_id Description: Autocreated FK slot -- * Slot: tags Description: One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a "Block List" collection -- # Class: "AcceptanceTestAsset_test_runner_settings" Description: "" -- * Slot: AcceptanceTestAsset_id Description: Autocreated FK slot -- * Slot: test_runner_settings Description: Scalar settings for the TestRunner, e.g. "inferred" +-- # Class: "TestEdgeData_output_ids" Description: "" +-- * Slot: TestEdgeData_id Description: Autocreated FK slot +-- * Slot: output_ids Description: One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept. -- # Class: "TestEdgeData_tags" Description: "" -- * Slot: TestEdgeData_id Description: Autocreated FK slot -- * Slot: tags Description: One or more 'tags' slot values (inherited from TestEntity) should generally be defined to specify TestAsset membership in a "Block List" collection @@ -473,7 +474,6 @@ CREATE TABLE "Precondition" ( ); CREATE TABLE "PathfinderTestCase" ( test_case_objective VARCHAR(23), - test_env VARCHAR(4), id TEXT NOT NULL, name TEXT, description TEXT, @@ -489,7 +489,6 @@ CREATE TABLE "AcceptanceTestCase" ( test_case_input_id TEXT, input_category TEXT, output_category TEXT, - test_env VARCHAR(4), id TEXT NOT NULL, name TEXT, description TEXT, @@ -505,7 +504,6 @@ CREATE TABLE "QuantitativeTestCase" ( test_case_input_id TEXT, input_category TEXT, output_category TEXT, - test_env VARCHAR(4), id TEXT NOT NULL, name TEXT, description TEXT, @@ -600,7 +598,6 @@ CREATE TABLE "AcceptanceTestAsset" ( input_category TEXT, predicate_id TEXT, predicate_name TEXT, - output_id TEXT, output_name TEXT, output_category TEXT, association TEXT, @@ -625,7 +622,6 @@ CREATE TABLE "TestEdgeData" ( input_category TEXT, predicate_id TEXT, predicate_name TEXT, - output_id TEXT, output_name TEXT, output_category TEXT, association TEXT, @@ -877,7 +873,6 @@ CREATE TABLE "TestCase" ( test_case_input_id TEXT, input_category TEXT, output_category TEXT, - test_env VARCHAR(4), id TEXT NOT NULL, name TEXT, description TEXT, @@ -905,7 +900,6 @@ CREATE TABLE "PerformanceTestCase" ( test_case_input_id TEXT, input_category TEXT, output_category TEXT, - test_env VARCHAR(4), id TEXT NOT NULL, name TEXT, description TEXT, @@ -944,6 +938,12 @@ CREATE TABLE "PathfinderTestAsset_test_runner_settings" ( PRIMARY KEY ("PathfinderTestAsset_id", test_runner_settings), FOREIGN KEY("PathfinderTestAsset_id") REFERENCES "PathfinderTestAsset" (id) ); +CREATE TABLE "AcceptanceTestAsset_output_ids" ( + "AcceptanceTestAsset_id" TEXT, + output_ids TEXT, + PRIMARY KEY ("AcceptanceTestAsset_id", output_ids), + FOREIGN KEY("AcceptanceTestAsset_id") REFERENCES "AcceptanceTestAsset" (id) +); CREATE TABLE "AcceptanceTestAsset_tags" ( "AcceptanceTestAsset_id" TEXT, tags TEXT, @@ -956,6 +956,12 @@ CREATE TABLE "AcceptanceTestAsset_test_runner_settings" ( PRIMARY KEY ("AcceptanceTestAsset_id", test_runner_settings), FOREIGN KEY("AcceptanceTestAsset_id") REFERENCES "AcceptanceTestAsset" (id) ); +CREATE TABLE "TestEdgeData_output_ids" ( + "TestEdgeData_id" TEXT, + output_ids TEXT, + PRIMARY KEY ("TestEdgeData_id", output_ids), + FOREIGN KEY("TestEdgeData_id") REFERENCES "TestEdgeData" (id) +); CREATE TABLE "TestEdgeData_tags" ( "TestEdgeData_id" TEXT, tags TEXT, @@ -1046,7 +1052,6 @@ CREATE TABLE "TestAsset" ( input_category TEXT, predicate_id TEXT, predicate_name TEXT, - output_id TEXT, output_name TEXT, output_category TEXT, association TEXT, @@ -1153,6 +1158,12 @@ CREATE TABLE "Qualifier" ( FOREIGN KEY("QuantitativeTestCase_id") REFERENCES "QuantitativeTestCase" (id), FOREIGN KEY("PerformanceTestCase_id") REFERENCES "PerformanceTestCase" (id) ); +CREATE TABLE "TestAsset_output_ids" ( + "TestAsset_id" TEXT, + output_ids TEXT, + PRIMARY KEY ("TestAsset_id", output_ids), + FOREIGN KEY("TestAsset_id") REFERENCES "TestAsset" (id) +); CREATE TABLE "TestAsset_tags" ( "TestAsset_id" TEXT, tags TEXT, diff --git a/pyproject.toml b/pyproject.toml index 5beaff6..9804307 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "translator_testing_model" -version = "0.5.0" +version = "0.6.0" description = "This is the project description." authors = ["Sierra Moxon ", "Richard Bruskiewich "] license = "MIT" @@ -14,7 +14,7 @@ include = [ ] [tool.poetry.dependencies] -python = ">=3.9,<3.13" +python = ">=3.10,<3.13" linkml-runtime = "^1.7.5" linkml = "^1.7.8" pandas = "^2.1.2" diff --git a/src/data/examples/Bad-TestAsset-001.yaml b/src/data/examples/Bad-TestAsset-001.yaml index 171adc6..d3554e9 100644 --- a/src/data/examples/Bad-TestAsset-001.yaml +++ b/src/data/examples/Bad-TestAsset-001.yaml @@ -8,7 +8,8 @@ name: TestAsset001 description: Fingolimod treats multiple sclerosis input_id: PUBCHEM.COMPOUND:107970 predicate_name: treats -output_id: MONDO:0005301 +output_ids: + - MONDO:0005301 expected_output: Acceptable test_runner_settings: - "inferred" diff --git a/src/data/examples/Good-AcceptanceTestAsset-001.yaml b/src/data/examples/Good-AcceptanceTestAsset-001.yaml index 2a48722..fb30c39 100644 --- a/src/data/examples/Good-AcceptanceTestAsset-001.yaml +++ b/src/data/examples/Good-AcceptanceTestAsset-001.yaml @@ -26,7 +26,8 @@ name: AcceptanceTestAsset001 description: Iron treats Aceruloplasminemia input_id: MONDO:0011426 predicate_name: treats -output_id: DRUGBANK:DB01592 +output_ids: + - DRUGBANK:DB01592 expected_output: NeverShow test_metadata: id: "test:1" diff --git a/src/data/examples/Good-AcceptanceTestCase-001.yaml b/src/data/examples/Good-AcceptanceTestCase-001.yaml index ca6f646..d008ecf 100644 --- a/src/data/examples/Good-AcceptanceTestCase-001.yaml +++ b/src/data/examples/Good-AcceptanceTestCase-001.yaml @@ -22,7 +22,8 @@ test_assets: description: Iron treats Aceruloplasminemia input_id: MONDO:0011426 predicate_name: treats - output_id: DRUGBANK:DB01592 + output_ids: + - DRUGBANK:DB01592 expected_output: NeverShow test_runner_settings: - "inferred" diff --git a/src/data/examples/Good-TestAsset-001.json b/src/data/examples/Good-TestAsset-001.json index f773550..31a3005 100644 --- a/src/data/examples/Good-TestAsset-001.json +++ b/src/data/examples/Good-TestAsset-001.json @@ -4,7 +4,7 @@ "description": "Fingolimod treats multiple sclerosis", "input_id": "PUBCHEM.COMPOUND:107970", "predicate_name": "treats", - "output_id": "MONDO:0005301", + "output_ids": ["MONDO:0005301"], "expected_output": "Acceptable", "test_runner_settings": ["inferred", "test"], "test_metadata": { diff --git a/src/data/examples/Good-TestAsset-001.yaml b/src/data/examples/Good-TestAsset-001.yaml index 31fd44d..2cbd601 100644 --- a/src/data/examples/Good-TestAsset-001.yaml +++ b/src/data/examples/Good-TestAsset-001.yaml @@ -16,7 +16,7 @@ # - input_category # - predicate_id # - predicate_name -# - output_id +# - output_ids # - output_name # - output_category # - association @@ -45,7 +45,8 @@ description: Iron treats Aceruloplasminemia input_id: MONDO:0011426 input_name: Aceruloplasminemia predicate_name: treats -output_id: DRUGBANK:DB01592 +output_ids: + - DRUGBANK:DB01592 output_name: Iron (PUBCHEM) expected_output: NeverShow test_reference: https://github.com/NCATSTranslator/Feedback/issues/506 diff --git a/src/data/examples/Good-TestAsset-002.json b/src/data/examples/Good-TestAsset-002.json new file mode 100644 index 0000000..19b3d38 --- /dev/null +++ b/src/data/examples/Good-TestAsset-002.json @@ -0,0 +1,14 @@ +{ + "id": "example:TestAsset002", + "name": "TestAsset002", + "description": "Sirolimus treats Castleman disease", + "input_id": "MONDO:0015564", + "predicate_name": "treats", + "output_ids": ["PUBCHEM.COMPOUND:5284616", "CHEBI:9168"], + "output_name": "sirolimus", + "expected_output": "TopAnswer", + "test_runner_settings": ["inferred"], + "test_metadata": { + "id": "example:TestAsset002" + } +} diff --git a/src/data/examples/Good-TestCase-001.json b/src/data/examples/Good-TestCase-001.json index d4763fe..62df579 100644 --- a/src/data/examples/Good-TestCase-001.json +++ b/src/data/examples/Good-TestCase-001.json @@ -9,7 +9,7 @@ "description": "Fingolimod treats multiple sclerosis", "input_id": "PUBCHEM.COMPOUND:107970", "predicate_name": "treats", - "output_id": "MONDO:0005301", + "output_ids": ["MONDO:0005301"], "expected_output": "Acceptable", "test_runner_settings": ["inferred", "test"], "test_metadata": { diff --git a/src/data/examples/Good-TestCase-001.yaml b/src/data/examples/Good-TestCase-001.yaml index 2af86e1..191cf5e 100644 --- a/src/data/examples/Good-TestCase-001.yaml +++ b/src/data/examples/Good-TestCase-001.yaml @@ -11,7 +11,6 @@ # TestCase, used to probe a particular test condition. # is_a: TestEntity # slots: -# - test_env # - test_case_type # - query_type # - test_assets @@ -41,7 +40,8 @@ test_assets: name: TestAsset001 input_id: MONDO:0011426 predicate_name: treats - output_id: DRUGBANK:DB01592 + output_ids: + - DRUGBANK:DB01592 expected_output: NeverShow test_runner_settings: - "inferred" diff --git a/src/data/examples/SampleTestAssetList.json b/src/data/examples/SampleTestAssetList.json index 84bb0e0..5240963 100644 --- a/src/data/examples/SampleTestAssetList.json +++ b/src/data/examples/SampleTestAssetList.json @@ -5,7 +5,7 @@ "description": "Fingolimod treats multiple sclerosis", "input_id": "PUBCHEM.COMPOUND:107970", "predicate_name": "treats", - "output_id": "MONDO:0005301", + "output_ids": ["MONDO:0005301"], "expected_output": "Acceptable", "runner_settings": ["inferred", "test"], "test_metadata": { @@ -19,7 +19,7 @@ "description": "Carbamazepine treats Cerebral palsy", "input_id": "PUBCHEM.COMPOUND:2554", "predicate_name": "treats", - "output_id": "MONDO:0006497", + "output_ids": ["MONDO:0006497"], "expected_output": "number_2_Acceptable", "runner_settings": ["inferred", "test"], "test_metadata": { diff --git a/src/translator_testing_model/datamodel/pydanticmodel.py b/src/translator_testing_model/datamodel/pydanticmodel.py index f833af5..93c50dc 100644 --- a/src/translator_testing_model/datamodel/pydanticmodel.py +++ b/src/translator_testing_model/datamodel/pydanticmodel.py @@ -287,7 +287,7 @@ class TestAsset(TestEntity): input_category: Optional[str] = Field(None) predicate_id: Optional[str] = Field(None) predicate_name: Optional[str] = Field(None) - output_id: Optional[str] = Field(None) + output_ids: Optional[List[str]] = Field(default_factory=list, description="""One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.""") output_name: Optional[str] = Field(None) output_category: Optional[str] = Field(None) association: Optional[str] = Field(None, description="""Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement""") @@ -348,7 +348,7 @@ class AcceptanceTestAsset(TestAsset): input_category: Optional[str] = Field(None) predicate_id: Optional[str] = Field(None) predicate_name: Optional[str] = Field(None) - output_id: Optional[str] = Field(None) + output_ids: Optional[List[str]] = Field(default_factory=list, description="""One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.""") output_name: Optional[str] = Field(None) output_category: Optional[str] = Field(None) association: Optional[str] = Field(None, description="""Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement""") @@ -376,7 +376,7 @@ class TestEdgeData(TestAsset): input_category: Optional[str] = Field(None) predicate_id: Optional[str] = Field(None) predicate_name: Optional[str] = Field(None) - output_id: Optional[str] = Field(None) + output_ids: Optional[List[str]] = Field(default_factory=list, description="""One or more CURIEs that identify the expected output. Any one of them may stand for the expected answer, eg the same chemical under its ChEBI and PubChem identifiers when node normalization no longer merges them into one concept.""") output_name: Optional[str] = Field(None) output_category: Optional[str] = Field(None) association: Optional[str] = Field(None, description="""Specific Biolink Model association 'category' which applies to the test asset defined knowledge statement""") @@ -423,7 +423,6 @@ class TestCase(TestEntity): input_category: Optional[str] = Field(None) output_category: Optional[str] = Field(None) components: Optional[List[ComponentEnum]] = Field(default_factory=list, description="""The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX.""") - test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which the associated TestSuite is run.""") id: str = Field(..., description="""A unique identifier for a Test Entity""") name: Optional[str] = Field(None, description="""A human-readable name for a Test Entity""") description: Optional[str] = Field(None, description="""A human-readable description for a Test Entity""") @@ -435,7 +434,6 @@ class PathfinderTestCase(TestEntity): test_assets: List[PathfinderTestAsset] = Field(default_factory=list, description="""List of explicitly enumerated Test Assets. The class attributes of TestAsset would be included in the TestCase versus being referred to by the identifier (curie) of the TestAsset. That is, this would be a list of objects (in JSONSchema serialization) versus a list of strings (where each string is an identifier pointing to another class).""") test_case_objective: Optional[TestObjectiveEnum] = Field(None, description="""Testing objective behind specified set of test particulars (e.g. acceptance pass/fail; benchmark; quantitative; standards compliance; graph navigation integrity)""") components: Optional[List[ComponentEnum]] = Field(default_factory=list, description="""The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX.""") - test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which the associated TestSuite is run.""") id: str = Field(..., description="""A unique identifier for a Test Entity""") name: Optional[str] = Field(None, description="""A human-readable name for a Test Entity""") description: Optional[str] = Field(None, description="""A human-readable description for a Test Entity""") @@ -460,7 +458,6 @@ class AcceptanceTestCase(TestCase): input_category: Optional[str] = Field(None) output_category: Optional[str] = Field(None) components: Optional[List[ComponentEnum]] = Field(default_factory=list, description="""The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX.""") - test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which the associated TestSuite is run.""") id: str = Field(..., description="""A unique identifier for a Test Entity""") name: Optional[str] = Field(None, description="""A human-readable name for a Test Entity""") description: Optional[str] = Field(None, description="""A human-readable description for a Test Entity""") @@ -485,7 +482,6 @@ class QuantitativeTestCase(TestCase): input_category: Optional[str] = Field(None) output_category: Optional[str] = Field(None) components: Optional[List[ComponentEnum]] = Field(default_factory=list, description="""The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX.""") - test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which the associated TestSuite is run.""") id: str = Field(..., description="""A unique identifier for a Test Entity""") name: Optional[str] = Field(None, description="""A human-readable name for a Test Entity""") description: Optional[str] = Field(None, description="""A human-readable description for a Test Entity""") @@ -512,7 +508,6 @@ class PerformanceTestCase(TestCase): input_category: Optional[str] = Field(None) output_category: Optional[str] = Field(None) components: Optional[List[ComponentEnum]] = Field(default_factory=list, description="""The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX.""") - test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which the associated TestSuite is run.""") id: str = Field(..., description="""A unique identifier for a Test Entity""") name: Optional[str] = Field(None, description="""A human-readable name for a Test Entity""") description: Optional[str] = Field(None, description="""A human-readable description for a Test Entity""") @@ -636,7 +631,7 @@ class TestRunSession(TestEntity): Single run of a TestRunner in a given environment, with a specified set of test_entities (generally, one or more instances of TestSuite). """ components: Optional[List[ComponentEnum]] = Field(default_factory=list, description="""The component that this test case is intended to run against. Most often this is the ARS for acceptance tests, but for the Benchmarks repo integration, this can also be individual components of the system like Aragorn, or ARAX.""") - test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which the associated TestSuite is run.""") + test_env: Optional[TestEnvEnum] = Field(None, description="""Deployment environment within which a TestRunSession ran. Test cases don't carry one: the same suite runs in every environment, and the TestHarness is told which one to test.""") test_runner_name: Optional[str] = Field(None, description="""Global system name of a TestRunner.""") test_run_parameters: Optional[List[TestEntityParameter]] = Field(default_factory=list, description="""Different TestRunners could expect additional global test configuration parameters, like the applicable TRAPI version (\"trapi_version\") or Biolink Model versions (\"biolink_version\").""") test_entities: Optional[Dict[str, TestEntity]] = Field(default_factory=dict, description="""Different TestRunners could expect specific kinds of TestEntity as an input. These 'test_entities' are one or more instances of TestAsset, TestCase or (preferably?) TestSuite.""") diff --git a/src/translator_testing_model/datamodel/translator_testing_model.py b/src/translator_testing_model/datamodel/translator_testing_model.py index 9ea99ac..9cba5ee 100644 --- a/src/translator_testing_model/datamodel/translator_testing_model.py +++ b/src/translator_testing_model/datamodel/translator_testing_model.py @@ -1,5 +1,5 @@ # Auto generated from translator_testing_model.yaml by pythongen.py version: 0.0.1 -# Generation date: 2025-10-22T15:23:25 +# Generation date: 2026-10-29T16:38:20 # Schema: Translator-Testing-Model # # id: https://w3id.org/TranslatorSRI/TranslatorTestingModel @@ -344,7 +344,7 @@ class TestAsset(TestEntity): input_category: Optional[Union[str, ConceptCategory]] = None predicate_id: Optional[Union[str, PredicateType]] = None predicate_name: Optional[str] = None - output_id: Optional[Union[str, URIorCURIE]] = None + output_ids: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list() output_name: Optional[str] = None output_category: Optional[Union[str, ConceptCategory]] = None association: Optional[Union[str, AssociationCategory]] = None @@ -380,8 +380,9 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self.predicate_name is not None and not isinstance(self.predicate_name, str): self.predicate_name = str(self.predicate_name) - if self.output_id is not None and not isinstance(self.output_id, URIorCURIE): - self.output_id = URIorCURIE(self.output_id) + if not isinstance(self.output_ids, list): + self.output_ids = [self.output_ids] if self.output_ids is not None else [] + self.output_ids = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.output_ids] if self.output_name is not None and not isinstance(self.output_name, str): self.output_name = str(self.output_name) @@ -644,7 +645,6 @@ class TestCase(TestEntity): input_category: Optional[Union[str, ConceptCategory]] = None output_category: Optional[Union[str, ConceptCategory]] = None components: Optional[Union[Union[str, "ComponentEnum"], List[Union[str, "ComponentEnum"]]]] = empty_list() - test_env: Optional[Union[str, "TestEnvEnum"]] = None tags: Optional[Union[str, List[str]]] = empty_list() def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): @@ -696,9 +696,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.components = [self.components] if self.components is not None else [] self.components = [v if isinstance(v, ComponentEnum) else ComponentEnum(v) for v in self.components] - if self.test_env is not None and not isinstance(self.test_env, TestEnvEnum): - self.test_env = TestEnvEnum(self.test_env) - if not isinstance(self.tags, list): self.tags = [self.tags] if self.tags is not None else [] self.tags = [v if isinstance(v, str) else str(v) for v in self.tags] @@ -719,7 +716,6 @@ class PathfinderTestCase(TestEntity): test_assets: Union[Dict[Union[str, PathfinderTestAssetId], Union[dict, PathfinderTestAsset]], List[Union[dict, PathfinderTestAsset]]] = empty_dict() test_case_objective: Optional[Union[str, "TestObjectiveEnum"]] = None components: Optional[Union[Union[str, "ComponentEnum"], List[Union[str, "ComponentEnum"]]]] = empty_list() - test_env: Optional[Union[str, "TestEnvEnum"]] = None def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): if self._is_empty(self.id): @@ -738,9 +734,6 @@ def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]): self.components = [self.components] if self.components is not None else [] self.components = [v if isinstance(v, ComponentEnum) else ComponentEnum(v) for v in self.components] - if self.test_env is not None and not isinstance(self.test_env, TestEnvEnum): - self.test_env = TestEnvEnum(self.test_env) - super().__post_init__(**kwargs) @@ -1652,8 +1645,8 @@ class slots: slots.biolink_qualified_predicate = Slot(uri=TTM.biolink_qualified_predicate, name="biolink_qualified_predicate", curie=TTM.curie('biolink_qualified_predicate'), model_uri=TTM.biolink_qualified_predicate, domain=None, range=Optional[Union[str, URIorCURIE]]) -slots.output_id = Slot(uri=TTM.output_id, name="output_id", curie=TTM.curie('output_id'), - model_uri=TTM.output_id, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.output_ids = Slot(uri=TTM.output_ids, name="output_ids", curie=TTM.curie('output_ids'), + model_uri=TTM.output_ids, domain=None, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]]) slots.output_name = Slot(uri=TTM.output_name, name="output_name", curie=TTM.curie('output_name'), model_uri=TTM.output_name, domain=None, range=Optional[str]) diff --git a/src/translator_testing_model/schema/translator_testing_model.yaml b/src/translator_testing_model/schema/translator_testing_model.yaml index 1e8f1e2..ef525e3 100644 --- a/src/translator_testing_model/schema/translator_testing_model.yaml +++ b/src/translator_testing_model/schema/translator_testing_model.yaml @@ -125,7 +125,7 @@ classes: - input_category - predicate_id - predicate_name - - output_id + - output_ids - output_name - output_category - association @@ -231,7 +231,6 @@ classes: - input_category - output_category - components - - test_env slot_usage: test_assets: aliases: ["Block List"] @@ -250,7 +249,6 @@ classes: - test_assets - test_case_objective - components - - test_env slot_usage: test_assets: range: PathfinderTestAsset @@ -596,9 +594,15 @@ slots: The qualified_predicate in Biolink model corresponding to the shorthand predicate name used in the test asset. range: uriorcurie - output_id: + output_ids: aliases: ["OutputID", "ObjectID"] + description: >- + One or more CURIEs that identify the expected output. Any one of them + may stand for the expected answer, eg the same chemical under its ChEBI + and PubChem identifiers when node normalization no longer merges them + into one concept. range: uriorcurie + multivalued: true output_name: aliases: ["OutputName", "ObjectName"] @@ -737,7 +741,9 @@ slots: test_env: description: >- - Deployment environment within which the associated TestSuite is run. + Deployment environment within which a TestRunSession ran. Test cases + don't carry one: the same suite runs in every environment, and the + TestHarness is told which one to test. range: TestEnvEnum query_type: diff --git a/src/translator_testing_model/scripts/generate_suite_for_demo.py b/src/translator_testing_model/scripts/generate_suite_for_demo.py index f041f5d..d483038 100644 --- a/src/translator_testing_model/scripts/generate_suite_for_demo.py +++ b/src/translator_testing_model/scripts/generate_suite_for_demo.py @@ -132,7 +132,7 @@ def create_test_asset(row, toolkit): input_id=row.get("InputID").strip(), predicate_name=converted_predicate, predicate_id=f"biolink:{converted_predicate}", - output_id=row.get("OutputID").strip(), + output_ids=[row.get("OutputID").strip()], output_name=row.get("OutputName").strip(), output_category=output_category, expected_output=expected_output.strip(), @@ -180,7 +180,6 @@ def create_test_cases_from_test_assets(test_assets, test_case_model): test_case = test_case_model(id=test_case_id, name="what " + key[1] + " " + key[0], description=descriptions, - test_env="ci", components=["ars"], test_case_objective="AcceptanceTest", test_assets=assets, @@ -285,7 +284,6 @@ def create_benchmark_test_case(subset: bool) -> TestCase or list[TestCase]: name=k, description=k, test_assets=[test_asset], - test_env="ci", components=["ars"], test_case_objective="QuantitativeTest", test_runner_settings=["limit_queries"] diff --git a/tests/test_output_ids.py b/tests/test_output_ids.py new file mode 100644 index 0000000..c2bfe8e --- /dev/null +++ b/tests/test_output_ids.py @@ -0,0 +1,34 @@ +"""Test that a TestAsset can name its expected output by several CURIEs.""" +import unittest + +from pydantic import ValidationError + +from src.translator_testing_model.datamodel.pydanticmodel import TestAsset + + +class TestOutputIds(unittest.TestCase): + """Testing the multivalued output_ids slot on the Pydantic model.""" + + def test_several_output_ids(self): + """Every CURIE given for the expected output is kept, in order.""" + asset = TestAsset( + id="example:TestAsset002", + output_ids=["PUBCHEM.COMPOUND:5284616", "CHEBI:9168"], + ) + assert asset.output_ids == ["PUBCHEM.COMPOUND:5284616", "CHEBI:9168"] + + def test_output_ids_default_empty(self): + """An asset with no expected output, eg a performance asset, has none.""" + assert TestAsset(id="example:TestAsset003").output_ids == [] + + def test_bare_string_rejected(self): + """A single CURIE must still be given as a list.""" + with self.assertRaises(ValidationError): + TestAsset(id="example:TestAsset004", output_ids="CHEBI:9168") + + def test_old_output_id_rejected(self): + """Data still using the old single-valued output_id fails loudly.""" + with self.assertRaises(ValidationError): + TestAsset.model_validate( + {"id": "example:TestAsset005", "output_id": "CHEBI:9168"} + ) diff --git a/tests/test_test_env.py b/tests/test_test_env.py new file mode 100644 index 0000000..061d7d9 --- /dev/null +++ b/tests/test_test_env.py @@ -0,0 +1,27 @@ +"""Test that test cases no longer carry an environment.""" +import unittest + +from pydantic import ValidationError + +from src.translator_testing_model.datamodel.pydanticmodel import ( + PathfinderTestCase, + TestCase, + TestRunSession, +) + + +class TestNoTestEnv(unittest.TestCase): + """The same suite runs in every environment; the TestHarness picks one.""" + + def test_test_case_rejects_test_env(self): + with self.assertRaises(ValidationError): + TestCase.model_validate({"id": "TestCase_1", "test_env": "ci"}) + + def test_pathfinder_test_case_rejects_test_env(self): + with self.assertRaises(ValidationError): + PathfinderTestCase.model_validate({"id": "TestCase_1", "test_env": "ci"}) + + def test_test_run_session_keeps_test_env(self): + """A record of a run still says where it ran.""" + session = TestRunSession(id="session_1", test_env="prod") + assert session.test_env == "prod"