diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index bbce027bf2..233f2f4404 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -41,7 +41,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest, windows-latest] - python-version: ["3.10", "3.11", "3.12", "3.13"] + python-version: ["3.10", "3.11", "3.12", "3.13", "3.14"] # Test on Windows with only the oldest and newest Python versions exclude: - os: windows-latest diff --git a/.gitignore b/.gitignore index 80da8ca42c..ebec744869 100644 --- a/.gitignore +++ b/.gitignore @@ -126,4 +126,5 @@ examples/PersonSchema/rust/Cargo.lock # temporary ignore monorepo-cleanup.sh /tests/linkml/test_generators/__snapshots__/figs/class_event_local.svg +/packages/linkml_runtime/linkml-model-github .worktrees/ diff --git a/docs/get-involved/Community-Meetings.md b/docs/get-involved/Community-Meetings.md index 7880cc711c..2340f98a99 100644 --- a/docs/get-involved/Community-Meetings.md +++ b/docs/get-involved/Community-Meetings.md @@ -28,7 +28,7 @@ Join the LinkML community for regular sessions featuring presentations on LinkML | Date | Presenter 1 | Topic 1 | Presenter 2 | Topic 2 | | :---: | :---: | :---: | :----: | :---: | | June 18, 2026 | Anh Nguyet Vu | Sage/Synapse's adoption of LinkML https://nf-osi.github.io/nf-metadata-dictionary/ | Corey Levinson | http://schema.oaedata.org/ | -| May 21, 2026 | Inge Vejsbjerg | [LinkML for AI Governance at IBM](https://ibm.github.io/ai-atlas-nexus/) |Joshua Send|TypeDB and TypeQL| | +| May 21, 2026 | Inge Vejsbjerg | [LinkML for AI Governance at IBM](https://ibm.github.io/ai-atlas-nexus/) |Joshua Send|Why TypeDB is the Natural Backend for LinkML| | | [April 16, 2026](https://docs.google.com/presentation/d/1d2AjM9TBESO6njMXBB-lw5A6WDIFMBb14ZhCRKN2GiY/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | Daniel Kapitan| [Introducing PLUGIN and why we fell in love with LinkML](https://docs.google.com/presentation/d/1KqwKnq-f4JsSwHVRtCXZrwqBI7JIP1aqbUqlO7iEjd0/edit?slide=id.p1#slide=id.p1)| Community Discussion Topics| RareLink/REDCap + LinkML with Adam Graefe | | | [March 19, 2026](https://docs.google.com/presentation/d/13gQtrlTJcF3V8XzW4ruva9_D1tzyp8ZzDLATp2TuuMY/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50)| Damien Goutte-Gattat | [linkml-java](https://github.com/gouttegd/linkml-java): a LinkML runtime library for the Java language ([Slides](https://drive.google.com/file/d/1-hXJo9FFmIvpERrKNJjb_-tTO_6354cM/view?usp=sharing))| Chris Mungall| Validating dynamic value sets with [linkml-term-validator](https://github.com/linkml/linkml-term-validator) ([Slides](https://docs.google.com/presentation/d/1lhdDImxBQDaj8yFgpRYF_pnCTNDVn3Ilkb_pHfoR7Po/edit?slide=id.p#slide=id.p))| | [February 19, 2026](https://docs.google.com/presentation/d/1Wa_vX8JhLeA_5b7dsRDDoWAA7uTG9fsiH0nMYjxjSz0/edit?slide=id.g36e69bd970c_1_50#slide=id.g36e69bd970c_1_50) | David Linke | [The new LinkML project template based on copier and why we built it](https://zenodo.org/records/18704589)
Repo: [linkml-project-copier](https://github.com/linkml/linkml-project-copier) | Nico Matentzoglu | [The LinkML Community Governance & Community Discussion](https://drive.google.com/file/d/1s2Fslc2pN6ig2-TDkdtzjtBKa5z1oFqC/view?usp=sharing) | diff --git a/examples/tutorial/tutorial01/data.ttl b/examples/tutorial/tutorial01/data.ttl index 5c8468d1fd..7cf6fd3b9b 100644 --- a/examples/tutorial/tutorial01/data.ttl +++ b/examples/tutorial/tutorial01/data.ttl @@ -1,7 +1,38 @@ @prefix personinfo: . - -[] a personinfo:Person ; - personinfo:age "32" ; - personinfo:full_name "Clark Kent" ; - personinfo:id "ORCID:1234" ; - personinfo:phone "555-555-5555" . +@prefix rdf: . +@prefix wgs: . +@prefix geo: . +@prefix rdfs: . +@prefix brick: . +@prefix skos: . +@prefix xml: . +@prefix xsd: . +@prefix qb: . +@prefix dc: . +@prefix owl: . +@prefix doap: . +@prefix prof: . +@prefix dcmitype: . +@prefix odrl: . +@prefix time: . +@prefix vann: . +@prefix sh: . +@prefix csvw: . +@prefix shex: . +@prefix dcat: . +@prefix sosa: . +@prefix foaf: . +@prefix prov: . +@prefix org: . +@prefix ssn: . +@prefix dcterms: . +@prefix dcam: . +@prefix void: . +@prefix linkml: . +@prefix schema: . +@prefix schema1: . +_:c14n0 a personinfo:Person ; + personinfo:age "32" ; + personinfo:full_name "Clark Kent" ; + personinfo:id "ORCID:1234" ; + personinfo:phone "555-555-5555" . diff --git a/examples/tutorial/tutorial04/data-semantic.ttl b/examples/tutorial/tutorial04/data-semantic.ttl index f5fbd33412..cf1efa1827 100644 --- a/examples/tutorial/tutorial04/data-semantic.ttl +++ b/examples/tutorial/tutorial04/data-semantic.ttl @@ -1,17 +1,47 @@ -@prefix ORCID: . +@prefix oboInOwl: . @prefix personinfo: . -@prefix schema1: . +@prefix rdf: . +@prefix wgs: . +@prefix faldo: . +@prefix brick: . +@prefix geo: . +@prefix rdfs: . +@prefix skos: . +@prefix xml: . +@prefix qb: . @prefix xsd: . - -ORCID:1234 a schema1:Person ; - schema1:name "Clark Kent" ; - schema1:telephone "555-555-5555" ; - personinfo:age 33 . - -ORCID:4567 a schema1:Person ; - schema1:name "Lois Lane" ; - personinfo:age 34 . - -[] a personinfo:Container ; - personinfo:persons ORCID:1234, - ORCID:4567 . +@prefix dc: . +@prefix owl: . +@prefix doap: . +@prefix prof: . +@prefix dcmitype: . +@prefix odrl: . +@prefix time: . +@prefix sh: . +@prefix vann: . +@prefix shex: . +@prefix sosa: . +@prefix dcat: . +@prefix foaf: . +@prefix csvw: . +@prefix prov: . +@prefix dcterms: . +@prefix ssn: . +@prefix org: . +@prefix linkml: . +@prefix oa: . +@prefix dcam: . +@prefix void: . +@prefix idot: . +@prefix schema: . +@prefix schema1: . +@prefix ORCID: . +ORCID:1234 schema1:name "Clark Kent" ; + schema1:telephone "555-555-5555" ; + a schema1:Person ; + personinfo:age 33 . +ORCID:4567 schema1:name "Lois Lane" ; + a schema1:Person ; + personinfo:age 34 . +_:c14n0 a personinfo:Container ; + personinfo:persons ORCID:1234 , ORCID:4567 . diff --git a/examples/tutorial/tutorial04/data.ttl b/examples/tutorial/tutorial04/data.ttl index a18726325e..ecc381e3a7 100644 --- a/examples/tutorial/tutorial04/data.ttl +++ b/examples/tutorial/tutorial04/data.ttl @@ -1,16 +1,47 @@ -@prefix ORCID: . +@prefix oboInOwl: . @prefix personinfo: . +@prefix rdf: . +@prefix wgs: . +@prefix faldo: . +@prefix brick: . +@prefix geo: . +@prefix rdfs: . +@prefix skos: . +@prefix xml: . +@prefix qb: . @prefix xsd: . - +@prefix dc: . +@prefix owl: . +@prefix doap: . +@prefix prof: . +@prefix dcmitype: . +@prefix odrl: . +@prefix time: . +@prefix sh: . +@prefix vann: . +@prefix shex: . +@prefix sosa: . +@prefix dcat: . +@prefix foaf: . +@prefix csvw: . +@prefix prov: . +@prefix dcterms: . +@prefix ssn: . +@prefix org: . +@prefix linkml: . +@prefix oa: . +@prefix dcam: . +@prefix void: . +@prefix idot: . +@prefix schema: . +@prefix schema1: . +@prefix ORCID: . ORCID:1234 a personinfo:Person ; - personinfo:age 33 ; - personinfo:full_name "Clark Kent" ; - personinfo:phone "555-555-5555" . - + personinfo:age 33 ; + personinfo:full_name "Clark Kent" ; + personinfo:phone "555-555-5555" . ORCID:4567 a personinfo:Person ; - personinfo:age 34 ; - personinfo:full_name "Lois Lane" . - -[] a personinfo:Container ; - personinfo:persons ORCID:1234, - ORCID:4567 . + personinfo:age 34 ; + personinfo:full_name "Lois Lane" . +_:c14n0 a personinfo:Container ; + personinfo:persons ORCID:1234 , ORCID:4567 . diff --git a/examples/tutorial/tutorial04/personinfo-semantic.shacl.ttl b/examples/tutorial/tutorial04/personinfo-semantic.shacl.ttl index ee2237b062..af0cf2eb5e 100644 --- a/examples/tutorial/tutorial04/personinfo-semantic.shacl.ttl +++ b/examples/tutorial/tutorial04/personinfo-semantic.shacl.ttl @@ -1,39 +1,81 @@ @prefix personinfo: . @prefix rdf: . -@prefix schema1: . -@prefix sh: . +@prefix wgs: . +@prefix brick: . +@prefix geo: . +@prefix rdfs: . +@prefix skos: . +@prefix xml: . +@prefix qb: . @prefix xsd: . - -personinfo:Container a sh:NodeShape ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:class schema1:Person ; - sh:nodeKind sh:IRI ; - sh:order 0 ; - sh:path personinfo:persons ] ; - sh:targetClass personinfo:Container . - +@prefix dc: . +@prefix owl: . +@prefix doap: . +@prefix prof: . +@prefix dcmitype: . +@prefix odrl: . +@prefix time: . +@prefix vann: . +@prefix sh: . +@prefix dcat: . +@prefix csvw: . +@prefix sosa: . +@prefix foaf: . +@prefix prov: . +@prefix org: . +@prefix ssn: . +@prefix dcterms: . +@prefix linkml: . +@prefix void: . +@prefix dcam: . +@prefix schema: . +@prefix schema1: . +@prefix ORCID: . schema1:Person a sh:NodeShape ; - sh:closed true ; - sh:ignoredProperties ( rdf:type ) ; - sh:property [ sh:maxCount 1 ; - sh:maxInclusive 200 ; - sh:minInclusive 0 ; - sh:order 4 ; - sh:path personinfo:age ], - [ sh:description "name of the person" ; - sh:maxCount 1 ; - sh:minCount 1 ; - sh:order 1 ; - sh:path schema1:name ], - [ sh:maxCount 1 ; - sh:order 0 ; - sh:path personinfo:id ], - [ sh:description "other names for the person" ; - sh:order 2 ; - sh:path personinfo:aliases ], - [ sh:maxCount 1 ; - sh:order 3 ; - sh:path schema1:telephone ; - sh:pattern "^[\\d\\(\\)\\-]+$" ] ; - sh:targetClass schema1:Person . + sh:closed true ; + sh:ignoredProperties _:c14n7 ; + sh:property _:c14n0 , _:c14n2 , _:c14n3 , _:c14n4 , _:c14n6 ; + sh:targetClass schema1:Person . +personinfo:Container a sh:NodeShape ; + sh:closed true ; + sh:ignoredProperties _:c14n1 ; + sh:property _:c14n5 ; + sh:targetClass personinfo:Container . +_:c14n0 sh:datatype xsd:string ; + sh:description "name of the person" ; + sh:maxCount 1 ; + sh:minCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 1 ; + sh:path schema1:name . +_:c14n1 rdf:first rdf:type ; + rdf:rest rdf:nil . +_:c14n2 sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 0 ; + sh:path personinfo:id . +_:c14n3 sh:datatype xsd:integer ; + sh:maxCount 1 ; + sh:maxInclusive 200 ; + sh:minInclusive 0 ; + sh:nodeKind sh:Literal ; + sh:order 4 ; + sh:path personinfo:age . +_:c14n4 sh:datatype xsd:string ; + sh:maxCount 1 ; + sh:nodeKind sh:Literal ; + sh:order 3 ; + sh:path schema1:telephone ; + sh:pattern "^[\\d\\(\\)\\-]+$" . +_:c14n5 sh:class schema1:Person ; + sh:nodeKind sh:IRI ; + sh:order 0 ; + sh:path personinfo:persons . +_:c14n6 sh:datatype xsd:string ; + sh:description "other names for the person" ; + sh:nodeKind sh:Literal ; + sh:order 2 ; + sh:path personinfo:aliases . +_:c14n7 rdf:first rdf:type ; + rdf:rest rdf:nil . diff --git a/notebooks/DistributedModels.ipynb b/notebooks/DistributedModels.ipynb index 7c34aac54f..404ae17249 100644 --- a/notebooks/DistributedModels.ipynb +++ b/notebooks/DistributedModels.ipynb @@ -20,21 +20,61 @@ "cell_type": "code", "execution_count": 1, "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:23.620771Z", + "iopub.status.busy": "2026-05-08T15:54:23.620614Z", + "iopub.status.idle": "2026-05-08T15:54:26.047355Z", + "shell.execute_reply": "2026-05-08T15:54:26.046362Z" + }, "pycharm": { "is_executing": false, "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m\u001b[31merror\u001b[39m\u001b[0m: The build backend returned an error\r\n", + " \u001b[1m\u001b[31mCaused by\u001b[39m\u001b[0m: Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1)\r\n", + "\r\n", + "\u001b[31m[stderr]\u001b[39m\r\n", + "error: Multiple top-level packages discovered in a flat-layout: ['images', 'packages', 'notebooks'].\r\n", + "\r\n", + "To avoid accidental inclusion of unwanted files or directories,\r\n", + "setuptools will not proceed with this build.\r\n", + "\r\n", + "If you are trying to create a single distribution with multiple packages\r\n", + "on purpose, you should not rely on automatic discovery.\r\n", + "Instead, consider the following options:\r\n", + "\r\n", + "1. set up custom discovery (`find` directive with `include` or `exclude`)\r\n", + "2. use a `src-layout`\r\n", + "3. explicitly set `py_modules` or `packages` with a list of names\r\n", + "\r\n", + "To find more information, look for \"package discovery\" on setuptools docs.\r\n", + "\r\n", + "\u001b[36m\u001b[1mhint\u001b[0m\u001b[39m\u001b[1m:\u001b[0m This usually indicates a problem with the package or the build environment.\r\n" + ] + } + ], "source": [ - "!pip install -q --disable-pip-version-check yamlmagic\n", - "!pip install -q --disable-pip-version-check .." + "!uv pip install -q --disable-pip-version-check yamlmagic\n", + "!uv pip install -q --disable-pip-version-check .." ] }, { "cell_type": "code", "execution_count": 2, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:26.049948Z", + "iopub.status.busy": "2026-05-08T15:54:26.049754Z", + "iopub.status.idle": "2026-05-08T15:54:26.129612Z", + "shell.execute_reply": "2026-05-08T15:54:26.128571Z" + } + }, "outputs": [], "source": [ "%load_ext yamlmagic" @@ -44,6 +84,12 @@ "cell_type": "code", "execution_count": 3, "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:26.131549Z", + "iopub.status.busy": "2026-05-08T15:54:26.131388Z", + "iopub.status.idle": "2026-05-08T15:54:26.139972Z", + "shell.execute_reply": "2026-05-08T15:54:26.138777Z" + }, "pycharm": { "is_executing": false, "name": "#%%\n" @@ -163,14 +209,29 @@ { "cell_type": "code", "execution_count": 4, - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:26.141502Z", + "iopub.status.busy": "2026-05-08T15:54:26.141371Z", + "iopub.status.idle": "2026-05-08T15:54:41.341165Z", + "shell.execute_reply": "2026-05-08T15:54:41.340088Z" + } + }, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/c/Users/Yuyao/PycharmProjects/PythonProject/linkml/.venv/lib/python3.13/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.5.0) or chardet (7.4.3)/charset_normalizer (3.4.4) doesn't match a supported version!\n", + " warnings.warn(\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ "# Auto generated from None by pythongen.py version: 0.0.1\n", - "# Generation date: 2025-01-09T17:06:28\n", + "# Generation date: 2026-05-08T16:54:33\n", "# Schema: dist1\n", "#\n", "# id: http://example.org/examples/distributeExample\n", @@ -204,7 +265,6 @@ " PvFormulaOptions\n", ")\n", "from linkml_runtime.utils.curienamespace import CurieNamespace\n", - "from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs\n", "from linkml_runtime.utils.enumerations import EnumDefinitionImpl\n", "from linkml_runtime.utils.formatutils import (\n", " camelcase,\n", @@ -234,9 +294,6 @@ "metamodel_version = \"1.7.0\"\n", "version = \"0.0.1\"\n", "\n", - "# Overwrite dataclasses _init_fn to add **kwargs in __init__\n", - "dataclasses._init_fn = dataclasses_init_fn_with_kwargs\n", - "\n", "# Namespaces\n", "AGRKB = CurieNamespace('AGRKB', 'https://www.alliancegenome.org/')\n", "APO = CurieNamespace('APO', 'http://purl.obolibrary.org/obo/APO_')\n", @@ -261,6 +318,7 @@ "CHEMBL_TARGET = CurieNamespace('CHEMBL_TARGET', 'http://identifiers.org/chembl.target/')\n", "CIO = CurieNamespace('CIO', 'http://purl.obolibrary.org/obo/CIO_')\n", "CL = CurieNamespace('CL', 'http://purl.obolibrary.org/obo/CL_')\n", + "CLINICALTRIALS = CurieNamespace('CLINICALTRIALS', 'http://identifiers.org/clinicaltrials/')\n", "CLINVAR = CurieNamespace('CLINVAR', 'http://identifiers.org/clinvar')\n", "CLO = CurieNamespace('CLO', 'http://purl.obolibrary.org/obo/CLO_')\n", "COG = CurieNamespace('COG', 'https://www.ncbi.nlm.nih.gov/research/cog-project/')\n", @@ -314,7 +372,6 @@ "HSAPDV = CurieNamespace('HsapDv', 'http://purl.obolibrary.org/obo/HsapDv_')\n", "IAO = CurieNamespace('IAO', 'http://purl.obolibrary.org/obo/IAO_')\n", "ICD10 = CurieNamespace('ICD10', 'https://icd.who.int/browse10/2016/en#/')\n", - "ICD11 = CurieNamespace('ICD11', 'http://id.who.int/icd/entity/')\n", "ICD9 = CurieNamespace('ICD9', 'http://translator.ncats.nih.gov/ICD9_')\n", "IDO = CurieNamespace('IDO', 'http://purl.obolibrary.org/obo/IDO_')\n", "INCHI = CurieNamespace('INCHI', 'http://identifiers.org/inchi/')\n", @@ -343,6 +400,7 @@ "MGI = CurieNamespace('MGI', 'http://identifiers.org/mgi/')\n", "MI = CurieNamespace('MI', 'http://purl.obolibrary.org/obo/MI_')\n", "MIR = CurieNamespace('MIR', 'http://identifiers.org/mir/')\n", + "MOD = CurieNamespace('MOD', 'http://purl.obolibrary.org/obo/MOD_')\n", "MONDO = CurieNamespace('MONDO', 'http://purl.obolibrary.org/obo/MONDO_')\n", "MP = CurieNamespace('MP', 'http://purl.obolibrary.org/obo/MP_')\n", "MPATH = CurieNamespace('MPATH', 'http://purl.obolibrary.org/obo/MPATH_')\n", @@ -426,6 +484,7 @@ "UMLS = CurieNamespace('UMLS', 'http://identifiers.org/umls/')\n", "UMLSSG = CurieNamespace('UMLSSG', 'https://lhncbc.nlm.nih.gov/semanticnetwork/download/sg_archive/SemGroups-v04.txt')\n", "UNII = CurieNamespace('UNII', 'http://identifiers.org/unii/')\n", + "UNIMOD = CurieNamespace('UNIMOD', 'http://identifiers.org/unimod/')\n", "UNIPROT_ISOFORM = CurieNamespace('UNIPROT_ISOFORM', 'http://purl.uniprot.org/isoforms/')\n", "UO = CurieNamespace('UO', 'http://purl.obolibrary.org/obo/UO_')\n", "UO_PROPERTY = CurieNamespace('UO-PROPERTY', 'http://purl.obolibrary.org/obo/uo#')\n", @@ -467,6 +526,7 @@ "GFF3 = CurieNamespace('gff3', 'https://github.com/The-Sequence-Ontology/Specifications/blob/master/gff3.md#')\n", "GPI = CurieNamespace('gpi', 'https://github.com/geneontology/go-annotation/blob/master/specs/gpad-gpi-2-0.md#')\n", "GTPO = CurieNamespace('gtpo', 'https://rdf.guidetopharmacology.org/ns/gtpo#')\n", + "ICD11 = CurieNamespace('icd11', 'http://id.who.int/icd/entity/')\n", "ICD11_FOUNDATION = CurieNamespace('icd11_foundation', 'http://id.who.int/icd/entity/')\n", "INTERPRO = CurieNamespace('interpro', 'https://www.ebi.ac.uk/interpro/entry/')\n", "ISBN = CurieNamespace('isbn', 'https://www.isbn-international.org/identifier/')\n", @@ -475,6 +535,7 @@ "LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/')\n", "MEDGEN = CurieNamespace('medgen', 'https://www.ncbi.nlm.nih.gov/medgen/')\n", "METACYC_REACTION = CurieNamespace('metacyc_reaction', 'http://identifiers.org/metacyc.reaction:')\n", + "MIRBASE = CurieNamespace('mirbase', 'http://identifiers.org/mirbase')\n", "NCATS_BIOPLANET = CurieNamespace('ncats_bioplanet', 'https://tripod.nih.gov/bioplanet/detail.jsp?pid=')\n", "NCATS_DRUG = CurieNamespace('ncats_drug', 'https://drugs.ncats.io/drug/')\n", "OBOINOWL = CurieNamespace('oboInOwl', 'http://www.geneontology.org/formats/oboInOwl#')\n", @@ -486,7 +547,6 @@ "QUD = CurieNamespace('qud', 'http://qudt.org/1.1/schema/qudt#')\n", "RDF = CurieNamespace('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns#')\n", "RDFS = CurieNamespace('rdfs', 'http://www.w3.org/2000/01/rdf-schema#')\n", - "REGULATES = CurieNamespace('regulates', 'http://example.org/UNKNOWN/regulates/')\n", "SCHEMA = CurieNamespace('schema', 'http://schema.org/')\n", "SKOS = CurieNamespace('skos', 'http://www.w3.org/2004/02/skos/core#')\n", "WGS = CurieNamespace('wgs', 'http://www.w3.org/2003/01/geo/wgs84_pos')\n", @@ -496,7 +556,7 @@ "\n", "# Types\n", "class ChemicalFormulaValue(str):\n", - " \"\"\" A chemical formula \"\"\"\n", + " \"\"\" A type of string representing a chemical formula \"\"\"\n", " type_class_uri = XSD[\"string\"]\n", " type_class_curie = \"xsd:string\"\n", " type_name = \"chemical formula value\"\n", @@ -512,7 +572,7 @@ "\n", "\n", "class IriType(Uriorcurie):\n", - " \"\"\" An IRI \"\"\"\n", + " \"\"\" An IRI. \"\"\"\n", " type_class_uri = XSD[\"string\"]\n", " type_class_curie = \"xsd:string\"\n", " type_name = \"iri type\"\n", @@ -520,23 +580,15 @@ "\n", "\n", "class LabelType(String):\n", - " \"\"\" A string that provides a human-readable name for an entity \"\"\"\n", + " \"\"\" A type of string that provides a human-readable name for an entity. \"\"\"\n", " type_class_uri = XSD[\"string\"]\n", " type_class_curie = \"xsd:string\"\n", " type_name = \"label type\"\n", " type_model_uri = DIST.LabelType\n", "\n", "\n", - "class PredicateType(Uriorcurie):\n", - " \"\"\" A CURIE from the biolink related_to hierarchy. For example, biolink:related_to, biolink:causes, biolink:treats. \"\"\"\n", - " type_class_uri = XSD[\"string\"]\n", - " type_class_curie = \"xsd:string\"\n", - " type_name = \"predicate type\"\n", - " type_model_uri = DIST.PredicateType\n", - "\n", - "\n", "class NarrativeText(String):\n", - " \"\"\" A string that provides a human-readable description of something \"\"\"\n", + " \"\"\" A type of string that provides a human-readable description of something. \"\"\"\n", " type_class_uri = XSD[\"string\"]\n", " type_class_curie = \"xsd:string\"\n", " type_name = \"narrative text\"\n", @@ -544,6 +596,7 @@ "\n", "\n", "class SymbolType(String):\n", + " \"\"\" A type of string that is typically short, used as a human-readable label or symbol for an entity, such as an official gene symbol (e.g., \"BRCA1\") or a chemical symbol. \"\"\"\n", " type_class_uri = XSD[\"string\"]\n", " type_class_curie = \"xsd:string\"\n", " type_name = \"symbol type\"\n", @@ -551,6 +604,7 @@ "\n", "\n", "class FrequencyValue(String):\n", + " \"\"\" A quantity expressing the number of occurrences of a repeating event per unit of time (UO:0000105). Typically used for rates such as incidence or event frequency associated with a phenomenon. \"\"\"\n", " type_class_uri = UO[\"0000105\"]\n", " type_class_curie = \"UO:0000105\"\n", " type_name = \"frequency value\"\n", @@ -558,6 +612,7 @@ "\n", "\n", "class PercentageFrequencyValue(Double):\n", + " \"\"\" A frequency value expressed as a percentage (UO:0000187), i.e., a dimensionless ratio multiplied by 100. \"\"\"\n", " type_class_uri = UO[\"0000187\"]\n", " type_class_curie = \"UO:0000187\"\n", " type_name = \"percentage frequency value\"\n", @@ -565,6 +620,7 @@ "\n", "\n", "class Quotient(Double):\n", + " \"\"\" A dimensionless value obtained by dividing one quantity by another of the same kind (UO:0010006). Used to represent ratios such as odds ratios, hazard ratios, or relative risks. \"\"\"\n", " type_class_uri = UO[\"0010006\"]\n", " type_class_curie = \"UO:0010006\"\n", " type_name = \"quotient\"\n", @@ -572,6 +628,7 @@ "\n", "\n", "class Unit(String):\n", + " \"\"\" A standard of measurement in which the magnitude of a physical quantity is expressed (UO:0000000). Typically drawn from the Units of Measurement Ontology (UO). \"\"\"\n", " type_class_uri = UO[\"0000000\"]\n", " type_class_curie = \"UO:0000000\"\n", " type_name = \"unit\"\n", @@ -579,13 +636,15 @@ "\n", "\n", "class TimeType(Time):\n", - " type_class_uri = XSD[\"time\"]\n", - " type_class_curie = \"xsd:time\"\n", + " \"\"\" A value representing a point in time, serialised as a lexical representation of xsd:time. \"\"\"\n", + " type_class_uri = XSD[\"string\"]\n", + " type_class_curie = \"xsd:string\"\n", " type_name = \"time type\"\n", " type_model_uri = DIST.TimeType\n", "\n", "\n", "class BiologicalSequence(String):\n", + " \"\"\" A string of characters representing a biological macromolecule sequence, such as a nucleic acid sequence (DNA/RNA) using the IUPAC nucleotide alphabet, or a protein sequence using the IUPAC amino-acid alphabet. \"\"\"\n", " type_class_uri = XSD[\"string\"]\n", " type_class_curie = \"xsd:string\"\n", " type_name = \"biological sequence\"\n", @@ -649,47 +708,51 @@ " pass\n", "\n", "\n", - "class AgentId(AdministrativeEntityId):\n", + "class StudyResultId(NamedThingId):\n", " pass\n", "\n", "\n", - "class InformationContentEntityId(NamedThingId):\n", + "class ConceptCountAnalysisResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class StudyResultId(InformationContentEntityId):\n", + "class ObservedExpectedFrequencyAnalysisResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class StudyVariableId(InformationContentEntityId):\n", + "class RelativeFrequencyAnalysisResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class CommonDataElementId(InformationContentEntityId):\n", + "class ChiSquaredAnalysisResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class ConceptCountAnalysisResultId(StudyResultId):\n", + "class LogOddsAnalysisResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class ObservedExpectedFrequencyAnalysisResultId(StudyResultId):\n", + "class TextMiningStudyResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class RelativeFrequencyAnalysisResultId(StudyResultId):\n", + "class IceesStudyResultId(StudyResultId):\n", " pass\n", "\n", "\n", - "class TextMiningResultId(StudyResultId):\n", + "class AgentId(AdministrativeEntityId):\n", " pass\n", "\n", "\n", - "class ChiSquaredAnalysisResultId(StudyResultId):\n", + "class InformationContentEntityId(NamedThingId):\n", " pass\n", "\n", "\n", - "class LogOddsAnalysisResultId(StudyResultId):\n", + "class StudyVariableId(InformationContentEntityId):\n", + " pass\n", + "\n", + "\n", + "class CommonDataElementId(InformationContentEntityId):\n", " pass\n", "\n", "\n", @@ -713,7 +776,11 @@ " pass\n", "\n", "\n", - "class EvidenceTypeId(InformationContentEntityId):\n", + "class EvidenceTypeId(NamedThingId):\n", + " pass\n", + "\n", + "\n", + "class EvidenceId(InformationContentEntityId):\n", " pass\n", "\n", "\n", @@ -825,6 +892,10 @@ " pass\n", "\n", "\n", + "class AffinityMeasurementId(NamedThingId):\n", + " pass\n", + "\n", + "\n", "class SmallMoleculeId(MolecularEntityId):\n", " pass\n", "\n", @@ -1137,7 +1208,7 @@ " pass\n", "\n", "\n", - "class ClinicalTrialId(ClinicalEntityId):\n", + "class ClinicalTrialId(StudyId):\n", " pass\n", "\n", "\n", @@ -1165,11 +1236,11 @@ " pass\n", "\n", "\n", - "class ExposureEventId(OntologyClassId):\n", + "class ExposureEventId(NamedThingId):\n", " pass\n", "\n", "\n", - "class GenomicBackgroundExposureId(AttributeId):\n", + "class GenomicBackgroundExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", @@ -1177,7 +1248,7 @@ " pass\n", "\n", "\n", - "class PathologicalProcessExposureId(AttributeId):\n", + "class PathologicalProcessExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", @@ -1185,19 +1256,19 @@ " pass\n", "\n", "\n", - "class PathologicalAnatomicalExposureId(AttributeId):\n", + "class PathologicalAnatomicalExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", - "class DiseaseOrPhenotypicFeatureExposureId(AttributeId):\n", + "class DiseaseOrPhenotypicFeatureExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", - "class ChemicalExposureId(AttributeId):\n", + "class ChemicalExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", - "class ComplexChemicalExposureId(AttributeId):\n", + "class ComplexChemicalExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", @@ -1209,15 +1280,15 @@ " pass\n", "\n", "\n", - "class TreatmentId(NamedThingId):\n", + "class TreatmentId(ExposureEventId):\n", " pass\n", "\n", "\n", - "class BioticExposureId(AttributeId):\n", + "class BioticExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", - "class EnvironmentalExposureId(AttributeId):\n", + "class EnvironmentalExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", @@ -1225,11 +1296,11 @@ " pass\n", "\n", "\n", - "class BehavioralExposureId(AttributeId):\n", + "class BehavioralExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", - "class SocioeconomicExposureId(AttributeId):\n", + "class SocioeconomicExposureId(ExposureEventId):\n", " pass\n", "\n", "\n", @@ -1237,6 +1308,10 @@ " pass\n", "\n", "\n", + "class DiseaseAssociatedWithResponseToChemicalEntityAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", "class ChemicalEntityAssessesNamedThingAssociationId(AssociationId):\n", " pass\n", "\n", @@ -1269,6 +1344,22 @@ " pass\n", "\n", "\n", + "class GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", "class GeneToGeneCoexpressionAssociationId(GeneToGeneAssociationId):\n", " pass\n", "\n", @@ -1285,11 +1376,11 @@ " pass\n", "\n", "\n", - "class ChemicalToChemicalAssociationId(AssociationId):\n", + "class ChemicalEntityToChemicalEntityAssociationId(AssociationId):\n", " pass\n", "\n", "\n", - "class ReactionToParticipantAssociationId(ChemicalToChemicalAssociationId):\n", + "class ReactionToParticipantAssociationId(ChemicalEntityToChemicalEntityAssociationId):\n", " pass\n", "\n", "\n", @@ -1297,11 +1388,11 @@ " pass\n", "\n", "\n", - "class ChemicalToChemicalDerivationAssociationId(ChemicalToChemicalAssociationId):\n", + "class ChemicalEntityToChemicalDerivationAssociationId(ChemicalEntityToChemicalEntityAssociationId):\n", " pass\n", "\n", "\n", - "class ChemicalToDiseaseOrPhenotypicFeatureAssociationId(AssociationId):\n", + "class ChemicalEntityToDiseaseOrPhenotypicFeatureAssociationId(AssociationId):\n", " pass\n", "\n", "\n", @@ -1309,7 +1400,11 @@ " pass\n", "\n", "\n", - "class ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociationId(ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociationId):\n", + "class ChemicalOrDrugOrTreatmentAdverseEventAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class ChemicalOrDrugOrTreatmentSideEffectAssociationId(AssociationId):\n", " pass\n", "\n", "\n", @@ -1321,7 +1416,11 @@ " pass\n", "\n", "\n", - "class ChemicalToPathwayAssociationId(AssociationId):\n", + "class ChemicalEntityToPathwayAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class ChemicalEntityToBiologicalProcessAssociationId(AssociationId):\n", " pass\n", "\n", "\n", @@ -1333,6 +1432,10 @@ " pass\n", "\n", "\n", + "class MacromolecularMachineHasSubstrateAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", "class GeneRegulatesGeneAssociationId(AssociationId):\n", " pass\n", "\n", @@ -1341,7 +1444,11 @@ " pass\n", "\n", "\n", - "class ChemicalAffectsGeneAssociationId(AssociationId):\n", + "class ChemicalAffectsBiologicalEntityAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class ChemicalAffectsGeneAssociationId(ChemicalAffectsBiologicalEntityAssociationId):\n", " pass\n", "\n", "\n", @@ -1401,27 +1508,35 @@ " pass\n", "\n", "\n", - "class BehaviorToBehavioralFeatureAssociationId(AssociationId):\n", + "class CaseToDiseaseAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class CaseToVariantAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class CaseToGeneAssociationId(AssociationId):\n", " pass\n", "\n", "\n", - "class GeneToDiseaseOrPhenotypicFeatureAssociationId(AssociationId):\n", + "class BehaviorToBehavioralFeatureAssociationId(AssociationId):\n", " pass\n", "\n", "\n", - "class GeneToPhenotypicFeatureAssociationId(GeneToDiseaseOrPhenotypicFeatureAssociationId):\n", + "class GeneToPhenotypicFeatureAssociationId(AssociationId):\n", " pass\n", "\n", "\n", - "class GeneToDiseaseAssociationId(GeneToDiseaseOrPhenotypicFeatureAssociationId):\n", + "class GeneToDiseaseAssociationId(AssociationId):\n", " pass\n", "\n", "\n", - "class CausalGeneToDiseaseAssociationId(GeneToDiseaseAssociationId):\n", + "class CausalGeneToDiseaseAssociationId(AssociationId):\n", " pass\n", "\n", "\n", - "class CorrelatedGeneToDiseaseAssociationId(GeneToDiseaseAssociationId):\n", + "class CorrelatedGeneToDiseaseAssociationId(AssociationId):\n", " pass\n", "\n", "\n", @@ -1569,7 +1684,11 @@ " pass\n", "\n", "\n", - "class AnatomicalEntityToAnatomicalEntityPartOfAssociationId(AnatomicalEntityToAnatomicalEntityAssociationId):\n", + "class AnatomicalEntityHasPartAnatomicalEntityAssociationId(AnatomicalEntityToAnatomicalEntityAssociationId):\n", + " pass\n", + "\n", + "\n", + "class AnatomicalEntityPartOfAnatomicalEntityAssociationId(AnatomicalEntityToAnatomicalEntityAssociationId):\n", " pass\n", "\n", "\n", @@ -1577,6 +1696,14 @@ " pass\n", "\n", "\n", + "class GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", + "class BiologicalProcessOrActivityToAnatomicalEntityAssociationId(AssociationId):\n", + " pass\n", + "\n", + "\n", "class OrganismTaxonToOrganismTaxonAssociationId(AssociationId):\n", " pass\n", "\n", @@ -1594,23 +1721,105 @@ "\n", "\n", "@dataclass(repr=False)\n", + "class KnowledgeGraph(YAMLRoot):\n", + " \"\"\"\n", + " A container representing a knowledge graph serialized in KGX (Knowledge Graph Exchange) format. A KnowledgeGraph\n", + " aggregates a collection of nodes (entities) and edges (relationships between entities) conforming to the KGX\n", + " specification, enabling interoperable exchange of biomedical knowledge graphs across tools and systems in the\n", + " Biolink ecosystem.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"KnowledgeGraph\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:KnowledgeGraph\"\n", + " class_name: ClassVar[str] = \"KnowledgeGraph\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.KnowledgeGraph\n", + "\n", + " nodes: Optional[Union[dict[Union[str, EntityId], Union[dict, \"Entity\"]], list[Union[dict, \"Entity\"]]]] = empty_dict()\n", + " edges: Optional[Union[dict[Union[str, AssociationId], Union[dict, \"Association\"]], list[Union[dict, \"Association\"]]]] = empty_dict()\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " self._normalize_inlined_as_list(slot_name=\"nodes\", slot_type=Entity, key_name=\"id\", keyed=True)\n", + "\n", + " self._normalize_inlined_as_list(slot_name=\"edges\", slot_type=Association, key_name=\"id\", keyed=True)\n", + "\n", + " super().__post_init__(**kwargs)\n", + "\n", + "\n", + "class Node(YAMLRoot):\n", + " \"\"\"\n", + " A generic node in a KGX-formatted knowledge graph, representing a single entity or concept with a unique\n", + " identifier. This class serves as the structural superclass for `named thing` in Biolink, providing the minimal\n", + " KGX-compliant contract (identifier, category, etc.) that any biolink entity participating in a knowledge graph\n", + " must satisfy.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Node\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:Node\"\n", + " class_name: ClassVar[str] = \"Node\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.Node\n", + "\n", + "\n", + "class Edge(YAMLRoot):\n", + " \"\"\"\n", + " A generic edge in a KGX-formatted knowledge graph, representing a directed relationship between a subject node and\n", + " an object node qualified by a predicate. This class serves as the structural superclass for `association` in\n", + " Biolink, providing the minimal KGX-compliant contract (subject, predicate, object, and associated metadata) that\n", + " any biolink relationship participating in a knowledge graph must satisfy.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Edge\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:Edge\"\n", + " class_name: ClassVar[str] = \"Edge\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.Edge\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class KnowledgeGraph(YAMLRoot):\n", + " \"\"\"\n", + " A knowledge graph is a structured representation of knowledge in the form of a graph, where nodes represent\n", + " entities or concepts, and edges represent relationships between them. Knowledge graphs are used to organize and\n", + " connect information from various sources, enabling better understanding, analysis, and reasoning about complex\n", + " domains.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"KnowledgeGraph\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:KnowledgeGraph\"\n", + " class_name: ClassVar[str] = \"knowledge graph\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.KnowledgeGraph\n", + "\n", + " nodes: Optional[Union[dict[Union[str, EntityId], Union[dict, \"Entity\"]], list[Union[dict, \"Entity\"]]]] = empty_dict()\n", + " edges: Optional[Union[dict[Union[str, AssociationId], Union[dict, \"Association\"]], list[Union[dict, \"Association\"]]]] = empty_dict()\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " self._normalize_inlined_as_list(slot_name=\"nodes\", slot_type=Entity, key_name=\"id\", keyed=True)\n", + "\n", + " self._normalize_inlined_as_list(slot_name=\"edges\", slot_type=Association, key_name=\"id\", keyed=True)\n", + "\n", + " super().__post_init__(**kwargs)\n", + "\n", + "\n", + "@dataclass(repr=False)\n", "class MappingCollection(YAMLRoot):\n", " \"\"\"\n", - " A collection of deprecated mappings.\n", + " An abstract container class that holds a set of predicate mappings. Serves as a top-level root for documents that\n", + " enumerate how third-party or deprecated predicates should be rewritten to Biolink predicates and their associated\n", + " qualifiers.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MappingCollection\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MappingCollection\"\n", " class_name: ClassVar[str] = \"mapping collection\"\n", " class_model_uri: ClassVar[URIRef] = DIST.MappingCollection\n", "\n", - " predicate_mappings: Optional[Union[Union[dict, \"PredicateMapping\"], List[Union[dict, \"PredicateMapping\"]]]] = empty_list()\n", + " predicate_mappings: Optional[Union[Union[dict, \"PredicateMapping\"], list[Union[dict, \"PredicateMapping\"]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if not isinstance(self.predicate_mappings, list):\n", - " self.predicate_mappings = [self.predicate_mappings] if self.predicate_mappings is not None else []\n", - " self.predicate_mappings = [v if isinstance(v, PredicateMapping) else PredicateMapping(**as_dict(v)) for v in self.predicate_mappings]\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " self._normalize_inlined_as_list(slot_name=\"predicate_mappings\", slot_type=PredicateMapping, key_name=\"predicate\", keyed=False)\n", "\n", " super().__post_init__(**kwargs)\n", "\n", @@ -1621,46 +1830,46 @@ " A deprecated predicate mapping object contains the deprecated predicate and an example of the rewiring that should\n", " be done to use a qualified statement in its place.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"exact_match\", \"narrow_match\", \"broad_match\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"exact_match\", \"narrow_match\", \"broad_match\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PredicateMapping\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PredicateMapping\"\n", " class_name: ClassVar[str] = \"predicate mapping\"\n", " class_model_uri: ClassVar[URIRef] = DIST.PredicateMapping\n", "\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " mapped_predicate: Optional[str] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", " subject_form_or_variant_qualifier: Optional[str] = None\n", " subject_part_qualifier: Optional[str] = None\n", " subject_derivative_qualifier: Optional[str] = None\n", " subject_context_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", " object_form_or_variant_qualifier: Optional[str] = None\n", " object_part_qualifier: Optional[str] = None\n", " object_derivative_qualifier: Optional[str] = None\n", " object_context_qualifier: Optional[str] = None\n", " causal_mechanism_qualifier: Optional[Union[str, \"CausalMechanismQualifierEnum\"]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", - " exact_match: Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]] = empty_list()\n", - " narrow_match: Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]] = empty_list()\n", - " broad_match: Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]] = empty_list()\n", + " exact_match: Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]] = empty_list()\n", + " narrow_match: Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]] = empty_list()\n", + " broad_match: Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.mapped_predicate is not None and not isinstance(self.mapped_predicate, str):\n", " self.mapped_predicate = str(self.mapped_predicate)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", @@ -1677,11 +1886,11 @@ " if self.subject_context_qualifier is not None and not isinstance(self.subject_context_qualifier, str):\n", " self.subject_context_qualifier = str(self.subject_context_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", @@ -1701,8 +1910,9 @@ " if self.causal_mechanism_qualifier is not None and not isinstance(self.causal_mechanism_qualifier, CausalMechanismQualifierEnum):\n", " self.causal_mechanism_qualifier = CausalMechanismQualifierEnum(self.causal_mechanism_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", "\n", " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", @@ -1730,7 +1940,7 @@ " to use this class directly. Instead, use the appropriate biolink class. For example, for the GO concept of\n", " endocytosis (GO:0006897), use bl:BiologicalProcess as the type.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OntologyClass\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OntologyClass\"\n", @@ -1738,13 +1948,18 @@ " class_model_uri: ClassVar[URIRef] = DIST.OntologyClass\n", "\n", " id: Union[str, OntologyClassId] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OntologyClassId):\n", " self.id = OntologyClassId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", "\n", "\n", @@ -1752,7 +1967,7 @@ " \"\"\"\n", " Biolink Model root class for entity annotations.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Annotation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Annotation\"\n", @@ -1766,7 +1981,7 @@ " A value of an attribute that is quantitative and measurable, expressed as a combination of a unit and a numeric\n", " value\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"QuantityValue\"]\n", " class_class_curie: ClassVar[str] = \"biolink:QuantityValue\"\n", @@ -1776,7 +1991,7 @@ " has_unit: Optional[Union[str, Unit]] = None\n", " has_numeric_value: Optional[float] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self.has_unit is not None and not isinstance(self.has_unit, Unit):\n", " self.has_unit = Unit(self.has_unit)\n", "\n", @@ -1787,7 +2002,10 @@ "\n", "\n", "class RelationshipQuantifier(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A mixin for quantifying aspects of the strength, frequency, or specificity of a relationship between two entities.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RelationshipQuantifier\"]\n", " class_class_curie: ClassVar[str] = \"biolink:RelationshipQuantifier\"\n", @@ -1796,7 +2014,11 @@ "\n", "\n", "class SensitivityQuantifier(RelationshipQuantifier):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A relationship quantifier that measures the sensitivity of a relationship, such as the proportion of true\n", + " positives correctly identified in a diagnostic or association context.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SensitivityQuantifier\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SensitivityQuantifier\"\n", @@ -1805,7 +2027,11 @@ "\n", "\n", "class SpecificityQuantifier(RelationshipQuantifier):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A relationship quantifier that measures the specificity of a relationship, such as the proportion of true\n", + " negatives correctly identified in a diagnostic or association context.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SpecificityQuantifier\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SpecificityQuantifier\"\n", @@ -1818,7 +2044,7 @@ " A relationship quantifier between a variant or symptom and a disease, which is high when the presence of the\n", " feature implies the existence of the disease\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathognomonicityQuantifier\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathognomonicityQuantifier\"\n", @@ -1828,7 +2054,11 @@ "\n", "@dataclass(repr=False)\n", "class FrequencyQuantifier(RelationshipQuantifier):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A relationship quantifier that expresses how often a relationship holds, using count, total, quotient, or\n", + " percentage measures.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"FrequencyQuantifier\"]\n", " class_class_curie: ClassVar[str] = \"biolink:FrequencyQuantifier\"\n", @@ -1840,7 +2070,7 @@ " has_quotient: Optional[float] = None\n", " has_percentage: Optional[float] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self.has_count is not None and not isinstance(self.has_count, int):\n", " self.has_count = int(self.has_count)\n", "\n", @@ -1857,7 +2087,10 @@ "\n", "\n", "class ChemicalOrDrugOrTreatment(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A mixin for entities that represent chemical substances, pharmacological agents, or therapeutic interventions.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalOrDrugOrTreatment\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalOrDrugOrTreatment\"\n", @@ -1870,7 +2103,7 @@ " \"\"\"\n", " Root Biolink Model class for all things and informational relationships, real or imagined.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Entity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Entity\"\n", @@ -1879,14 +2112,14 @@ "\n", " id: Union[str, EntityId] = None\n", " iri: Optional[Union[str, IriType]] = None\n", - " category: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " type: Optional[Union[str, List[str]]] = empty_list()\n", + " category: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " type: Optional[Union[str, list[str]]] = empty_list()\n", " name: Optional[Union[str, LabelType]] = None\n", " description: Optional[Union[str, NarrativeText]] = None\n", - " has_attribute: Optional[Union[Union[str, AttributeId], List[Union[str, AttributeId]]]] = empty_list()\n", + " has_attribute: Optional[Union[Union[str, AttributeId], list[Union[str, AttributeId]]]] = empty_list()\n", " deprecated: Optional[Union[bool, Bool]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EntityId):\n", @@ -1949,7 +2182,7 @@ " \"\"\"\n", " a databased entity or concept/class\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NamedThing\"]\n", " class_class_curie: ClassVar[str] = \"biolink:NamedThing\"\n", @@ -1957,13 +2190,16 @@ " class_model_uri: ClassVar[URIRef] = DIST.NamedThing\n", "\n", " id: Union[str, NamedThingId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " provided_by: Optional[Union[str, List[str]]] = empty_list()\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " provided_by: Optional[Union[str, list[str]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", " full_name: Optional[Union[str, LabelType]] = None\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", + " equivalent_identifiers: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " information_content: Optional[float] = None\n", + " taxon: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, NamedThingId):\n", @@ -1990,6 +2226,16 @@ " self.synonym = [self.synonym] if self.synonym is not None else []\n", " self.synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.synonym]\n", "\n", + " if not isinstance(self.equivalent_identifiers, list):\n", + " self.equivalent_identifiers = [self.equivalent_identifiers] if self.equivalent_identifiers is not None else []\n", + " self.equivalent_identifiers = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.equivalent_identifiers]\n", + "\n", + " if self.information_content is not None and not isinstance(self.information_content, float):\n", + " self.information_content = float(self.information_content)\n", + "\n", + " if self.taxon is not None and not isinstance(self.taxon, URIorCURIE):\n", + " self.taxon = URIorCURIE(self.taxon)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -2029,7 +2275,7 @@ " A property or characteristic of an entity. For example, an apple may have properties such as color, shape, age,\n", " crispiness. An environmental sample may have attributes such as depth, lat, long, material.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Attribute\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Attribute\"\n", @@ -2037,14 +2283,15 @@ " class_model_uri: ClassVar[URIRef] = DIST.Attribute\n", "\n", " id: Union[str, AttributeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " has_quantitative_value: Optional[Union[Union[dict, QuantityValue], List[Union[dict, QuantityValue]]]] = empty_list()\n", + " has_quantitative_value: Optional[Union[Union[dict, QuantityValue], list[Union[dict, QuantityValue]]]] = empty_list()\n", " has_qualitative_value: Optional[Union[str, NamedThingId]] = None\n", " iri: Optional[Union[str, IriType]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, AttributeId):\n", @@ -2068,6 +2315,10 @@ " if self.iri is not None and not isinstance(self.iri, IriType):\n", " self.iri = IriType(self.iri)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -2081,7 +2332,7 @@ " \"\"\"\n", " A role played by the molecular entity or part thereof within a chemical context.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalRole\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalRole\"\n", @@ -2089,10 +2340,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ChemicalRole\n", "\n", " id: Union[str, ChemicalRoleId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalRoleId):\n", @@ -2108,7 +2359,11 @@ "\n", "@dataclass(repr=False)\n", "class BiologicalSex(Attribute):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An organismal quality inhering in a bearer by virtue of the bearer's ability to undergo sexual reproduction in\n", + " order to differentiate the individuals or types involved.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalSex\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BiologicalSex\"\n", @@ -2116,10 +2371,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.BiologicalSex\n", "\n", " id: Union[str, BiologicalSexId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BiologicalSexId):\n", @@ -2138,7 +2393,7 @@ " \"\"\"\n", " An attribute corresponding to the phenotypic sex of the individual, based upon the reproductive organs present.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhenotypicSex\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhenotypicSex\"\n", @@ -2146,10 +2401,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.PhenotypicSex\n", "\n", " id: Union[str, PhenotypicSexId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhenotypicSexId):\n", @@ -2169,7 +2424,7 @@ " An attribute corresponding to the genotypic sex of the individual, based upon genotypic composition of sex\n", " chromosomes.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypicSex\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypicSex\"\n", @@ -2177,10 +2432,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.GenotypicSex\n", "\n", " id: Union[str, GenotypicSexId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypicSexId):\n", @@ -2199,7 +2454,7 @@ " \"\"\"\n", " describes the severity of a phenotypic feature or disease\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SeverityValue\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SeverityValue\"\n", @@ -2207,10 +2462,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.SeverityValue\n", "\n", " id: Union[str, SeverityValueId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SeverityValueId):\n", @@ -2229,7 +2484,7 @@ " \"\"\"\n", " An OWL property used as an edge label\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RelationshipType\"]\n", " class_class_curie: ClassVar[str] = \"biolink:RelationshipType\"\n", @@ -2238,7 +2493,7 @@ "\n", " id: Union[str, RelationshipTypeId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, RelationshipTypeId):\n", @@ -2252,7 +2507,7 @@ " \"\"\"\n", " A descriptor for the rank within a taxonomic classification. Example instance: TAXRANK:0000017 (kingdom)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"TaxonomicRank\"]\n", " class_class_curie: ClassVar[str] = \"biolink:TaxonomicRank\"\n", @@ -2261,7 +2516,7 @@ "\n", " id: Union[str, TaxonomicRankId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, TaxonomicRankId):\n", @@ -2276,7 +2531,7 @@ " A classification of a set of organisms. Example instances: NCBITaxon:9606 (Homo sapiens), NCBITaxon:2 (Bacteria).\n", " Can also be used to represent strains or subspecies.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismTaxon\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismTaxon\"\n", @@ -2284,10 +2539,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismTaxon\n", "\n", " id: Union[str, OrganismTaxonId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_taxonomic_rank: Optional[Union[str, TaxonomicRankId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OrganismTaxonId):\n", @@ -2309,7 +2564,7 @@ " \"\"\"\n", " Something that happens at a given place and time.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Event\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Event\"\n", @@ -2317,9 +2572,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Event\n", "\n", " id: Union[str, EventId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EventId):\n", @@ -2335,7 +2590,10 @@ "\n", "@dataclass(repr=False)\n", "class AdministrativeEntity(NamedThing):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An entity that is the byproduct of an administrative process.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AdministrativeEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:AdministrativeEntity\"\n", @@ -2343,9 +2601,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.AdministrativeEntity\n", "\n", " id: Union[str, AdministrativeEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2356,38 +2614,23 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class Agent(AdministrativeEntity):\n", + "class StudyResult(NamedThing):\n", " \"\"\"\n", - " person, group, organization or project that provides a piece of information (i.e. a knowledge association)\n", + " A collection of data items from a study that are about a particular study subject or experimental unit (the\n", + " 'focus' of the Result) - optionally with context/provenance metadata that may be relevant to the interpretation of\n", + " this data as evidence.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", - "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Agent\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:Agent\"\n", - " class_name: ClassVar[str] = \"agent\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.Agent\n", - "\n", - " id: Union[str, AgentId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " affiliation: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " address: Optional[str] = None\n", - " name: Optional[Union[str, LabelType]] = None\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self._is_empty(self.id):\n", - " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, AgentId):\n", - " self.id = AgentId(self.id)\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " if not isinstance(self.affiliation, list):\n", - " self.affiliation = [self.affiliation] if self.affiliation is not None else []\n", - " self.affiliation = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.affiliation]\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"StudyResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:StudyResult\"\n", + " class_name: ClassVar[str] = \"study result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.StudyResult\n", "\n", - " if self.address is not None and not isinstance(self.address, str):\n", - " self.address = str(self.address)\n", + " id: Union[str, StudyResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " if self.name is not None and not isinstance(self.name, LabelType):\n", - " self.name = LabelType(self.name)\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2398,36 +2641,25 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class InformationContentEntity(NamedThing):\n", + "class ConceptCountAnalysisResult(StudyResult):\n", " \"\"\"\n", - " a piece of information that typically describes some topic of discourse or is used as support.\n", + " A result of a concept count analysis.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"InformationContentEntity\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:InformationContentEntity\"\n", - " class_name: ClassVar[str] = \"information content entity\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.InformationContentEntity\n", - "\n", - " id: Union[str, InformationContentEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " license: Optional[str] = None\n", - " rights: Optional[str] = None\n", - " format: Optional[str] = None\n", - " creation_date: Optional[Union[str, XSDDate]] = None\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self.license is not None and not isinstance(self.license, str):\n", - " self.license = str(self.license)\n", - "\n", - " if self.rights is not None and not isinstance(self.rights, str):\n", - " self.rights = str(self.rights)\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ConceptCountAnalysisResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ConceptCountAnalysisResult\"\n", + " class_name: ClassVar[str] = \"concept count analysis result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ConceptCountAnalysisResult\n", "\n", - " if self.format is not None and not isinstance(self.format, str):\n", - " self.format = str(self.format)\n", + " id: Union[str, ConceptCountAnalysisResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " if self.creation_date is not None and not isinstance(self.creation_date, XSDDate):\n", - " self.creation_date = XSDDate(self.creation_date)\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, ConceptCountAnalysisResultId):\n", + " self.id = ConceptCountAnalysisResultId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2438,23 +2670,25 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class StudyResult(InformationContentEntity):\n", + "class ObservedExpectedFrequencyAnalysisResult(StudyResult):\n", " \"\"\"\n", - " A collection of data items from a study that are about a particular study subject or experimental unit (the\n", - " 'focus' of the Result) - optionally with context/provenance metadata that may be relevant to the interpretation of\n", - " this data as evidence.\n", + " A result of a observed expected frequency analysis.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"StudyResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:StudyResult\"\n", - " class_name: ClassVar[str] = \"study result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.StudyResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ObservedExpectedFrequencyAnalysisResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ObservedExpectedFrequencyAnalysisResult\"\n", + " class_name: ClassVar[str] = \"observed expected frequency analysis result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ObservedExpectedFrequencyAnalysisResult\n", "\n", - " id: Union[str, StudyResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, ObservedExpectedFrequencyAnalysisResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, ObservedExpectedFrequencyAnalysisResultId):\n", + " self.id = ObservedExpectedFrequencyAnalysisResultId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2465,25 +2699,25 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class StudyVariable(InformationContentEntity):\n", + "class RelativeFrequencyAnalysisResult(StudyResult):\n", " \"\"\"\n", - " a variable that is used as a measure in the investigation of a study\n", + " A result of a relative frequency analysis.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"StudyVariable\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:StudyVariable\"\n", - " class_name: ClassVar[str] = \"study variable\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.StudyVariable\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RelativeFrequencyAnalysisResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:RelativeFrequencyAnalysisResult\"\n", + " class_name: ClassVar[str] = \"relative frequency analysis result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.RelativeFrequencyAnalysisResult\n", "\n", - " id: Union[str, StudyVariableId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, RelativeFrequencyAnalysisResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, StudyVariableId):\n", - " self.id = StudyVariableId(self.id)\n", + " if not isinstance(self.id, RelativeFrequencyAnalysisResultId):\n", + " self.id = RelativeFrequencyAnalysisResultId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2494,27 +2728,25 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class CommonDataElement(InformationContentEntity):\n", + "class ChiSquaredAnalysisResult(StudyResult):\n", " \"\"\"\n", - " A Common Data Element (CDE) is a standardized, precisely defined question, paired with a set of allowable\n", - " responses, used systematically across different sites, studies, or clinical trials to ensure consistent data\n", - " collection. Multiple CDEs (from one or more Collections) can be curated into Forms. (https://cde.nlm.nih.gov/home)\n", + " A result of a chi squared analysis.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CommonDataElement\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:CommonDataElement\"\n", - " class_name: ClassVar[str] = \"common data element\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.CommonDataElement\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChiSquaredAnalysisResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChiSquaredAnalysisResult\"\n", + " class_name: ClassVar[str] = \"chi squared analysis result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChiSquaredAnalysisResult\n", "\n", - " id: Union[str, CommonDataElementId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, ChiSquaredAnalysisResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, CommonDataElementId):\n", - " self.id = CommonDataElementId(self.id)\n", + " if not isinstance(self.id, ChiSquaredAnalysisResultId):\n", + " self.id = ChiSquaredAnalysisResultId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2525,25 +2757,25 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ConceptCountAnalysisResult(StudyResult):\n", + "class LogOddsAnalysisResult(StudyResult):\n", " \"\"\"\n", - " A result of a concept count analysis.\n", + " A result of a log odds ratio analysis.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ConceptCountAnalysisResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ConceptCountAnalysisResult\"\n", - " class_name: ClassVar[str] = \"concept count analysis result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ConceptCountAnalysisResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"LogOddsAnalysisResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:LogOddsAnalysisResult\"\n", + " class_name: ClassVar[str] = \"log odds analysis result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.LogOddsAnalysisResult\n", "\n", - " id: Union[str, ConceptCountAnalysisResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, LogOddsAnalysisResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ConceptCountAnalysisResultId):\n", - " self.id = ConceptCountAnalysisResultId(self.id)\n", + " if not isinstance(self.id, LogOddsAnalysisResultId):\n", + " self.id = LogOddsAnalysisResultId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2554,25 +2786,58 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ObservedExpectedFrequencyAnalysisResult(StudyResult):\n", + "class TextMiningStudyResult(StudyResult):\n", " \"\"\"\n", - " A result of a observed expected frequency analysis.\n", + " A study result that represents information extracted from text using natural language processing techniques. This\n", + " includes the extracted text, location offsets within the source document, confidence scores, and other metadata\n", + " related to the text mining process.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ObservedExpectedFrequencyAnalysisResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ObservedExpectedFrequencyAnalysisResult\"\n", - " class_name: ClassVar[str] = \"observed expected frequency analysis result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ObservedExpectedFrequencyAnalysisResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"TextMiningStudyResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:TextMiningStudyResult\"\n", + " class_name: ClassVar[str] = \"text mining study result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.TextMiningStudyResult\n", "\n", - " id: Union[str, ObservedExpectedFrequencyAnalysisResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, TextMiningStudyResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " supporting_text: Optional[Union[str, list[str]]] = empty_list()\n", + " subject_location_in_text: Optional[Union[int, list[int]]] = empty_list()\n", + " object_location_in_text: Optional[Union[int, list[int]]] = empty_list()\n", + " extraction_confidence_score: Optional[float] = None\n", + " supporting_document_type: Optional[str] = None\n", + " supporting_document_year: Optional[int] = None\n", + " supporting_text_section_type: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ObservedExpectedFrequencyAnalysisResultId):\n", - " self.id = ObservedExpectedFrequencyAnalysisResultId(self.id)\n", + " if not isinstance(self.id, TextMiningStudyResultId):\n", + " self.id = TextMiningStudyResultId(self.id)\n", + "\n", + " if not isinstance(self.supporting_text, list):\n", + " self.supporting_text = [self.supporting_text] if self.supporting_text is not None else []\n", + " self.supporting_text = [v if isinstance(v, str) else str(v) for v in self.supporting_text]\n", + "\n", + " if not isinstance(self.subject_location_in_text, list):\n", + " self.subject_location_in_text = [self.subject_location_in_text] if self.subject_location_in_text is not None else []\n", + " self.subject_location_in_text = [v if isinstance(v, int) else int(v) for v in self.subject_location_in_text]\n", + "\n", + " if not isinstance(self.object_location_in_text, list):\n", + " self.object_location_in_text = [self.object_location_in_text] if self.object_location_in_text is not None else []\n", + " self.object_location_in_text = [v if isinstance(v, int) else int(v) for v in self.object_location_in_text]\n", + "\n", + " if self.extraction_confidence_score is not None and not isinstance(self.extraction_confidence_score, float):\n", + " self.extraction_confidence_score = float(self.extraction_confidence_score)\n", + "\n", + " if self.supporting_document_type is not None and not isinstance(self.supporting_document_type, str):\n", + " self.supporting_document_type = str(self.supporting_document_type)\n", + "\n", + " if self.supporting_document_year is not None and not isinstance(self.supporting_document_year, int):\n", + " self.supporting_document_year = int(self.supporting_document_year)\n", + "\n", + " if self.supporting_text_section_type is not None and not isinstance(self.supporting_text_section_type, str):\n", + " self.supporting_text_section_type = str(self.supporting_text_section_type)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2583,25 +2848,59 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class RelativeFrequencyAnalysisResult(StudyResult):\n", + "class IceesStudyResult(StudyResult):\n", " \"\"\"\n", - " A result of a relative frequency analysis.\n", + " A study result that represents a result, from a supporting Study, which is specifically associated with an\n", + " Integrated Clinical and Environmental Exposures Service (ICEES) knowledge assertion.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RelativeFrequencyAnalysisResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:RelativeFrequencyAnalysisResult\"\n", - " class_name: ClassVar[str] = \"relative frequency analysis result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.RelativeFrequencyAnalysisResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"IceesStudyResult\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:IceesStudyResult\"\n", + " class_name: ClassVar[str] = \"icees study result\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.IceesStudyResult\n", "\n", - " id: Union[str, RelativeFrequencyAnalysisResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, IceesStudyResultId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " chi_squared_statistic: Optional[float] = None\n", + " chi_squared_dof: Optional[int] = None\n", + " chi_squared_p: Optional[float] = None\n", + " total_sample_size: Optional[int] = None\n", + " fisher_exact_odds_ratio: Optional[float] = None\n", + " fisher_exact_p: Optional[float] = None\n", + " log_odds_ratio: Optional[float] = None\n", + " log_odds_ratio_95_ci: Optional[Union[float, list[float]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, RelativeFrequencyAnalysisResultId):\n", - " self.id = RelativeFrequencyAnalysisResultId(self.id)\n", + " if not isinstance(self.id, IceesStudyResultId):\n", + " self.id = IceesStudyResultId(self.id)\n", + "\n", + " if self.chi_squared_statistic is not None and not isinstance(self.chi_squared_statistic, float):\n", + " self.chi_squared_statistic = float(self.chi_squared_statistic)\n", + "\n", + " if self.chi_squared_dof is not None and not isinstance(self.chi_squared_dof, int):\n", + " self.chi_squared_dof = int(self.chi_squared_dof)\n", + "\n", + " if self.chi_squared_p is not None and not isinstance(self.chi_squared_p, float):\n", + " self.chi_squared_p = float(self.chi_squared_p)\n", + "\n", + " if self.total_sample_size is not None and not isinstance(self.total_sample_size, int):\n", + " self.total_sample_size = int(self.total_sample_size)\n", + "\n", + " if self.fisher_exact_odds_ratio is not None and not isinstance(self.fisher_exact_odds_ratio, float):\n", + " self.fisher_exact_odds_ratio = float(self.fisher_exact_odds_ratio)\n", + "\n", + " if self.fisher_exact_p is not None and not isinstance(self.fisher_exact_p, float):\n", + " self.fisher_exact_p = float(self.fisher_exact_p)\n", + "\n", + " if self.log_odds_ratio is not None and not isinstance(self.log_odds_ratio, float):\n", + " self.log_odds_ratio = float(self.log_odds_ratio)\n", + "\n", + " if not isinstance(self.log_odds_ratio_95_ci, list):\n", + " self.log_odds_ratio_95_ci = [self.log_odds_ratio_95_ci] if self.log_odds_ratio_95_ci is not None else []\n", + " self.log_odds_ratio_95_ci = [v if isinstance(v, float) else float(v) for v in self.log_odds_ratio_95_ci]\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2612,25 +2911,38 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class TextMiningResult(StudyResult):\n", + "class Agent(AdministrativeEntity):\n", " \"\"\"\n", - " A result of text mining.\n", + " person, group, organization or project that provides a piece of information (i.e. a knowledge association)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"TextMiningResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:TextMiningResult\"\n", - " class_name: ClassVar[str] = \"text mining result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.TextMiningResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Agent\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:Agent\"\n", + " class_name: ClassVar[str] = \"agent\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.Agent\n", "\n", - " id: Union[str, TextMiningResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, AgentId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " affiliation: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " address: Optional[str] = None\n", + " name: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, TextMiningResultId):\n", - " self.id = TextMiningResultId(self.id)\n", + " if not isinstance(self.id, AgentId):\n", + " self.id = AgentId(self.id)\n", + "\n", + " if not isinstance(self.affiliation, list):\n", + " self.affiliation = [self.affiliation] if self.affiliation is not None else []\n", + " self.affiliation = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.affiliation]\n", + "\n", + " if self.address is not None and not isinstance(self.address, str):\n", + " self.address = str(self.address)\n", + "\n", + " if self.name is not None and not isinstance(self.name, LabelType):\n", + " self.name = LabelType(self.name)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2641,25 +2953,65 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChiSquaredAnalysisResult(StudyResult):\n", + "class InformationContentEntity(NamedThing):\n", " \"\"\"\n", - " A result of a chi squared analysis.\n", + " a piece of information that typically describes some topic of discourse or is used as support.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChiSquaredAnalysisResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChiSquaredAnalysisResult\"\n", - " class_name: ClassVar[str] = \"chi squared analysis result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChiSquaredAnalysisResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"InformationContentEntity\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:InformationContentEntity\"\n", + " class_name: ClassVar[str] = \"information content entity\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.InformationContentEntity\n", "\n", - " id: Union[str, ChiSquaredAnalysisResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, InformationContentEntityId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " license: Optional[str] = None\n", + " rights: Optional[str] = None\n", + " format: Optional[str] = None\n", + " creation_date: Optional[Union[str, XSDDate]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self.license is not None and not isinstance(self.license, str):\n", + " self.license = str(self.license)\n", + "\n", + " if self.rights is not None and not isinstance(self.rights, str):\n", + " self.rights = str(self.rights)\n", + "\n", + " if self.format is not None and not isinstance(self.format, str):\n", + " self.format = str(self.format)\n", + "\n", + " if self.creation_date is not None and not isinstance(self.creation_date, XSDDate):\n", + " self.creation_date = XSDDate(self.creation_date)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if self._is_empty(self.category):\n", + " self.MissingRequiredField(\"category\")\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class StudyVariable(InformationContentEntity):\n", + " \"\"\"\n", + " a variable that is used as a measure in the investigation of a study\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"StudyVariable\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:StudyVariable\"\n", + " class_name: ClassVar[str] = \"study variable\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.StudyVariable\n", + "\n", + " id: Union[str, StudyVariableId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChiSquaredAnalysisResultId):\n", - " self.id = ChiSquaredAnalysisResultId(self.id)\n", + " if not isinstance(self.id, StudyVariableId):\n", + " self.id = StudyVariableId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2670,25 +3022,27 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class LogOddsAnalysisResult(StudyResult):\n", + "class CommonDataElement(InformationContentEntity):\n", " \"\"\"\n", - " A result of a log odds ratio analysis.\n", + " A Common Data Element (CDE) is a standardized, precisely defined question, paired with a set of allowable\n", + " responses, used systematically across different sites, studies, or clinical trials to ensure consistent data\n", + " collection. Multiple CDEs (from one or more Collections) can be curated into Forms. (https://cde.nlm.nih.gov/home)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"LogOddsAnalysisResult\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:LogOddsAnalysisResult\"\n", - " class_name: ClassVar[str] = \"log odds analysis result\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.LogOddsAnalysisResult\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CommonDataElement\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:CommonDataElement\"\n", + " class_name: ClassVar[str] = \"common data element\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.CommonDataElement\n", "\n", - " id: Union[str, LogOddsAnalysisResultId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " id: Union[str, CommonDataElementId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, LogOddsAnalysisResultId):\n", - " self.id = LogOddsAnalysisResultId(self.id)\n", + " if not isinstance(self.id, CommonDataElementId):\n", + " self.id = CommonDataElementId(self.id)\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -2703,7 +3057,7 @@ " \"\"\"\n", " an item that refers to a collection of data from a data source.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Dataset\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Dataset\"\n", @@ -2711,9 +3065,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Dataset\n", "\n", " id: Union[str, DatasetId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DatasetId):\n", @@ -2732,7 +3086,7 @@ " \"\"\"\n", " an item that holds distribution level information about a dataset.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DatasetDistribution\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DatasetDistribution\"\n", @@ -2740,10 +3094,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.DatasetDistribution\n", "\n", " id: Union[str, DatasetDistributionId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " distribution_download_url: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DatasetDistributionId):\n", @@ -2765,7 +3119,7 @@ " \"\"\"\n", " an item that holds version level information about a dataset.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DatasetVersion\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DatasetVersion\"\n", @@ -2773,12 +3127,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.DatasetVersion\n", "\n", " id: Union[str, DatasetVersionId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_dataset: Optional[Union[str, DatasetId]] = None\n", " ingest_date: Optional[str] = None\n", " has_distribution: Optional[Union[str, DatasetDistributionId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DatasetVersionId):\n", @@ -2806,7 +3160,7 @@ " \"\"\"\n", " an item that holds summary level information about a dataset.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DatasetSummary\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DatasetSummary\"\n", @@ -2814,11 +3168,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.DatasetSummary\n", "\n", " id: Union[str, DatasetSummaryId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " source_web_page: Optional[str] = None\n", " source_logo: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DatasetSummaryId):\n", @@ -2843,7 +3197,7 @@ " \"\"\"\n", " Level of confidence in a statement\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ConfidenceLevel\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ConfidenceLevel\"\n", @@ -2851,9 +3205,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.ConfidenceLevel\n", "\n", " id: Union[str, ConfidenceLevelId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ConfidenceLevelId):\n", @@ -2868,11 +3222,11 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class EvidenceType(InformationContentEntity):\n", + "class EvidenceType(NamedThing):\n", " \"\"\"\n", " Class of evidence that supports an association\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EvidenceType\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EvidenceType\"\n", @@ -2880,14 +3234,48 @@ " class_model_uri: ClassVar[URIRef] = DIST.EvidenceType\n", "\n", " id: Union[str, EvidenceTypeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EvidenceTypeId):\n", " self.id = EvidenceTypeId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if self._is_empty(self.category):\n", + " self.MissingRequiredField(\"category\")\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class Evidence(InformationContentEntity):\n", + " \"\"\"\n", + " Dereferences detailed evidence that supports an association\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Evidence\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:Evidence\"\n", + " class_name: ClassVar[str] = \"evidence\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.Evidence\n", + "\n", + " id: Union[str, EvidenceId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, EvidenceId):\n", + " self.id = EvidenceId(self.id)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -2902,10 +3290,9 @@ " Any ‘published’ piece of information. Publications are considered broadly to include any document or document part\n", " made available in print or on the web - which may include scientific journal issues, individual articles, and\n", " books - as well as things like pre-prints, white papers, patents, drug labels, web pages, protocol documents, and\n", - " even a part of a publication if of significant knowledge scope (e.g. a figure, figure legend, or section\n", - " highlighted by NLP).\n", + " even a part of a publication if of significant knowledge scope.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Publication\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Publication\"\n", @@ -2913,17 +3300,17 @@ " class_model_uri: ClassVar[URIRef] = DIST.Publication\n", "\n", " id: Union[str, PublicationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", - " authors: Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]] = empty_list()\n", - " pages: Optional[Union[str, List[str]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", + " authors: Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]] = empty_list()\n", + " pages: Optional[Union[str, list[str]]] = empty_list()\n", " summary: Optional[str] = None\n", - " keywords: Optional[Union[str, List[str]]] = empty_list()\n", - " mesh_terms: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", + " keywords: Optional[Union[str, list[str]]] = empty_list()\n", + " mesh_terms: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", " name: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PublicationId):\n", @@ -2974,7 +3361,7 @@ " \"\"\"\n", " This class may rarely be instantiated except if use cases of a given knowledge graph support its utility.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Book\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Book\"\n", @@ -2982,11 +3369,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.Book\n", "\n", " id: Union[str, BookId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", - " type: Optional[Union[str, List[str]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", + " type: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BookId):\n", @@ -3006,7 +3393,11 @@ "\n", "@dataclass(repr=False)\n", "class BookChapter(Publication):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A section of a book that forms a discrete unit of a larger published work and may be independently authored or\n", + " cited.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BookChapter\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BookChapter\"\n", @@ -3014,13 +3405,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.BookChapter\n", "\n", " id: Union[str, BookChapterId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", " published_in: Union[str, URIorCURIE] = None\n", " volume: Optional[str] = None\n", " chapter: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BookChapterId):\n", @@ -3050,7 +3441,7 @@ " \"\"\"\n", " This class may rarely be instantiated except if use cases of a given knowledge graph support its utility.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Serial\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Serial\"\n", @@ -3058,14 +3449,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.Serial\n", "\n", " id: Union[str, SerialId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", " iso_abbreviation: Optional[str] = None\n", " volume: Optional[str] = None\n", " issue: Optional[str] = None\n", - " type: Optional[Union[str, List[str]]] = empty_list()\n", + " type: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SerialId):\n", @@ -3097,7 +3488,7 @@ " \"\"\"\n", " a piece of writing on a particular topic presented as a stand-alone section of a larger publication\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Article\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Article\"\n", @@ -3105,14 +3496,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.Article\n", "\n", " id: Union[str, ArticleId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", " published_in: Union[str, URIorCURIE] = None\n", " iso_abbreviation: Optional[str] = None\n", " volume: Optional[str] = None\n", " issue: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ArticleId):\n", @@ -3145,7 +3536,7 @@ " \"\"\"\n", " an article, typically presenting results of research, that is published in an issue of a scientific journal.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"JournalArticle\"]\n", " class_class_curie: ClassVar[str] = \"biolink:JournalArticle\"\n", @@ -3153,11 +3544,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.JournalArticle\n", "\n", " id: Union[str, JournalArticleId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", " published_in: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, JournalArticleId):\n", @@ -3177,7 +3568,7 @@ " a legal document granted by a patent issuing authority which confers upon the patenter the sole right to make, use\n", " and sell an invention for a set period of time.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Patent\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Patent\"\n", @@ -3185,10 +3576,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.Patent\n", "\n", " id: Union[str, PatentId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PatentId):\n", @@ -3208,7 +3599,7 @@ " a document that is published according to World Wide Web standards, which may incorporate text, graphics, sound,\n", " and/or other features.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"WebPage\"]\n", " class_class_curie: ClassVar[str] = \"biolink:WebPage\"\n", @@ -3216,10 +3607,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.WebPage\n", "\n", " id: Union[str, WebPageId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, WebPageId):\n", @@ -3239,7 +3630,7 @@ " a document reresenting an early version of an author's original scholarly work, such as a research paper or a\n", " review, prior to formal peer review and publication in a peer-reviewed scholarly or scientific journal.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PreprintPublication\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PreprintPublication\"\n", @@ -3247,10 +3638,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.PreprintPublication\n", "\n", " id: Union[str, PreprintPublicationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PreprintPublicationId):\n", @@ -3271,7 +3662,7 @@ " drug, including drug contents, specific instructions or warnings for administration, storage and disposal\n", " instructions, etc.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DrugLabel\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DrugLabel\"\n", @@ -3279,10 +3670,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.DrugLabel\n", "\n", " id: Union[str, DrugLabelId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " publication_type: Union[str, List[str]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " publication_type: Union[str, list[str]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DrugLabelId):\n", @@ -3302,7 +3693,7 @@ " Provides information about how a particular InformationResource served as a source from which knowledge expressed\n", " in an Edge, or data used to generate this knowledge, was retrieved.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RetrievalSource\"]\n", " class_class_curie: ClassVar[str] = \"biolink:RetrievalSource\"\n", @@ -3310,13 +3701,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.RetrievalSource\n", "\n", " id: Union[str, RetrievalSourceId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " resource_id: Union[str, URIorCURIE] = None\n", " resource_role: Union[str, \"ResourceRoleEnum\"] = None\n", - " upstream_resource_ids: Optional[Union[str, URIorCURIE]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", + " upstream_resource_ids: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " source_record_urls: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, RetrievalSourceId):\n", @@ -3332,8 +3724,13 @@ " if not isinstance(self.resource_role, ResourceRoleEnum):\n", " self.resource_role = ResourceRoleEnum(self.resource_role)\n", "\n", - " if self.upstream_resource_ids is not None and not isinstance(self.upstream_resource_ids, URIorCURIE):\n", - " self.upstream_resource_ids = URIorCURIE(self.upstream_resource_ids)\n", + " if not isinstance(self.upstream_resource_ids, list):\n", + " self.upstream_resource_ids = [self.upstream_resource_ids] if self.upstream_resource_ids is not None else []\n", + " self.upstream_resource_ids = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.upstream_resource_ids]\n", + "\n", + " if not isinstance(self.source_record_urls, list):\n", + " self.source_record_urls = [self.source_record_urls] if self.source_record_urls is not None else []\n", + " self.source_record_urls = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.source_record_urls]\n", "\n", " if not isinstance(self.xref, list):\n", " self.xref = [self.xref] if self.xref is not None else []\n", @@ -3351,7 +3748,7 @@ " \"\"\"\n", " Either a physical or processual entity.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhysicalEssenceOrOccurrent\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhysicalEssenceOrOccurrent\"\n", @@ -3363,7 +3760,7 @@ " \"\"\"\n", " Semantic mixin concept. Pertains to entities that have physical properties such as mass, volume, or charge.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhysicalEssence\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhysicalEssence\"\n", @@ -3376,7 +3773,7 @@ " \"\"\"\n", " An entity that has material reality (a.k.a. physical essence).\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhysicalEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhysicalEntity\"\n", @@ -3384,9 +3781,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.PhysicalEntity\n", "\n", " id: Union[str, PhysicalEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhysicalEntityId):\n", @@ -3404,7 +3801,7 @@ " \"\"\"\n", " A processual entity.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Occurrent\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Occurrent\"\n", @@ -3416,7 +3813,7 @@ " \"\"\"\n", " Activity or behavior of any independent integral living, organization or mechanical actor in the world\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ActivityAndBehavior\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ActivityAndBehavior\"\n", @@ -3430,7 +3827,7 @@ " An activity is something that occurs over a period of time and acts upon or with entities; it may include\n", " consuming, processing, transforming, modifying, relocating, using, or generating entities.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Activity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Activity\"\n", @@ -3438,9 +3835,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Activity\n", "\n", " id: Union[str, ActivityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ActivityId):\n", @@ -3459,7 +3856,7 @@ " \"\"\"\n", " a detailed investigation and/or analysis\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Study\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Study\"\n", @@ -3467,14 +3864,17 @@ " class_model_uri: ClassVar[URIRef] = DIST.Study\n", "\n", " id: Union[str, StudyId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_study_results: Optional[Union[dict[Union[str, StudyResultId], Union[dict, StudyResult]], list[Union[dict, StudyResult]]]] = empty_dict()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, StudyId):\n", " self.id = StudyId(self.id)\n", "\n", + " self._normalize_inlined_as_list(slot_name=\"has_study_results\", slot_type=StudyResult, key_name=\"id\", keyed=True)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -3488,7 +3888,7 @@ " \"\"\"\n", " A series of actions conducted in a certain order or manner\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Procedure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Procedure\"\n", @@ -3496,9 +3896,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Procedure\n", "\n", " id: Union[str, ProcedureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProcedureId):\n", @@ -3517,7 +3917,7 @@ " \"\"\"\n", " a fact or situation that is observed to exist or happen, especially one whose cause or explanation is in question\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Phenomenon\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Phenomenon\"\n", @@ -3525,9 +3925,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Phenomenon\n", "\n", " id: Union[str, PhenomenonId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhenomenonId):\n", @@ -3546,7 +3946,7 @@ " \"\"\"\n", " A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Device\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Device\"\n", @@ -3554,9 +3954,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Device\n", "\n", " id: Union[str, DeviceId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DeviceId):\n", @@ -3575,7 +3975,7 @@ " \"\"\"\n", " A device or substance used to help diagnose disease or injury\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiagnosticAid\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiagnosticAid\"\n", @@ -3583,9 +3983,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.DiagnosticAid\n", "\n", " id: Union[str, DiagnosticAidId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiagnosticAidId):\n", @@ -3603,7 +4003,7 @@ " \"\"\"\n", " An entity that has the role of being studied in an investigation, study, or experiment\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SubjectOfInvestigation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SubjectOfInvestigation\"\n", @@ -3618,7 +4018,7 @@ " portion of a substance) to be used for testing, analysis, inspection, investigation, demonstration, or trial use.\n", " [SIO]\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MaterialSample\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MaterialSample\"\n", @@ -3626,9 +4026,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.MaterialSample\n", "\n", " id: Union[str, MaterialSampleId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MaterialSampleId):\n", @@ -3647,7 +4047,7 @@ " \"\"\"\n", " Any entity or process that exists at the level of the whole planet\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PlanetaryEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PlanetaryEntity\"\n", @@ -3655,9 +4055,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.PlanetaryEntity\n", "\n", " id: Union[str, PlanetaryEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PlanetaryEntityId):\n", @@ -3673,7 +4073,10 @@ "\n", "@dataclass(repr=False)\n", "class EnvironmentalProcess(PlanetaryEntity):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A process that occurs within or involves the components of an environmental system.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EnvironmentalProcess\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EnvironmentalProcess\"\n", @@ -3681,9 +4084,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.EnvironmentalProcess\n", "\n", " id: Union[str, EnvironmentalProcessId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EnvironmentalProcessId):\n", @@ -3699,7 +4102,10 @@ "\n", "@dataclass(repr=False)\n", "class EnvironmentalFeature(PlanetaryEntity):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A system or entity in the natural environment that has the disposition to environ one or more material entities.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EnvironmentalFeature\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EnvironmentalFeature\"\n", @@ -3707,9 +4113,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.EnvironmentalFeature\n", "\n", " id: Union[str, EnvironmentalFeatureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EnvironmentalFeatureId):\n", @@ -3728,7 +4134,7 @@ " \"\"\"\n", " a location that can be described in lat/long coordinates\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeographicLocation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeographicLocation\"\n", @@ -3736,11 +4142,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeographicLocation\n", "\n", " id: Union[str, GeographicLocationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " latitude: Optional[float] = None\n", " longitude: Optional[float] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeographicLocationId):\n", @@ -3765,7 +4171,7 @@ " \"\"\"\n", " a location that can be described in lat/long coordinates, for a particular time\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeographicLocationAtTime\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeographicLocationAtTime\"\n", @@ -3773,10 +4179,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeographicLocationAtTime\n", "\n", " id: Union[str, GeographicLocationAtTimeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " timepoint: Optional[Union[str, TimeType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeographicLocationAtTimeId):\n", @@ -3799,17 +4205,17 @@ " A mixin that can be used on any entity that can be taxonomically classified. This includes individual organisms;\n", " genes, their products and other molecular entities; body parts; biological processes\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ThingWithTaxon\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ThingWithTaxon\"\n", " class_name: ClassVar[str] = \"thing with taxon\"\n", " class_model_uri: ClassVar[URIRef] = DIST.ThingWithTaxon\n", "\n", - " in_taxon: Optional[Union[Union[str, OrganismTaxonId], List[Union[str, OrganismTaxonId]]]] = empty_list()\n", + " in_taxon: Optional[Union[Union[str, OrganismTaxonId], list[Union[str, OrganismTaxonId]]]] = empty_list()\n", " in_taxon_label: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if not isinstance(self.in_taxon, list):\n", " self.in_taxon = [self.in_taxon] if self.in_taxon is not None else []\n", " self.in_taxon = [v if isinstance(v, OrganismTaxonId) else OrganismTaxonId(v) for v in self.in_taxon]\n", @@ -3822,7 +4228,10 @@ "\n", "@dataclass(repr=False)\n", "class BiologicalEntity(NamedThing):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " A heterogeneous substance that contains genomic material or is the product of a biological process.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BiologicalEntity\"\n", @@ -3830,11 +4239,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.BiologicalEntity\n", "\n", " id: Union[str, BiologicalEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " in_taxon: Optional[Union[Union[str, OrganismTaxonId], List[Union[str, OrganismTaxonId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " in_taxon: Optional[Union[Union[str, OrganismTaxonId], list[Union[str, OrganismTaxonId]]]] = empty_list()\n", " in_taxon_label: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if not isinstance(self.in_taxon, list):\n", " self.in_taxon = [self.in_taxon] if self.in_taxon is not None else []\n", " self.in_taxon = [v if isinstance(v, OrganismTaxonId) else OrganismTaxonId(v) for v in self.in_taxon]\n", @@ -3852,7 +4261,10 @@ "\n", "@dataclass(repr=False)\n", "class GenomicEntity(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A generically dependent continuant that carries biological sequence that is part of or derived from a genome.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenomicEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenomicEntity\"\n", @@ -3861,7 +4273,7 @@ "\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", @@ -3870,7 +4282,11 @@ "\n", "@dataclass(repr=False)\n", "class EpigenomicEntity(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A mixin for entities that represent epigenomic modifications or features associated with heritable changes in gene\n", + " expression that do not involve changes to the DNA sequence itself.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EpigenomicEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EpigenomicEntity\"\n", @@ -3879,7 +4295,7 @@ "\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", @@ -3891,7 +4307,7 @@ " \"\"\"\n", " A chemical entity is a physical entity that pertains to chemistry or biochemistry.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntity\"\n", @@ -3899,14 +4315,21 @@ " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntity\n", "\n", " id: Union[str, ChemicalEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " trade_name: Optional[str] = None\n", - " available_from: Optional[Union[Union[str, \"DrugAvailabilityEnum\"], List[Union[str, \"DrugAvailabilityEnum\"]]]] = empty_list()\n", + " available_from: Optional[Union[Union[str, \"DrugAvailabilityEnum\"], list[Union[str, \"DrugAvailabilityEnum\"]]]] = empty_list()\n", " max_tolerated_dose: Optional[str] = None\n", " is_toxic: Optional[Union[bool, Bool]] = None\n", - " has_chemical_role: Optional[Union[Union[str, ChemicalRoleId], List[Union[str, ChemicalRoleId]]]] = empty_list()\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " has_chemical_role: Optional[Union[Union[str, ChemicalRoleId], list[Union[str, ChemicalRoleId]]]] = empty_list()\n", + " routes_of_delivery: Optional[Union[Union[str, \"DrugDeliveryEnum\"], list[Union[str, \"DrugDeliveryEnum\"]]]] = empty_list()\n", + " chembl_prodrug: Optional[Union[bool, Bool]] = None\n", + " chembl_black_box_warning: Optional[str] = None\n", + " chembl_natural_product: Optional[Union[bool, Bool]] = None\n", + " chembl_availability_type: Optional[str] = None\n", + " chembl_chirality: Optional[str] = None\n", + " chembl_drug_warning: Optional[str] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalEntityId):\n", @@ -3929,6 +4352,28 @@ " self.has_chemical_role = [self.has_chemical_role] if self.has_chemical_role is not None else []\n", " self.has_chemical_role = [v if isinstance(v, ChemicalRoleId) else ChemicalRoleId(v) for v in self.has_chemical_role]\n", "\n", + " if not isinstance(self.routes_of_delivery, list):\n", + " self.routes_of_delivery = [self.routes_of_delivery] if self.routes_of_delivery is not None else []\n", + " self.routes_of_delivery = [v if isinstance(v, DrugDeliveryEnum) else DrugDeliveryEnum(v) for v in self.routes_of_delivery]\n", + "\n", + " if self.chembl_prodrug is not None and not isinstance(self.chembl_prodrug, Bool):\n", + " self.chembl_prodrug = Bool(self.chembl_prodrug)\n", + "\n", + " if self.chembl_black_box_warning is not None and not isinstance(self.chembl_black_box_warning, str):\n", + " self.chembl_black_box_warning = str(self.chembl_black_box_warning)\n", + "\n", + " if self.chembl_natural_product is not None and not isinstance(self.chembl_natural_product, Bool):\n", + " self.chembl_natural_product = Bool(self.chembl_natural_product)\n", + "\n", + " if self.chembl_availability_type is not None and not isinstance(self.chembl_availability_type, str):\n", + " self.chembl_availability_type = str(self.chembl_availability_type)\n", + "\n", + " if self.chembl_chirality is not None and not isinstance(self.chembl_chirality, str):\n", + " self.chembl_chirality = str(self.chembl_chirality)\n", + "\n", + " if self.chembl_drug_warning is not None and not isinstance(self.chembl_drug_warning, str):\n", + " self.chembl_drug_warning = str(self.chembl_drug_warning)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -3942,7 +4387,7 @@ " \"\"\"\n", " A molecular entity is a chemical entity composed of individual or covalently bonded atoms.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MolecularEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MolecularEntity\"\n", @@ -3950,10 +4395,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.MolecularEntity\n", "\n", " id: Union[str, MolecularEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " is_metabolite: Optional[Union[bool, Bool]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MolecularEntityId):\n", @@ -3962,6 +4408,53 @@ " if self.is_metabolite is not None and not isinstance(self.is_metabolite, Bool):\n", " self.is_metabolite = Bool(self.is_metabolite)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if self._is_empty(self.category):\n", + " self.MissingRequiredField(\"category\")\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class AffinityMeasurement(NamedThing):\n", + " \"\"\"\n", + " The type of measurement describing the strength of an affinity between two entities. For instance, if a chemical\n", + " inhibits a protein with a pIC50 of 8.6, the affinity parameter is pIC50 and the affinity value is 8.6. The binary\n", + " relation, if given, qualifies the affinity as greater than, less than, or equal.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AffinityMeasurement\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:AffinityMeasurement\"\n", + " class_name: ClassVar[str] = \"affinity measurement\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.AffinityMeasurement\n", + "\n", + " id: Union[str, AffinityMeasurementId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " affinity_parameter: Optional[Union[str, \"AffinityParameterEnum\"]] = None\n", + " affinity: Optional[float] = None\n", + " has_binary_relation: Optional[Union[str, \"BinaryRelationEnum\"]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, AffinityMeasurementId):\n", + " self.id = AffinityMeasurementId(self.id)\n", + "\n", + " if self.affinity_parameter is not None and not isinstance(self.affinity_parameter, AffinityParameterEnum):\n", + " self.affinity_parameter = AffinityParameterEnum(self.affinity_parameter)\n", + "\n", + " if self.affinity is not None and not isinstance(self.affinity, float):\n", + " self.affinity = float(self.affinity)\n", + "\n", + " if self.has_binary_relation is not None and not isinstance(self.has_binary_relation, BinaryRelationEnum):\n", + " self.has_binary_relation = BinaryRelationEnum(self.has_binary_relation)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -3978,7 +4471,7 @@ " representation, any valid chemical representation is included, even if it is not strictly molecular (e.g., sodium\n", " ion).\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SmallMolecule\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SmallMolecule\"\n", @@ -3986,9 +4479,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.SmallMolecule\n", "\n", " id: Union[str, SmallMoleculeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SmallMoleculeId):\n", @@ -4007,7 +4500,7 @@ " \"\"\"\n", " A chemical mixture is a chemical entity composed of two or more molecular entities.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalMixture\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalMixture\"\n", @@ -4015,13 +4508,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.ChemicalMixture\n", "\n", " id: Union[str, ChemicalMixtureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " is_supplement: Optional[str] = None\n", " highest_FDA_approval_status: Optional[Union[str, \"ApprovalStatusEnum\"]] = None\n", " drug_regulatory_status_world_wide: Optional[Union[str, \"ApprovalStatusEnum\"]] = None\n", - " routes_of_delivery: Optional[Union[Union[str, \"DrugDeliveryEnum\"], List[Union[str, \"DrugDeliveryEnum\"]]]] = empty_list()\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalMixtureId):\n", @@ -4036,9 +4529,9 @@ " if self.drug_regulatory_status_world_wide is not None and not isinstance(self.drug_regulatory_status_world_wide, ApprovalStatusEnum):\n", " self.drug_regulatory_status_world_wide = ApprovalStatusEnum(self.drug_regulatory_status_world_wide)\n", "\n", - " if not isinstance(self.routes_of_delivery, list):\n", - " self.routes_of_delivery = [self.routes_of_delivery] if self.routes_of_delivery is not None else []\n", - " self.routes_of_delivery = [v if isinstance(v, DrugDeliveryEnum) else DrugDeliveryEnum(v) for v in self.routes_of_delivery]\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", @@ -4055,7 +4548,7 @@ " sequence representations of its precise sequence; for convenience of representation, partial sequences of various\n", " kinds are included.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\", \"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\", \"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NucleicAcidEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:NucleicAcidEntity\"\n", @@ -4063,17 +4556,22 @@ " class_model_uri: ClassVar[URIRef] = DIST.NucleicAcidEntity\n", "\n", " id: Union[str, NucleicAcidEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", - " in_taxon: Optional[Union[Union[str, OrganismTaxonId], List[Union[str, OrganismTaxonId]]]] = empty_list()\n", + " in_taxon: Optional[Union[Union[str, OrganismTaxonId], list[Union[str, OrganismTaxonId]]]] = empty_list()\n", " in_taxon_label: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, NucleicAcidEntityId):\n", " self.id = NucleicAcidEntityId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", @@ -4098,7 +4596,7 @@ " A region (or regions) of the genome that contains known or putative regulatory elements that act in cis- or trans-\n", " to affect the transcription of gene\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RegulatoryRegion\"]\n", " class_class_curie: ClassVar[str] = \"biolink:RegulatoryRegion\"\n", @@ -4106,10 +4604,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.RegulatoryRegion\n", "\n", " id: Union[str, RegulatoryRegionId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, RegulatoryRegionId):\n", @@ -4118,6 +4617,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4132,7 +4635,7 @@ " A region (or regions) of a chromatinized genome that has been measured to be more accessible to an enzyme such as\n", " DNase-I or Tn5 Transpose\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AccessibleDnaRegion\"]\n", " class_class_curie: ClassVar[str] = \"biolink:AccessibleDnaRegion\"\n", @@ -4140,10 +4643,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.AccessibleDnaRegion\n", "\n", " id: Union[str, AccessibleDnaRegionId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, AccessibleDnaRegionId):\n", @@ -4152,6 +4656,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4166,7 +4674,7 @@ " A region (or regions) of the genome that contains a region of DNA known or predicted to bind a protein that\n", " modulates gene transcription\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"TranscriptionFactorBindingSite\"]\n", " class_class_curie: ClassVar[str] = \"biolink:TranscriptionFactorBindingSite\"\n", @@ -4174,10 +4682,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.TranscriptionFactorBindingSite\n", "\n", " id: Union[str, TranscriptionFactorBindingSiteId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, TranscriptionFactorBindingSiteId):\n", @@ -4186,6 +4695,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4200,7 +4713,7 @@ " A molecular mixture is a chemical mixture composed of two or more molecular entities with known concentration and\n", " stoichiometry.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MolecularMixture\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MolecularMixture\"\n", @@ -4208,9 +4721,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.MolecularMixture\n", "\n", " id: Union[str, MolecularMixtureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MolecularMixtureId):\n", @@ -4230,7 +4743,7 @@ " A complex molecular mixture is a chemical mixture composed of two or more molecular entities with unknown\n", " concentration and stoichiometry.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ComplexMolecularMixture\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ComplexMolecularMixture\"\n", @@ -4238,9 +4751,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.ComplexMolecularMixture\n", "\n", " id: Union[str, ComplexMolecularMixtureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ComplexMolecularMixtureId):\n", @@ -4260,7 +4773,7 @@ " Either an individual molecular activity, or a collection of causally connected molecular activities in a\n", " biological system.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalProcessOrActivity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BiologicalProcessOrActivity\"\n", @@ -4268,12 +4781,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.BiologicalProcessOrActivity\n", "\n", " id: Union[str, BiologicalProcessOrActivityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_input: Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]] = empty_list()\n", - " has_output: Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]] = empty_list()\n", - " enabled_by: Optional[Union[Union[str, PhysicalEntityId], List[Union[str, PhysicalEntityId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_input: Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]] = empty_list()\n", + " has_output: Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]] = empty_list()\n", + " enabled_by: Optional[Union[Union[str, PhysicalEntityId], list[Union[str, PhysicalEntityId]]]] = empty_list()\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BiologicalProcessOrActivityId):\n", @@ -4291,6 +4805,10 @@ " self.enabled_by = [self.enabled_by] if self.enabled_by is not None else []\n", " self.enabled_by = [v if isinstance(v, PhysicalEntityId) else PhysicalEntityId(v) for v in self.enabled_by]\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4304,7 +4822,7 @@ " \"\"\"\n", " An execution of a molecular function carried out by a gene product or macromolecular complex.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MolecularActivity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MolecularActivity\"\n", @@ -4312,17 +4830,22 @@ " class_model_uri: ClassVar[URIRef] = DIST.MolecularActivity\n", "\n", " id: Union[str, MolecularActivityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_input: Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]] = empty_list()\n", - " has_output: Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]] = empty_list()\n", - " enabled_by: Optional[Union[Union[dict, \"MacromolecularMachineMixin\"], List[Union[dict, \"MacromolecularMachineMixin\"]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", + " has_input: Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]] = empty_list()\n", + " has_output: Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]] = empty_list()\n", + " enabled_by: Optional[Union[Union[dict, \"MacromolecularMachineMixin\"], list[Union[dict, \"MacromolecularMachineMixin\"]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MolecularActivityId):\n", " self.id = MolecularActivityId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " if not isinstance(self.has_input, list):\n", " self.has_input = [self.has_input] if self.has_input is not None else []\n", " self.has_input = [v if isinstance(v, MolecularEntityId) else MolecularEntityId(v) for v in self.has_input]\n", @@ -4348,7 +4871,7 @@ " \"\"\"\n", " One or more causally connected executions of molecular functions\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalProcess\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BiologicalProcess\"\n", @@ -4356,14 +4879,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.BiologicalProcess\n", "\n", " id: Union[str, BiologicalProcessId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BiologicalProcessId):\n", " self.id = BiologicalProcessId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4374,7 +4902,11 @@ "\n", "@dataclass(repr=False)\n", "class Pathway(BiologicalProcess):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " \"\"\"\n", + " A hierarchical ordering of connected molecular reactions (steps) that represent a specific biological process,\n", + " such as signaling or metabolism.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Pathway\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Pathway\"\n", @@ -4382,14 +4914,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.Pathway\n", "\n", " id: Union[str, PathwayId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PathwayId):\n", " self.id = PathwayId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4400,7 +4937,10 @@ "\n", "@dataclass(repr=False)\n", "class PhysiologicalProcess(BiologicalProcess):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " \"\"\"\n", + " A biological or chemical function within a living organism.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhysiologicalProcess\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhysiologicalProcess\"\n", @@ -4408,14 +4948,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.PhysiologicalProcess\n", "\n", " id: Union[str, PhysiologicalProcessId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhysiologicalProcessId):\n", " self.id = PhysiologicalProcessId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4426,7 +4971,11 @@ "\n", "@dataclass(repr=False)\n", "class Behavior(BiologicalProcess):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " \"\"\"\n", + " The internally coordinated responses (actions or inactions) of organisms (individuals or groups) to internal or\n", + " external stimuli, via a mechanism that involves nervous system activity.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Behavior\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Behavior\"\n", @@ -4434,14 +4983,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.Behavior\n", "\n", " id: Union[str, BehaviorId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BehaviorId):\n", " self.id = BehaviorId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4456,7 +5010,7 @@ " A chemical entity (often a mixture) processed for consumption for nutritional, medical or technical use. Is a\n", " material entity that is created or changed during material processing.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ProcessedMaterial\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ProcessedMaterial\"\n", @@ -4464,9 +5018,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.ProcessedMaterial\n", "\n", " id: Union[str, ProcessedMaterialId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProcessedMaterialId):\n", @@ -4485,7 +5039,7 @@ " \"\"\"\n", " A substance intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Drug\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Drug\"\n", @@ -4493,14 +5047,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.Drug\n", "\n", " id: Union[str, DrugId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DrugId):\n", " self.id = DrugId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -4511,7 +5070,11 @@ "\n", "@dataclass(repr=False)\n", "class EnvironmentalFoodContaminant(ChemicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " \"\"\"\n", + " Any unwanted chemical in food. The term includes agrochemicals and industrial chemicals that may contaminate\n", + " foodstuffs during their production, transportation or storage.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EnvironmentalFoodContaminant\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EnvironmentalFoodContaminant\"\n", @@ -4519,9 +5082,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.EnvironmentalFoodContaminant\n", "\n", " id: Union[str, EnvironmentalFoodContaminantId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EnvironmentalFoodContaminantId):\n", @@ -4537,17 +5100,20 @@ "\n", "@dataclass(repr=False)\n", "class FoodAdditive(ChemicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", - "\n", + " \"\"\"\n", + " Any substance which is added to food to preserve or enhance its flavour and/or appearance.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", + "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"FoodAdditive\"]\n", " class_class_curie: ClassVar[str] = \"biolink:FoodAdditive\"\n", " class_name: ClassVar[str] = \"food additive\"\n", " class_model_uri: ClassVar[URIRef] = DIST.FoodAdditive\n", "\n", " id: Union[str, FoodAdditiveId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, FoodAdditiveId):\n", @@ -4564,9 +5130,11 @@ "@dataclass(repr=False)\n", "class Food(ChemicalMixture):\n", " \"\"\"\n", - " A substance consumed by a living organism as a source of nutrition\n", + " A substance of plant, animal, or artificial origin consumed by a living organism to provide essential nutrients,\n", + " energy, and support growth and the processes of life, or to satisfy other health needs or provide a social or\n", + " organoleptic experience.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"has_chemical_role\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"has_chemical_role\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Food\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Food\"\n", @@ -4574,9 +5142,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Food\n", "\n", " id: Union[str, FoodId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, FoodId):\n", @@ -4595,7 +5163,7 @@ " \"\"\"\n", " describes a characteristic of an organismal entity.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismAttribute\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismAttribute\"\n", @@ -4603,10 +5171,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismAttribute\n", "\n", " id: Union[str, OrganismAttributeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OrganismAttributeId):\n", @@ -4623,9 +5191,10 @@ "@dataclass(repr=False)\n", "class PhenotypicQuality(OrganismAttribute):\n", " \"\"\"\n", - " A property of a phenotype\n", + " A characteristic of a phenotype (e.g., weight, size, shape, color) that can be observed, measured, or compared\n", + " across organisms or conditions.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhenotypicQuality\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhenotypicQuality\"\n", @@ -4633,10 +5202,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.PhenotypicQuality\n", "\n", " id: Union[str, PhenotypicQualityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhenotypicQualityId):\n", @@ -4653,10 +5222,9 @@ "@dataclass(repr=False)\n", "class GeneticInheritance(BiologicalEntity):\n", " \"\"\"\n", - " The pattern or 'mode' in which a particular genetic trait or disorder is passed from one generation to the next,\n", - " e.g. autosomal dominant, autosomal recessive, etc.\n", + " The pattern or 'mode' in which a particular genetic trait or disorder is passed from one generation to the next.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneticInheritance\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneticInheritance\"\n", @@ -4664,9 +5232,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneticInheritance\n", "\n", " id: Union[str, GeneticInheritanceId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneticInheritanceId):\n", @@ -4686,7 +5254,7 @@ " A named entity that is either a part of an organism, a whole organism, population or clade of organisms, excluding\n", " chemical entities\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismalEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismalEntity\"\n", @@ -4694,10 +5262,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismalEntity\n", "\n", " id: Union[str, OrganismalEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute: Optional[Union[Union[str, AttributeId], List[Union[str, AttributeId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_attribute: Optional[Union[Union[str, AttributeId], list[Union[str, AttributeId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if not isinstance(self.has_attribute, list):\n", " self.has_attribute = [self.has_attribute] if self.has_attribute is not None else []\n", " self.has_attribute = [v if isinstance(v, AttributeId) else AttributeId(v) for v in self.has_attribute]\n", @@ -4716,7 +5284,7 @@ " A member of a group of unicellular microorganisms lacking a nuclear membrane, that reproduce by binary fission and\n", " are often motile.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Bacterium\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Bacterium\"\n", @@ -4724,9 +5292,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Bacterium\n", "\n", " id: Union[str, BacteriumId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BacteriumId):\n", @@ -4745,7 +5313,7 @@ " \"\"\"\n", " A virus is a microorganism that replicates itself as a microRNA and infects the host cell.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Virus\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Virus\"\n", @@ -4753,9 +5321,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Virus\n", "\n", " id: Union[str, VirusId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VirusId):\n", @@ -4771,7 +5339,12 @@ "\n", "@dataclass(repr=False)\n", "class CellularOrganism(OrganismalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " An organism that contains one or more cells belonging to the cellular lineages of life (Archaea, Bacteria, or\n", + " Eukaryota), whose body consists of one or more cells. Distinguished from acellular biological entities such as\n", + " viruses and viroids.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CellularOrganism\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CellularOrganism\"\n", @@ -4779,9 +5352,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.CellularOrganism\n", "\n", " id: Union[str, CellularOrganismId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CellularOrganismId):\n", @@ -4797,11 +5370,7 @@ "\n", "@dataclass(repr=False)\n", "class Mammal(CellularOrganism):\n", - " \"\"\"\n", - " A member of the class Mammalia, a clade of endothermic amniotes distinguished from reptiles and birds by the\n", - " possession of hair, three middle ear bones, mammary glands, and a neocortex\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Mammal\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Mammal\"\n", @@ -4809,9 +5378,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Mammal\n", "\n", " id: Union[str, MammalId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MammalId):\n", @@ -4827,10 +5396,7 @@ "\n", "@dataclass(repr=False)\n", "class Human(Mammal):\n", - " \"\"\"\n", - " A member of the the species Homo sapiens.\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Human\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Human\"\n", @@ -4838,9 +5404,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Human\n", "\n", " id: Union[str, HumanId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, HumanId):\n", @@ -4856,7 +5422,7 @@ "\n", "@dataclass(repr=False)\n", "class Plant(CellularOrganism):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Plant\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Plant\"\n", @@ -4864,9 +5430,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Plant\n", "\n", " id: Union[str, PlantId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PlantId):\n", @@ -4882,10 +5448,7 @@ "\n", "@dataclass(repr=False)\n", "class Invertebrate(CellularOrganism):\n", - " \"\"\"\n", - " An animal lacking a vertebral column. This group consists of 98% of all animal species.\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Invertebrate\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Invertebrate\"\n", @@ -4893,9 +5456,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Invertebrate\n", "\n", " id: Union[str, InvertebrateId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, InvertebrateId):\n", @@ -4911,10 +5474,7 @@ "\n", "@dataclass(repr=False)\n", "class Vertebrate(CellularOrganism):\n", - " \"\"\"\n", - " A sub-phylum of animals consisting of those having a bony or cartilaginous vertebral column.\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Vertebrate\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Vertebrate\"\n", @@ -4922,9 +5482,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Vertebrate\n", "\n", " id: Union[str, VertebrateId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VertebrateId):\n", @@ -4940,12 +5500,7 @@ "\n", "@dataclass(repr=False)\n", "class Fungus(CellularOrganism):\n", - " \"\"\"\n", - " A kingdom of eukaryotic, heterotrophic organisms that live as saprobes or parasites, including mushrooms, yeasts,\n", - " smuts, molds, etc. They reproduce either sexually or asexually, and have life cycles that range from simple to\n", - " complex. Filamentous fungi refer to those that grow as multicellular colonies (mushrooms and molds).\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Fungus\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Fungus\"\n", @@ -4953,9 +5508,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Fungus\n", "\n", " id: Union[str, FungusId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, FungusId):\n", @@ -4974,7 +5529,7 @@ " \"\"\"\n", " A stage of development or growth of an organism, including post-natal adult stages\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"LifeStage\"]\n", " class_class_curie: ClassVar[str] = \"biolink:LifeStage\"\n", @@ -4982,14 +5537,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.LifeStage\n", "\n", " id: Union[str, LifeStageId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, LifeStageId):\n", " self.id = LifeStageId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -5001,10 +5561,9 @@ "@dataclass(repr=False)\n", "class IndividualOrganism(OrganismalEntity):\n", " \"\"\"\n", - " An instance of an organism. For example, Richard Nixon, Charles Darwin, my pet cat. Example ID:\n", - " ORCID:0000-0002-5355-2576\n", + " An instance of an organism. For example, Charles Darwin, my pet cat.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"IndividualOrganism\"]\n", " class_class_curie: ClassVar[str] = \"biolink:IndividualOrganism\"\n", @@ -5012,9 +5571,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.IndividualOrganism\n", "\n", " id: Union[str, IndividualOrganismId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, IndividualOrganismId):\n", @@ -5034,7 +5593,7 @@ " A collection of individuals from the same taxonomic class distinguished by one or more characteristics.\n", " Characteristics can include, but are not limited to, shared geographic location, genetics, phenotypes.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PopulationOfIndividualOrganisms\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PopulationOfIndividualOrganisms\"\n", @@ -5042,9 +5601,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.PopulationOfIndividualOrganisms\n", "\n", " id: Union[str, PopulationOfIndividualOrganismsId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PopulationOfIndividualOrganismsId):\n", @@ -5063,7 +5622,7 @@ " \"\"\"\n", " A group of people banded together or treated as a group as participants in a research study.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"StudyPopulation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:StudyPopulation\"\n", @@ -5071,9 +5630,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.StudyPopulation\n", "\n", " id: Union[str, StudyPopulationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, StudyPopulationId):\n", @@ -5090,12 +5649,11 @@ "@dataclass(repr=False)\n", "class DiseaseOrPhenotypicFeature(BiologicalEntity):\n", " \"\"\"\n", - " Either one of a disease or an individual phenotypic feature. Some knowledge resources such as Monarch treat these\n", - " as distinct, others such as MESH conflate. Please see definitions of phenotypic feature and disease in this model\n", - " for their independent descriptions. This class is helpful to enforce domains and ranges that may involve either a\n", - " disease or a phenotypic feature.\n", + " A disease or an individual phenotypic feature, grouped as a single class to accommodate source vocabularies and\n", + " assertions that do not distinguish the two. Prefer the more specific subclasses disease or phenotypic feature when\n", + " the distinction is known.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseOrPhenotypicFeature\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseOrPhenotypicFeature\"\n", @@ -5103,14 +5661,23 @@ " class_model_uri: ClassVar[URIRef] = DIST.DiseaseOrPhenotypicFeature\n", "\n", " id: Union[str, DiseaseOrPhenotypicFeatureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " inheritance: Optional[Union[str, GeneticInheritanceId]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseOrPhenotypicFeatureId):\n", " self.id = DiseaseOrPhenotypicFeatureId(self.id)\n", "\n", + " if self.inheritance is not None and not isinstance(self.inheritance, GeneticInheritanceId):\n", + " self.inheritance = GeneticInheritanceId(self.inheritance)\n", + "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -5122,11 +5689,11 @@ "@dataclass(repr=False)\n", "class Disease(DiseaseOrPhenotypicFeature):\n", " \"\"\"\n", - " A disorder of structure or function, especially one that produces specific signs, phenotypes or symptoms or that\n", - " affects a specific location and is not simply a direct result of physical injury. A disposition to undergo\n", - " pathological processes that exists in an organism because of one or more disorders in that organism.\n", + " A disease is a disposition to undergo pathological processes that exists in an organism because of one or more\n", + " disorders in that organism. A disorder of structure or function, especially one that produces specific signs,\n", + " phenotypes or symptoms or that affects a specific location and is not simply a direct result of physical injury.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Disease\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Disease\"\n", @@ -5134,9 +5701,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Disease\n", "\n", " id: Union[str, DiseaseId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseId):\n", @@ -5154,9 +5721,9 @@ "class PhenotypicFeature(DiseaseOrPhenotypicFeature):\n", " \"\"\"\n", " A combination of entity and quality that makes up a phenotyping statement. An observable characteristic of an\n", - " individual resulting from the interaction of its genotype with its molecular and physical environment.\n", + " individual often resulting from the interaction of its genotype with its molecular and physical environment.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhenotypicFeature\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhenotypicFeature\"\n", @@ -5164,9 +5731,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.PhenotypicFeature\n", "\n", " id: Union[str, PhenotypicFeatureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhenotypicFeatureId):\n", @@ -5185,7 +5752,7 @@ " \"\"\"\n", " A phenotypic feature which is behavioral in nature.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BehavioralFeature\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BehavioralFeature\"\n", @@ -5193,9 +5760,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.BehavioralFeature\n", "\n", " id: Union[str, BehavioralFeatureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BehavioralFeatureId):\n", @@ -5212,9 +5779,13 @@ "@dataclass(repr=False)\n", "class AnatomicalEntity(OrganismalEntity):\n", " \"\"\"\n", - " A subcellular location, cell type or gross anatomical part\n", + " A part of a cellular organism at or above the granularity of a protein complex. This is a grouping class with\n", + " three concrete subclasses that should be preferred when applicable: \"biolink:Cell\" for whole cells,\n", + " \"biolink:CellularComponent\" for subcellular and intracellular structures (organelles, membranes, bacterial\n", + " flagella, etc.), and \"biolink:GrossAnatomcialStructure\" for multicellular parts (tissues, organs, body parts).\n", + " Excludes viral and other acellular biological entities.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AnatomicalEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:AnatomicalEntity\"\n", @@ -5222,14 +5793,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.AnatomicalEntity\n", "\n", " id: Union[str, AnatomicalEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, AnatomicalEntityId):\n", " self.id = AnatomicalEntityId(self.id)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -5243,7 +5819,7 @@ " \"\"\"\n", " A location in or around a cell\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CellularComponent\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CellularComponent\"\n", @@ -5251,9 +5827,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.CellularComponent\n", "\n", " id: Union[str, CellularComponentId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CellularComponentId):\n", @@ -5269,7 +5845,11 @@ "\n", "@dataclass(repr=False)\n", "class Cell(AnatomicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " The basic structural and functional unit of all organisms. Includes the plasma membrane and any external\n", + " encapsulating structures such as the cell wall and cell envelope.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Cell\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Cell\"\n", @@ -5277,9 +5857,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Cell\n", "\n", " id: Union[str, CellId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CellId):\n", @@ -5295,7 +5875,11 @@ "\n", "@dataclass(repr=False)\n", "class CellLine(OrganismalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " A cultured cell population that is genetically stable and homogeneous, sharing a common propagation history\n", + " through successive passages in culture.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CellLine\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CellLine\"\n", @@ -5303,9 +5887,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.CellLine\n", "\n", " id: Union[str, CellLineId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CellLineId):\n", @@ -5321,7 +5905,10 @@ "\n", "@dataclass(repr=False)\n", "class GrossAnatomicalStructure(AnatomicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " An anatomical structure that has more than one cell as a part.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GrossAnatomicalStructure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GrossAnatomicalStructure\"\n", @@ -5329,9 +5916,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.GrossAnatomicalStructure\n", "\n", " id: Union[str, GrossAnatomicalStructureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GrossAnatomicalStructureId):\n", @@ -5350,7 +5937,7 @@ " A union of chemical entities and children, and gene or gene product. This mixin is helpful to use when searching\n", " across chemical entities that must include genes and their children as chemical entities.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityOrGeneOrGeneProduct\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityOrGeneOrGeneProduct\"\n", @@ -5363,7 +5950,7 @@ " A union of chemical entities and children, and protein and polypeptide. This mixin is helpful to use when\n", " searching across chemical entities that must include genes and their children as chemical entities.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityOrProteinOrPolypeptide\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityOrProteinOrPolypeptide\"\n", @@ -5377,7 +5964,7 @@ " A union of gene locus, gene product, and macromolecular complex. These are the basic units of function in a cell.\n", " They either carry out individual biological activities, or they encode molecules which do this.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularMachineMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MacromolecularMachineMixin\"\n", @@ -5386,7 +5973,7 @@ "\n", " name: Optional[Union[str, SymbolType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self.name is not None and not isinstance(self.name, SymbolType):\n", " self.name = SymbolType(self.name)\n", "\n", @@ -5397,7 +5984,7 @@ " \"\"\"\n", " A union of gene loci or gene products. Frequently an identifier for one will be used as proxy for another\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneOrGeneProduct\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneOrGeneProduct\"\n", @@ -5405,13 +5992,26 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneOrGeneProduct\n", "\n", "\n", + "class GeneOrGeneProductOrGeneFamily(MacromolecularMachineMixin):\n", + " \"\"\"\n", + " A union of gene family or gene loci or gene products, useful to define the association between a gene or gene\n", + " product or gene family and some other general class of entity.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneOrGeneProductOrGeneFamily\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:GeneOrGeneProductOrGeneFamily\"\n", + " class_name: ClassVar[str] = \"gene or gene product or gene family\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.GeneOrGeneProductOrGeneFamily\n", + "\n", + "\n", "@dataclass(repr=False)\n", "class Gene(BiologicalEntity):\n", " \"\"\"\n", " A region (or regions) that includes all of the sequence elements necessary to encode a functional transcript. A\n", " gene locus may include regulatory regions, transcribed regions and/or other functional sequence regions.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Gene\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Gene\"\n", @@ -5419,13 +6019,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.Gene\n", "\n", " id: Union[str, GeneId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", " symbol: Optional[str] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneId):\n", @@ -5444,6 +6045,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -5457,7 +6062,7 @@ " \"\"\"\n", " This is an example extension. Doesn't do a lot\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = DIST[\"MyGene\"]\n", " class_class_curie: ClassVar[str] = \"dist:MyGene\"\n", @@ -5465,10 +6070,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.MyGene\n", "\n", " id: Union[str, MyGeneId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " gene_has_sequence: Union[str, GeneSequence] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MyGeneId):\n", @@ -5493,17 +6098,17 @@ " The functional molecular product of a single gene locus. Gene products are either proteins or functional RNA\n", " molecules.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneProductMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneProductMixin\"\n", " class_name: ClassVar[str] = \"gene product mixin\"\n", " class_model_uri: ClassVar[URIRef] = DIST.GeneProductMixin\n", "\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if not isinstance(self.synonym, list):\n", " self.synonym = [self.synonym] if self.synonym is not None else []\n", " self.synonym = [v if isinstance(v, LabelType) else LabelType(v) for v in self.synonym]\n", @@ -5521,7 +6126,7 @@ " product is intended to represent a specific isoform rather than a canonical or reference or generic product. The\n", " designation of canonical or reference may be arbitrary, or it may represent the superclass of all isoforms.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneProductIsoformMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneProductIsoformMixin\"\n", @@ -5535,7 +6140,7 @@ " A stable assembly of two or more macromolecules, i.e. proteins, nucleic acids, carbohydrates or lipids, in which\n", " at least one component is a protein and the constituent parts function together.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularComplex\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MacromolecularComplex\"\n", @@ -5543,10 +6148,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.MacromolecularComplex\n", "\n", " id: Union[str, MacromolecularComplexId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MacromolecularComplexId):\n", @@ -5567,9 +6172,9 @@ "class NucleosomeModification(BiologicalEntity):\n", " \"\"\"\n", " A chemical modification of a histone protein within a nucleosome octomer or a substitution of a histone with a\n", - " variant histone isoform. e.g. Histone 4 Lysine 20 methylation (H4K20me), histone variant H2AZ substituting H2A.\n", + " variant histone isoform.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NucleosomeModification\"]\n", " class_class_curie: ClassVar[str] = \"biolink:NucleosomeModification\"\n", @@ -5577,13 +6182,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.NucleosomeModification\n", "\n", " id: Union[str, NucleosomeModificationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, NucleosomeModificationId):\n", @@ -5616,7 +6221,7 @@ " \"\"\"\n", " A genome is the sum of genetic material within a cell or virion.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Genome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Genome\"\n", @@ -5624,10 +6229,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.Genome\n", "\n", " id: Union[str, GenomeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenomeId):\n", @@ -5636,6 +6242,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -5650,7 +6260,7 @@ " A region of the transcript sequence within a gene which is not removed from the primary RNA transcript by RNA\n", " splicing.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Exon\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Exon\"\n", @@ -5658,9 +6268,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Exon\n", "\n", " id: Union[str, ExonId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ExonId):\n", @@ -5679,7 +6289,7 @@ " \"\"\"\n", " An RNA synthesized on a DNA or RNA template by an RNA polymerase.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Transcript\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Transcript\"\n", @@ -5687,9 +6297,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Transcript\n", "\n", " id: Union[str, TranscriptId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, TranscriptId):\n", @@ -5705,7 +6315,10 @@ "\n", "@dataclass(repr=False)\n", "class CodingSequence(BiologicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " A contiguous sequence which begins with, and includes, a start codon and ends with, and includes, a stop codon.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CodingSequence\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CodingSequence\"\n", @@ -5713,10 +6326,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.CodingSequence\n", "\n", " id: Union[str, CodingSequenceId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CodingSequenceId):\n", @@ -5740,7 +6353,7 @@ " sequence representations of its precise primary structure; for convenience of representation, partial sequences of\n", " various kinds are included, even if they do not represent a physical molecule.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Polypeptide\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Polypeptide\"\n", @@ -5748,9 +6361,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Polypeptide\n", "\n", " id: Union[str, PolypeptideId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PolypeptideId):\n", @@ -5770,7 +6383,7 @@ " A gene product that is composed of a chain of amino acid sequences and is produced by ribosome-mediated\n", " translation of mRNA\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Protein\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Protein\"\n", @@ -5778,12 +6391,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.Protein\n", "\n", " id: Union[str, ProteinId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProteinId):\n", @@ -5811,10 +6424,9 @@ "@dataclass(repr=False)\n", "class ProteinIsoform(Protein):\n", " \"\"\"\n", - " Represents a protein that is a specific isoform of the canonical or reference protein. See\n", - " https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4114032/\n", + " Represents a protein that is a specific isoform of the canonical or reference protein.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ProteinIsoform\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ProteinIsoform\"\n", @@ -5822,12 +6434,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.ProteinIsoform\n", "\n", " id: Union[str, ProteinIsoformId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProteinIsoformId):\n", @@ -5857,9 +6469,9 @@ " \"\"\"\n", " A conserved part of protein sequence and (tertiary) structure that can evolve, function, and exist independently\n", " of the rest of the protein chain. Protein domains maintain their structure and function independently of the\n", - " proteins in which they are found. e.g. an SH3 domain.\n", + " proteins in which they are found.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ProteinDomain\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ProteinDomain\"\n", @@ -5867,10 +6479,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ProteinDomain\n", "\n", " id: Union[str, ProteinDomainId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProteinDomainId):\n", @@ -5891,10 +6503,10 @@ "@dataclass(repr=False)\n", "class PosttranslationalModification(BiologicalEntity):\n", " \"\"\"\n", - " A chemical modification of a polypeptide or protein that occurs after translation. e.g. polypeptide cleavage to\n", - " form separate proteins, methylation or acetylation of histone tail amino acids, protein ubiquitination.\n", + " A chemical modification of a polypeptide or protein that occurs after translation, altering its structure,\n", + " activity, localization, or interactions.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PosttranslationalModification\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PosttranslationalModification\"\n", @@ -5902,12 +6514,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.PosttranslationalModification\n", "\n", " id: Union[str, PosttranslationalModificationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PosttranslationalModificationId):\n", @@ -5934,7 +6546,11 @@ "\n", "@dataclass(repr=False)\n", "class ProteinFamily(BiologicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " A set of proteins coding for diverse functions which, by virtue of their high degree of sequence similarity, are\n", + " believed to have evolved from a single ancestral gene.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ProteinFamily\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ProteinFamily\"\n", @@ -5942,10 +6558,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ProteinFamily\n", "\n", " id: Union[str, ProteinFamilyId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProteinFamilyId):\n", @@ -5967,9 +6583,9 @@ "class NucleicAcidSequenceMotif(BiologicalEntity):\n", " \"\"\"\n", " A linear nucleotide sequence pattern that is widespread and has, or is conjectured to have, a biological\n", - " significance. e.g. the TATA box promoter motif, transcription factor binding consensus sequences.\n", + " significance. consensus sequences.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NucleicAcidSequenceMotif\"]\n", " class_class_curie: ClassVar[str] = \"biolink:NucleicAcidSequenceMotif\"\n", @@ -5977,9 +6593,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.NucleicAcidSequenceMotif\n", "\n", " id: Union[str, NucleicAcidSequenceMotifId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, NucleicAcidSequenceMotifId):\n", @@ -5995,7 +6611,13 @@ "\n", "@dataclass(repr=False)\n", "class RNAProduct(Transcript):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " High molecular weight, linear polymers, composed of nucleotides containing ribose and linked by phosphodiester\n", + " bonds typically synthesized by a DNA- or RNA-dependent RNA polymerase that constitutes the product of a gene.\n", + " Distinct in emphasis from `biolink:Transcript`, which denotes the informational output of transcription at the\n", + " gene-model level rather than the chemical species itself.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RNAProduct\"]\n", " class_class_curie: ClassVar[str] = \"biolink:RNAProduct\"\n", @@ -6003,12 +6625,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.RNAProduct\n", "\n", " id: Union[str, RNAProductId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, RNAProductId):\n", @@ -6038,7 +6660,7 @@ " \"\"\"\n", " Represents a protein that is a specific isoform of the canonical or reference RNA\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"RNAProductIsoform\"]\n", " class_class_curie: ClassVar[str] = \"biolink:RNAProductIsoform\"\n", @@ -6046,12 +6668,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.RNAProductIsoform\n", "\n", " id: Union[str, RNAProductIsoformId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " name: Optional[Union[str, LabelType]] = None\n", - " xref: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - " synonym: Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]] = empty_list()\n", + " xref: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + " synonym: Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, RNAProductIsoformId):\n", @@ -6078,7 +6700,10 @@ "\n", "@dataclass(repr=False)\n", "class NoncodingRNAProduct(RNAProduct):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " An RNA transcript that does not encode for a protein rather the RNA molecule is the functional gene product.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NoncodingRNAProduct\"]\n", " class_class_curie: ClassVar[str] = \"biolink:NoncodingRNAProduct\"\n", @@ -6086,9 +6711,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.NoncodingRNAProduct\n", "\n", " id: Union[str, NoncodingRNAProductId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, NoncodingRNAProductId):\n", @@ -6104,7 +6729,12 @@ "\n", "@dataclass(repr=False)\n", "class MicroRNA(NoncodingRNAProduct):\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " \"\"\"\n", + " A small (~22 nucleotide) RNA molecule that is the endogenous transcript of a miRNA gene. Produced from precursor\n", + " molecules that form hairpin structures, which are processed (typically via the Dicer pathway) to yield a single\n", + " miRNA molecule. miRNAs function by triggering cleavage of target molecules or acting as translational repressors.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MicroRNA\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MicroRNA\"\n", @@ -6112,9 +6742,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.MicroRNA\n", "\n", " id: Union[str, MicroRNAId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MicroRNAId):\n", @@ -6135,7 +6765,7 @@ " duplex or very long hairpin, processed (via the Dicer pathway) such that numerous siRNAs accumulate from both\n", " strands of the dsRNA. SRNAs trigger the cleavage of their target molecules.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SiRNA\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SiRNA\"\n", @@ -6143,9 +6773,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.SiRNA\n", "\n", " id: Union[str, SiRNAId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SiRNAId):\n", @@ -6164,16 +6794,16 @@ " \"\"\"\n", " any grouping of multiple genes or gene products\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneGroupingMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneGroupingMixin\"\n", " class_name: ClassVar[str] = \"gene grouping mixin\"\n", " class_model_uri: ClassVar[URIRef] = DIST.GeneGroupingMixin\n", "\n", - " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if not isinstance(self.has_gene_or_gene_product, list):\n", " self.has_gene_or_gene_product = [self.has_gene_or_gene_product] if self.has_gene_or_gene_product is not None else []\n", " self.has_gene_or_gene_product = [v if isinstance(v, GeneId) else GeneId(v) for v in self.has_gene_or_gene_product]\n", @@ -6186,7 +6816,7 @@ " \"\"\"\n", " any grouping of multiple genes or gene products related by common descent\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneFamily\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneFamily\"\n", @@ -6194,15 +6824,19 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneFamily\n", "\n", " id: Union[str, GeneFamilyId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " name: Optional[Union[str, LabelType]] = None\n", + " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneFamilyId):\n", " self.id = GeneFamilyId(self.id)\n", "\n", + " if self.name is not None and not isinstance(self.name, LabelType):\n", + " self.name = LabelType(self.name)\n", + "\n", " if not isinstance(self.has_gene_or_gene_product, list):\n", " self.has_gene_or_gene_product = [self.has_gene_or_gene_product] if self.has_gene_or_gene_product is not None else []\n", " self.has_gene_or_gene_product = [v if isinstance(v, GeneId) else GeneId(v) for v in self.has_gene_or_gene_product]\n", @@ -6217,7 +6851,11 @@ "\n", "@dataclass(repr=False)\n", "class Zygosity(Attribute):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An allelic state describing the degree of similarity between features at a single locus, specifically whether\n", + " alleles at the same location on paired chromosomes are identical or different.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Zygosity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Zygosity\"\n", @@ -6225,10 +6863,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.Zygosity\n", "\n", " id: Union[str, ZygosityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ZygosityId):\n", @@ -6248,7 +6886,7 @@ " An information content entity that describes a genome by specifying the total variation in genomic sequence and/or\n", " gene expression, relative to some established background\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Genotype\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Genotype\"\n", @@ -6256,11 +6894,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.Genotype\n", "\n", " id: Union[str, GenotypeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_zygosity: Optional[Union[str, ZygosityId]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeId):\n", @@ -6272,6 +6911,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6285,7 +6928,7 @@ " \"\"\"\n", " A set of zero or more Alleles on a single instance of a Sequence[VMC]\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Haplotype\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Haplotype\"\n", @@ -6293,10 +6936,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.Haplotype\n", "\n", " id: Union[str, HaplotypeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, HaplotypeId):\n", @@ -6305,6 +6949,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6318,7 +6966,7 @@ " \"\"\"\n", " A sequence_variant is a non exact copy of a sequence_feature or genome exhibiting one or more sequence_alteration.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SequenceVariant\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SequenceVariant\"\n", @@ -6326,11 +6974,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.SequenceVariant\n", "\n", " id: Union[str, SequenceVariantId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_gene: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_gene: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", + " hgvs_nomenclature: Optional[Union[str, list[str]]] = empty_list()\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SequenceVariantId):\n", @@ -6340,9 +6990,17 @@ " self.has_gene = [self.has_gene] if self.has_gene is not None else []\n", " self.has_gene = [v if isinstance(v, GeneId) else GeneId(v) for v in self.has_gene]\n", "\n", + " if not isinstance(self.hgvs_nomenclature, list):\n", + " self.hgvs_nomenclature = [self.hgvs_nomenclature] if self.hgvs_nomenclature is not None else []\n", + " self.hgvs_nomenclature = [v if isinstance(v, str) else str(v) for v in self.hgvs_nomenclature]\n", + "\n", " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6356,7 +7014,7 @@ " \"\"\"\n", " SNVs are single nucleotide positions in genomic DNA at which different sequence alternatives exist\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Snv\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Snv\"\n", @@ -6364,9 +7022,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Snv\n", "\n", " id: Union[str, SnvId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SnvId):\n", @@ -6386,7 +7044,7 @@ " A gene altered in its expression level in the context of some experiment as a result of being targeted by\n", " gene-knockdown reagent(s) such as a morpholino or RNAi.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ReagentTargetedGene\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ReagentTargetedGene\"\n", @@ -6394,10 +7052,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.ReagentTargetedGene\n", "\n", " id: Union[str, ReagentTargetedGeneId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ReagentTargetedGeneId):\n", @@ -6406,6 +7065,10 @@ " if self.has_biological_sequence is not None and not isinstance(self.has_biological_sequence, BiologicalSequence):\n", " self.has_biological_sequence = BiologicalSequence(self.has_biological_sequence)\n", "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6419,7 +7082,7 @@ " \"\"\"\n", " Attributes relating to a clinical manifestation\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalAttribute\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalAttribute\"\n", @@ -6427,10 +7090,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalAttribute\n", "\n", " id: Union[str, ClinicalAttributeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalAttributeId):\n", @@ -6450,7 +7113,7 @@ " A clinical measurement is a special kind of attribute which results from a laboratory observation from a subject\n", " individual or sample. Measurements can be connected to their subject by the 'has attribute' slot.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalMeasurement\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalMeasurement\"\n", @@ -6458,10 +7121,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalMeasurement\n", "\n", " id: Union[str, ClinicalMeasurementId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalMeasurementId):\n", @@ -6486,7 +7149,7 @@ " Used to characterize and specify the phenotypic abnormalities defined in the phenotypic abnormality sub-ontology,\n", " with respect to severity, laterality, and other aspects\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalModifier\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalModifier\"\n", @@ -6494,10 +7157,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalModifier\n", "\n", " id: Union[str, ClinicalModifierId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalModifierId):\n", @@ -6517,7 +7180,7 @@ " The course a disease typically takes from its onset, progression in time, and eventual resolution or death of the\n", " affected individual\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalCourse\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalCourse\"\n", @@ -6525,10 +7188,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalCourse\n", "\n", " id: Union[str, ClinicalCourseId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalCourseId):\n", @@ -6547,7 +7210,7 @@ " \"\"\"\n", " The age group in which (disease) symptom manifestations appear.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Onset\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Onset\"\n", @@ -6555,10 +7218,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.Onset\n", "\n", " id: Union[str, OnsetId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OnsetId):\n", @@ -6578,7 +7241,7 @@ " Any entity or process that exists in the clinical domain and outside the biological realm. Diseases are placed\n", " under biological entities\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalEntity\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalEntity\"\n", @@ -6586,9 +7249,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalEntity\n", "\n", " id: Union[str, ClinicalEntityId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalEntityId):\n", @@ -6603,8 +7266,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ClinicalTrial(ClinicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class ClinicalTrial(Study):\n", + " \"\"\"\n", + " A clinical trial is a research study that prospectively assigns human participants or groups of humans to one or\n", + " more health-related interventions to evaluate the effects on health outcomes.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalTrial\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalTrial\"\n", @@ -6612,14 +7279,73 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalTrial\n", "\n", " id: Union[str, ClinicalTrialId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " clinical_trial_phase: Optional[Union[str, \"ResearchPhaseEnum\"]] = None\n", + " clinical_trial_primary_purpose: Optional[str] = None\n", + " clinical_trial_intervention_model: Optional[str] = None\n", + " clinical_trial_overall_status: Optional[Union[str, \"ClinicalTrialStatusEnum\"]] = None\n", + " clinical_trial_brief_title: Optional[str] = None\n", + " clinical_trial_enrollment_type: Optional[str] = None\n", + " clinical_trial_start_date: Optional[str] = None\n", + " clinical_trial_enrollment: Optional[int] = None\n", + " clinical_trial_age_stage: Optional[Union[Union[str, \"ClinicalTrialAgeStageEnum\"], list[Union[str, \"ClinicalTrialAgeStageEnum\"]]]] = empty_list()\n", + " clinical_trial_age_range: Optional[str] = None\n", + " clinical_trial_tested_intervention: Optional[str] = None\n", + " clinical_trial_interventions: Optional[Union[Union[str, ClinicalInterventionId], list[Union[str, ClinicalInterventionId]]]] = empty_list()\n", + " clinical_trial_conditions: Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]] = empty_list()\n", + " creation_date: Optional[Union[str, XSDDate]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalTrialId):\n", " self.id = ClinicalTrialId(self.id)\n", "\n", + " if self.clinical_trial_phase is not None and not isinstance(self.clinical_trial_phase, ResearchPhaseEnum):\n", + " self.clinical_trial_phase = ResearchPhaseEnum(self.clinical_trial_phase)\n", + "\n", + " if self.clinical_trial_primary_purpose is not None and not isinstance(self.clinical_trial_primary_purpose, str):\n", + " self.clinical_trial_primary_purpose = str(self.clinical_trial_primary_purpose)\n", + "\n", + " if self.clinical_trial_intervention_model is not None and not isinstance(self.clinical_trial_intervention_model, str):\n", + " self.clinical_trial_intervention_model = str(self.clinical_trial_intervention_model)\n", + "\n", + " if self.clinical_trial_overall_status is not None and not isinstance(self.clinical_trial_overall_status, ClinicalTrialStatusEnum):\n", + " self.clinical_trial_overall_status = ClinicalTrialStatusEnum(self.clinical_trial_overall_status)\n", + "\n", + " if self.clinical_trial_brief_title is not None and not isinstance(self.clinical_trial_brief_title, str):\n", + " self.clinical_trial_brief_title = str(self.clinical_trial_brief_title)\n", + "\n", + " if self.clinical_trial_enrollment_type is not None and not isinstance(self.clinical_trial_enrollment_type, str):\n", + " self.clinical_trial_enrollment_type = str(self.clinical_trial_enrollment_type)\n", + "\n", + " if self.clinical_trial_start_date is not None and not isinstance(self.clinical_trial_start_date, str):\n", + " self.clinical_trial_start_date = str(self.clinical_trial_start_date)\n", + "\n", + " if self.clinical_trial_enrollment is not None and not isinstance(self.clinical_trial_enrollment, int):\n", + " self.clinical_trial_enrollment = int(self.clinical_trial_enrollment)\n", + "\n", + " if not isinstance(self.clinical_trial_age_stage, list):\n", + " self.clinical_trial_age_stage = [self.clinical_trial_age_stage] if self.clinical_trial_age_stage is not None else []\n", + " self.clinical_trial_age_stage = [v if isinstance(v, ClinicalTrialAgeStageEnum) else ClinicalTrialAgeStageEnum(v) for v in self.clinical_trial_age_stage]\n", + "\n", + " if self.clinical_trial_age_range is not None and not isinstance(self.clinical_trial_age_range, str):\n", + " self.clinical_trial_age_range = str(self.clinical_trial_age_range)\n", + "\n", + " if self.clinical_trial_tested_intervention is not None and not isinstance(self.clinical_trial_tested_intervention, str):\n", + " self.clinical_trial_tested_intervention = str(self.clinical_trial_tested_intervention)\n", + "\n", + " if not isinstance(self.clinical_trial_interventions, list):\n", + " self.clinical_trial_interventions = [self.clinical_trial_interventions] if self.clinical_trial_interventions is not None else []\n", + " self.clinical_trial_interventions = [v if isinstance(v, ClinicalInterventionId) else ClinicalInterventionId(v) for v in self.clinical_trial_interventions]\n", + "\n", + " if not isinstance(self.clinical_trial_conditions, list):\n", + " self.clinical_trial_conditions = [self.clinical_trial_conditions] if self.clinical_trial_conditions is not None else []\n", + " self.clinical_trial_conditions = [v if isinstance(v, DiseaseOrPhenotypicFeatureId) else DiseaseOrPhenotypicFeatureId(v) for v in self.clinical_trial_conditions]\n", + "\n", + " if self.creation_date is not None and not isinstance(self.creation_date, XSDDate):\n", + " self.creation_date = XSDDate(self.creation_date)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6630,7 +7356,11 @@ "\n", "@dataclass(repr=False)\n", "class ClinicalIntervention(ClinicalEntity):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A medical procedure, treatment, or action taken by healthcare professionals to modify the course of a disease or\n", + " condition.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalIntervention\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalIntervention\"\n", @@ -6638,9 +7368,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalIntervention\n", "\n", " id: Union[str, ClinicalInterventionId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalInterventionId):\n", @@ -6660,7 +7390,7 @@ " this category is currently considered broad enough to tag clinical lab measurements and other biological\n", " attributes taken as 'clinical traits' with some statistical score, for example, a p value in genetic associations.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ClinicalFinding\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ClinicalFinding\"\n", @@ -6668,10 +7398,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ClinicalFinding\n", "\n", " id: Union[str, ClinicalFindingId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute: Optional[Union[Union[str, ClinicalAttributeId], List[Union[str, ClinicalAttributeId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_attribute: Optional[Union[Union[str, ClinicalAttributeId], list[Union[str, ClinicalAttributeId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ClinicalFindingId):\n", @@ -6691,7 +7421,10 @@ "\n", "@dataclass(repr=False)\n", "class Hospitalization(ClinicalIntervention):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " The admission and care of a patient in a hospital for observation, diagnosis, or treatment.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Hospitalization\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Hospitalization\"\n", @@ -6699,9 +7432,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Hospitalization\n", "\n", " id: Union[str, HospitalizationId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, HospitalizationId):\n", @@ -6720,7 +7453,7 @@ " \"\"\"\n", " Attributes relating to a socioeconomic manifestation\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SocioeconomicAttribute\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SocioeconomicAttribute\"\n", @@ -6728,10 +7461,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.SocioeconomicAttribute\n", "\n", " id: Union[str, SocioeconomicAttributeId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " has_attribute_type: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SocioeconomicAttributeId):\n", @@ -6750,7 +7483,7 @@ " \"\"\"\n", " An individual (human) organism that has a patient role in some clinical context.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Case\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Case\"\n", @@ -6758,14 +7491,18 @@ " class_model_uri: ClassVar[URIRef] = DIST.Case\n", "\n", " id: Union[str, CaseId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_biological_sex: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CaseId):\n", " self.id = CaseId(self.id)\n", "\n", + " if self.has_biological_sex is not None and not isinstance(self.has_biological_sex, BiologicalSexId):\n", + " self.has_biological_sex = BiologicalSexId(self.has_biological_sex)\n", + "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6780,7 +7517,7 @@ " A group of people banded together or treated as a group who share common characteristics. A cohort 'study' is a\n", " particular form of longitudinal study that samples a cohort, performing a cross-section at intervals through time.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Cohort\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Cohort\"\n", @@ -6788,9 +7525,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.Cohort\n", "\n", " id: Union[str, CohortId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CohortId):\n", @@ -6805,12 +7542,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ExposureEvent(OntologyClass):\n", + "class ExposureEvent(NamedThing):\n", " \"\"\"\n", " A (possibly time bounded) incidence of a feature of the environment of an organism that influences one or more\n", " phenotypic features of that organism, potentially mediated by genes\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ExposureEvent\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ExposureEvent\"\n", @@ -6818,23 +7555,71 @@ " class_model_uri: ClassVar[URIRef] = DIST.ExposureEvent\n", "\n", " id: Union[str, ExposureEventId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", " timepoint: Optional[Union[str, TimeType]] = None\n", + " exposure_type: Optional[str] = None\n", + " exposure_vehicle: Optional[str] = None\n", + " exposure_route: Optional[str] = None\n", + " exposure_start_age: Optional[int] = None\n", + " exposure_end_age: Optional[int] = None\n", + " exposure_duration: Optional[Union[str, XSDTime]] = None\n", + " exposure_magnitude: Optional[str] = None\n", + " exposure_additional_condition: Optional[str] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, ExposureEventId):\n", + " self.id = ExposureEventId(self.id)\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", " self.timepoint = TimeType(self.timepoint)\n", "\n", + " if self.exposure_type is not None and not isinstance(self.exposure_type, str):\n", + " self.exposure_type = str(self.exposure_type)\n", + "\n", + " if self.exposure_vehicle is not None and not isinstance(self.exposure_vehicle, str):\n", + " self.exposure_vehicle = str(self.exposure_vehicle)\n", + "\n", + " if self.exposure_route is not None and not isinstance(self.exposure_route, str):\n", + " self.exposure_route = str(self.exposure_route)\n", + "\n", + " if self.exposure_start_age is not None and not isinstance(self.exposure_start_age, int):\n", + " self.exposure_start_age = int(self.exposure_start_age)\n", + "\n", + " if self.exposure_end_age is not None and not isinstance(self.exposure_end_age, int):\n", + " self.exposure_end_age = int(self.exposure_end_age)\n", + "\n", + " if self.exposure_duration is not None and not isinstance(self.exposure_duration, XSDTime):\n", + " self.exposure_duration = XSDTime(self.exposure_duration)\n", + "\n", + " if self.exposure_magnitude is not None and not isinstance(self.exposure_magnitude, str):\n", + " self.exposure_magnitude = str(self.exposure_magnitude)\n", + "\n", + " if self.exposure_additional_condition is not None and not isinstance(self.exposure_additional_condition, str):\n", + " self.exposure_additional_condition = str(self.exposure_additional_condition)\n", + "\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", + "\n", " super().__post_init__(**kwargs)\n", + " if self._is_empty(self.category):\n", + " self.MissingRequiredField(\"category\")\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", "\n", "\n", "@dataclass(repr=False)\n", - "class GenomicBackgroundExposure(Attribute):\n", + "class GenomicBackgroundExposure(ExposureEvent):\n", " \"\"\"\n", " A genomic background exposure is where an individual's specific genomic background of genes, sequence variants or\n", " other pre-existing genomic conditions constitute a kind of 'exposure' to the organism, leading to or influencing\n", " an outcome.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenomicBackgroundExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenomicBackgroundExposure\"\n", @@ -6842,22 +7627,22 @@ " class_model_uri: ClassVar[URIRef] = DIST.GenomicBackgroundExposure\n", "\n", " id: Union[str, GenomicBackgroundExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", - " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " subsets: Optional[Union[str, list[str]]] = empty_list()\n", + " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", " has_biological_sequence: Optional[Union[str, BiologicalSequence]] = None\n", - " in_taxon: Optional[Union[Union[str, OrganismTaxonId], List[Union[str, OrganismTaxonId]]]] = empty_list()\n", + " in_taxon: Optional[Union[Union[str, OrganismTaxonId], list[Union[str, OrganismTaxonId]]]] = empty_list()\n", " in_taxon_label: Optional[Union[str, LabelType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenomicBackgroundExposureId):\n", " self.id = GenomicBackgroundExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", + " if not isinstance(self.subsets, list):\n", + " self.subsets = [self.subsets] if self.subsets is not None else []\n", + " self.subsets = [v if isinstance(v, str) else str(v) for v in self.subsets]\n", "\n", " if not isinstance(self.has_gene_or_gene_product, list):\n", " self.has_gene_or_gene_product = [self.has_gene_or_gene_product] if self.has_gene_or_gene_product is not None else []\n", @@ -6885,7 +7670,7 @@ " \"\"\"\n", " A pathological (abnormal) structure or process.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalEntityMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalEntityMixin\"\n", @@ -6899,7 +7684,7 @@ " A biologic function or a process having an abnormal or deleterious effect at the subcellular, cellular,\n", " multicellular, or organismal level.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\", \"has_input\", \"has_output\", \"enabled_by\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalProcess\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalProcess\"\n", @@ -6907,9 +7692,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.PathologicalProcess\n", "\n", " id: Union[str, PathologicalProcessId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PathologicalProcessId):\n", @@ -6924,12 +7709,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class PathologicalProcessExposure(Attribute):\n", + "class PathologicalProcessExposure(ExposureEvent):\n", " \"\"\"\n", " A pathological process, when viewed as an exposure, representing a precondition, leading to or influencing an\n", - " outcome, e.g. autoimmunity leading to disease.\n", + " outcome.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalProcessExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalProcessExposure\"\n", @@ -6937,19 +7722,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.PathologicalProcessExposure\n", "\n", " id: Union[str, PathologicalProcessExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PathologicalProcessExposureId):\n", " self.id = PathologicalProcessExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -6964,7 +7744,7 @@ " An anatomical structure with the potential of have an abnormal or deleterious effect at the subcellular, cellular,\n", " multicellular, or organismal level.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = [\"in_taxon\"]\n", + " _inherited_slots: ClassVar[list[str]] = [\"in_taxon\"]\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalAnatomicalStructure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalAnatomicalStructure\"\n", @@ -6972,9 +7752,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.PathologicalAnatomicalStructure\n", "\n", " id: Union[str, PathologicalAnatomicalStructureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PathologicalAnatomicalStructureId):\n", @@ -6989,12 +7769,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class PathologicalAnatomicalExposure(Attribute):\n", + "class PathologicalAnatomicalExposure(ExposureEvent):\n", " \"\"\"\n", - " An abnormal anatomical structure, when viewed as an exposure, representing an precondition, leading to or\n", - " influencing an outcome, e.g. thrombosis leading to an ischemic disease outcome.\n", + " An abnormal anatomical structure, when viewed as an exposure, represented as a precondition, leading to or\n", + " influencing an outcome.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalAnatomicalExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalAnatomicalExposure\"\n", @@ -7002,19 +7782,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.PathologicalAnatomicalExposure\n", "\n", " id: Union[str, PathologicalAnatomicalExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PathologicalAnatomicalExposureId):\n", " self.id = PathologicalAnatomicalExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7024,13 +7799,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class DiseaseOrPhenotypicFeatureExposure(Attribute):\n", + "class DiseaseOrPhenotypicFeatureExposure(ExposureEvent):\n", " \"\"\"\n", - " A disease or phenotypic feature state, when viewed as an exposure, represents an precondition, leading to or\n", - " influencing an outcome, e.g. HIV predisposing an individual to infections; a relative deficiency of skin\n", - " pigmentation predisposing an individual to skin cancer.\n", + " A disease or phenotypic feature state, when viewed as an exposure, represented as a precondition, leading to or\n", + " influencing an outcome,.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseOrPhenotypicFeatureExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseOrPhenotypicFeatureExposure\"\n", @@ -7038,19 +7812,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.DiseaseOrPhenotypicFeatureExposure\n", "\n", " id: Union[str, DiseaseOrPhenotypicFeatureExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseOrPhenotypicFeatureExposureId):\n", " self.id = DiseaseOrPhenotypicFeatureExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7060,11 +7829,11 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalExposure(Attribute):\n", + "class ChemicalExposure(ExposureEvent):\n", " \"\"\"\n", " A chemical exposure is an intake of a particular chemical entity.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalExposure\"\n", @@ -7072,12 +7841,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ChemicalExposure\n", "\n", " id: Union[str, ChemicalExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " has_quantitative_value: Optional[Union[Union[dict, QuantityValue], List[Union[dict, QuantityValue]]]] = empty_list()\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_quantitative_value: Optional[Union[Union[dict, QuantityValue], list[Union[dict, QuantityValue]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalExposureId):\n", @@ -7087,9 +7854,6 @@ " self.has_quantitative_value = [self.has_quantitative_value] if self.has_quantitative_value is not None else []\n", " self.has_quantitative_value = [v if isinstance(v, QuantityValue) else QuantityValue(**as_dict(v)) for v in self.has_quantitative_value]\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7099,11 +7863,11 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ComplexChemicalExposure(Attribute):\n", + "class ComplexChemicalExposure(ExposureEvent):\n", " \"\"\"\n", - " A complex chemical exposure is an intake of a chemical mixture (e.g. gasoline), other than a drug.\n", + " A complex chemical exposure is an intake of a chemical mixture, other than a drug.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ComplexChemicalExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ComplexChemicalExposure\"\n", @@ -7111,10 +7875,9 @@ " class_model_uri: ClassVar[URIRef] = DIST.ComplexChemicalExposure\n", "\n", " id: Union[str, ComplexChemicalExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ComplexChemicalExposureId):\n", @@ -7133,7 +7896,7 @@ " \"\"\"\n", " A drug exposure is an intake of a particular drug.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DrugExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DrugExposure\"\n", @@ -7141,19 +7904,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.DrugExposure\n", "\n", " id: Union[str, DrugExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DrugExposureId):\n", " self.id = DrugExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7168,7 +7926,7 @@ " drug to gene interaction exposure is a drug exposure is where the interactions of the drug with specific genes are\n", " known to constitute an 'exposure' to the organism, leading to or influencing an outcome.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DrugToGeneInteractionExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DrugToGeneInteractionExposure\"\n", @@ -7176,11 +7934,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.DrugToGeneInteractionExposure\n", "\n", " id: Union[str, DrugToGeneInteractionExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]] = empty_list()\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_gene_or_gene_product: Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DrugToGeneInteractionExposureId):\n", @@ -7199,12 +7956,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class Treatment(NamedThing):\n", + "class Treatment(ExposureEvent):\n", " \"\"\"\n", " A treatment is targeted at a disease or phenotype and may involve multiple drug 'exposures', medical devices\n", " and/or procedures\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Treatment\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Treatment\"\n", @@ -7212,13 +7969,12 @@ " class_model_uri: ClassVar[URIRef] = DIST.Treatment\n", "\n", " id: Union[str, TreatmentId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_drug: Optional[Union[Union[str, DrugId], List[Union[str, DrugId]]]] = empty_list()\n", - " has_device: Optional[Union[Union[str, DeviceId], List[Union[str, DeviceId]]]] = empty_list()\n", - " has_procedure: Optional[Union[Union[str, ProcedureId], List[Union[str, ProcedureId]]]] = empty_list()\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_drug: Optional[Union[Union[str, DrugId], list[Union[str, DrugId]]]] = empty_list()\n", + " has_device: Optional[Union[Union[str, DeviceId], list[Union[str, DeviceId]]]] = empty_list()\n", + " has_procedure: Optional[Union[Union[str, ProcedureId], list[Union[str, ProcedureId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, TreatmentId):\n", @@ -7236,9 +7992,6 @@ " self.has_procedure = [self.has_procedure] if self.has_procedure is not None else []\n", " self.has_procedure = [v if isinstance(v, ProcedureId) else ProcedureId(v) for v in self.has_procedure]\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7248,11 +8001,11 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class BioticExposure(Attribute):\n", + "class BioticExposure(ExposureEvent):\n", " \"\"\"\n", " An external biotic exposure is an intake of (sometimes pathological) biological organisms (including viruses).\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BioticExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BioticExposure\"\n", @@ -7260,19 +8013,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.BioticExposure\n", "\n", " id: Union[str, BioticExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BioticExposureId):\n", " self.id = BioticExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7282,12 +8030,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class EnvironmentalExposure(Attribute):\n", + "class EnvironmentalExposure(ExposureEvent):\n", " \"\"\"\n", " A environmental exposure is a factor relating to abiotic processes in the environment including sunlight (UV-B),\n", " atmospheric (heat, cold, general pollution) and water-born contaminants.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EnvironmentalExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EnvironmentalExposure\"\n", @@ -7295,19 +8043,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.EnvironmentalExposure\n", "\n", " id: Union[str, EnvironmentalExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EnvironmentalExposureId):\n", " self.id = EnvironmentalExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7321,7 +8064,7 @@ " \"\"\"\n", " A geographic exposure is a factor relating to geographic proximity to some impactful entity.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeographicExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeographicExposure\"\n", @@ -7329,19 +8072,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeographicExposure\n", "\n", " id: Union[str, GeographicExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeographicExposureId):\n", " self.id = GeographicExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7351,11 +8089,11 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class BehavioralExposure(Attribute):\n", + "class BehavioralExposure(ExposureEvent):\n", " \"\"\"\n", " A behavioral exposure is a factor relating to behavior impacting an individual.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BehavioralExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BehavioralExposure\"\n", @@ -7363,19 +8101,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.BehavioralExposure\n", "\n", " id: Union[str, BehavioralExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BehavioralExposureId):\n", " self.id = BehavioralExposureId(self.id)\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7385,12 +8118,11 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class SocioeconomicExposure(Attribute):\n", + "class SocioeconomicExposure(ExposureEvent):\n", " \"\"\"\n", - " A socioeconomic exposure is a factor relating to social and financial status of an affected individual (e.g.\n", - " poverty).\n", + " A socioeconomic exposure is a factor relating to social and financial status of an affected individual.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SocioeconomicExposure\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SocioeconomicExposure\"\n", @@ -7398,12 +8130,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.SocioeconomicExposure\n", "\n", " id: Union[str, SocioeconomicExposureId] = None\n", - " category: Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]] = None\n", - " has_attribute_type: Union[str, OntologyClassId] = None\n", - " has_attribute: Union[Union[str, SocioeconomicAttributeId], List[Union[str, SocioeconomicAttributeId]]] = None\n", - " timepoint: Optional[Union[str, TimeType]] = None\n", + " category: Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] = None\n", + " has_attribute: Union[Union[str, SocioeconomicAttributeId], list[Union[str, SocioeconomicAttributeId]]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SocioeconomicExposureId):\n", @@ -7415,9 +8145,6 @@ " self.has_attribute = [self.has_attribute] if self.has_attribute is not None else []\n", " self.has_attribute = [v if isinstance(v, SocioeconomicAttributeId) else SocioeconomicAttributeId(v) for v in self.has_attribute]\n", "\n", - " if self.timepoint is not None and not isinstance(self.timepoint, TimeType):\n", - " self.timepoint = TimeType(self.timepoint)\n", - "\n", " super().__post_init__(**kwargs)\n", " if self._is_empty(self.category):\n", " self.MissingRequiredField(\"category\")\n", @@ -7429,9 +8156,9 @@ "class Outcome(YAMLRoot):\n", " \"\"\"\n", " An entity that has the role of being the consequence of an exposure event. This is an abstract mixin grouping of\n", - " various categories of possible biological or non-biological (e.g. clinical) outcomes.\n", + " various categories of possible biological or non-biological outcomes.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Outcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Outcome\"\n", @@ -7443,7 +8170,7 @@ " \"\"\"\n", " An outcome resulting from an exposure event which is the manifestation of a pathological process.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalProcessOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalProcessOutcome\"\n", @@ -7455,7 +8182,7 @@ " \"\"\"\n", " An outcome resulting from an exposure event which is the manifestation of an abnormal anatomical structure.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PathologicalAnatomicalOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PathologicalAnatomicalOutcome\"\n", @@ -7468,7 +8195,7 @@ " Physiological outcomes resulting from an exposure event which is the manifestation of a disease or other\n", " characteristic phenotype.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseOrPhenotypicFeatureOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseOrPhenotypicFeatureOutcome\"\n", @@ -7480,7 +8207,7 @@ " \"\"\"\n", " An outcome resulting from an exposure event which is the manifestation of human behavior.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BehavioralOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BehavioralOutcome\"\n", @@ -7493,7 +8220,7 @@ " An outcome resulting from an exposure event which is the increased manifestation of acute (e.g. emergency room\n", " visit) or chronic (inpatient) hospitalization.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"HospitalizationOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:HospitalizationOutcome\"\n", @@ -7505,7 +8232,7 @@ " \"\"\"\n", " An outcome of death from resulting from an exposure event.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MortalityOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MortalityOutcome\"\n", @@ -7517,7 +8244,7 @@ " \"\"\"\n", " An epidemiological outcome, such as societal disease burden, resulting from an exposure event.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EpidemiologicalOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EpidemiologicalOutcome\"\n", @@ -7530,7 +8257,7 @@ " An general social or economic outcome, such as healthcare costs, utilization, etc., resulting from an exposure\n", " event\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SocioeconomicOutcome\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SocioeconomicOutcome\"\n", @@ -7543,7 +8270,7 @@ " \"\"\"\n", " A typed association between two entities, supported by evidence\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"Association\"]\n", " class_class_curie: ClassVar[str] = \"biolink:Association\"\n", @@ -7552,40 +8279,50 @@ "\n", " id: Union[str, AssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " negated: Optional[Union[bool, Bool]] = None\n", " qualifier: Optional[str] = None\n", - " qualifiers: Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]] = empty_list()\n", - " publications: Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]] = empty_list()\n", - " has_evidence: Optional[Union[Union[str, EvidenceTypeId], List[Union[str, EvidenceTypeId]]]] = empty_list()\n", + " qualifiers: Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]] = empty_list()\n", + " publications: Optional[Union[Union[str, PublicationId], list[Union[str, PublicationId]]]] = empty_list()\n", + " sources: Optional[Union[dict[Union[str, RetrievalSourceId], Union[dict, RetrievalSource]], list[Union[dict, RetrievalSource]]]] = empty_dict()\n", + " has_evidence_of_type: Optional[Union[Union[str, EvidenceTypeId], list[Union[str, EvidenceTypeId]]]] = empty_list()\n", + " has_evidence: Optional[Union[Union[str, InformationContentEntityId], list[Union[str, InformationContentEntityId]]]] = empty_list()\n", " knowledge_source: Optional[str] = None\n", " primary_knowledge_source: Optional[str] = None\n", - " aggregator_knowledge_source: Optional[Union[str, List[str]]] = empty_list()\n", + " aggregator_knowledge_source: Optional[Union[str, list[str]]] = empty_list()\n", " timepoint: Optional[Union[str, TimeType]] = None\n", " original_subject: Optional[str] = None\n", " original_predicate: Optional[Union[str, URIorCURIE]] = None\n", " original_object: Optional[str] = None\n", + " subject_feature_name: Optional[str] = None\n", + " object_feature_name: Optional[str] = None\n", " subject_category: Optional[Union[str, OntologyClassId]] = None\n", " object_category: Optional[Union[str, OntologyClassId]] = None\n", - " subject_closure: Optional[Union[str, List[str]]] = empty_list()\n", - " object_closure: Optional[Union[str, List[str]]] = empty_list()\n", - " subject_category_closure: Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]] = empty_list()\n", - " object_category_closure: Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]] = empty_list()\n", + " subject_closure: Optional[Union[str, list[str]]] = empty_list()\n", + " object_closure: Optional[Union[str, list[str]]] = empty_list()\n", + " subject_category_closure: Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]] = empty_list()\n", + " object_category_closure: Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]] = empty_list()\n", " subject_namespace: Optional[str] = None\n", " object_namespace: Optional[str] = None\n", - " subject_label_closure: Optional[Union[str, List[str]]] = empty_list()\n", - " object_label_closure: Optional[Union[str, List[str]]] = empty_list()\n", - " retrieval_source_ids: Optional[Union[Union[str, RetrievalSourceId], List[Union[str, RetrievalSourceId]]]] = empty_list()\n", + " subject_label_closure: Optional[Union[str, list[str]]] = empty_list()\n", + " object_label_closure: Optional[Union[str, list[str]]] = empty_list()\n", + " retrieval_source_ids: Optional[Union[Union[str, RetrievalSourceId], list[Union[str, RetrievalSourceId]]]] = empty_list()\n", " p_value: Optional[float] = None\n", " adjusted_p_value: Optional[float] = None\n", - " has_supporting_studies: Optional[Union[Union[str, StudyId], List[Union[str, StudyId]]]] = empty_list()\n", - " type: Optional[Union[str, List[str]]] = empty_list()\n", - " category: Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]] = empty_list()\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " supporting_text: Optional[Union[str, list[str]]] = empty_list()\n", + " has_supporting_studies: Optional[Union[dict[Union[str, StudyId], Union[dict, Study]], list[Union[dict, Study]]]] = empty_dict()\n", + " update_date: Optional[Union[str, XSDDate]] = None\n", + " has_confidence_score: Optional[float] = None\n", + " elevate_to_prediction: Optional[Union[bool, Bool]] = None\n", + " evidence_count: Optional[int] = None\n", + " semmed_agreement_count: Optional[int] = None\n", + " type: Optional[Union[str, list[str]]] = empty_list()\n", + " category: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, AssociationId):\n", @@ -7598,8 +8335,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -7630,9 +8367,15 @@ " self.publications = [self.publications] if self.publications is not None else []\n", " self.publications = [v if isinstance(v, PublicationId) else PublicationId(v) for v in self.publications]\n", "\n", + " self._normalize_inlined_as_list(slot_name=\"sources\", slot_type=RetrievalSource, key_name=\"id\", keyed=True)\n", + "\n", + " if not isinstance(self.has_evidence_of_type, list):\n", + " self.has_evidence_of_type = [self.has_evidence_of_type] if self.has_evidence_of_type is not None else []\n", + " self.has_evidence_of_type = [v if isinstance(v, EvidenceTypeId) else EvidenceTypeId(v) for v in self.has_evidence_of_type]\n", + "\n", " if not isinstance(self.has_evidence, list):\n", " self.has_evidence = [self.has_evidence] if self.has_evidence is not None else []\n", - " self.has_evidence = [v if isinstance(v, EvidenceTypeId) else EvidenceTypeId(v) for v in self.has_evidence]\n", + " self.has_evidence = [v if isinstance(v, InformationContentEntityId) else InformationContentEntityId(v) for v in self.has_evidence]\n", "\n", " if self.knowledge_source is not None and not isinstance(self.knowledge_source, str):\n", " self.knowledge_source = str(self.knowledge_source)\n", @@ -7656,6 +8399,12 @@ " if self.original_object is not None and not isinstance(self.original_object, str):\n", " self.original_object = str(self.original_object)\n", "\n", + " if self.subject_feature_name is not None and not isinstance(self.subject_feature_name, str):\n", + " self.subject_feature_name = str(self.subject_feature_name)\n", + "\n", + " if self.object_feature_name is not None and not isinstance(self.object_feature_name, str):\n", + " self.object_feature_name = str(self.object_feature_name)\n", + "\n", " if self.subject_category is not None and not isinstance(self.subject_category, OntologyClassId):\n", " self.subject_category = OntologyClassId(self.subject_category)\n", "\n", @@ -7702,9 +8451,26 @@ " if self.adjusted_p_value is not None and not isinstance(self.adjusted_p_value, float):\n", " self.adjusted_p_value = float(self.adjusted_p_value)\n", "\n", - " if not isinstance(self.has_supporting_studies, list):\n", - " self.has_supporting_studies = [self.has_supporting_studies] if self.has_supporting_studies is not None else []\n", - " self.has_supporting_studies = [v if isinstance(v, StudyId) else StudyId(v) for v in self.has_supporting_studies]\n", + " if not isinstance(self.supporting_text, list):\n", + " self.supporting_text = [self.supporting_text] if self.supporting_text is not None else []\n", + " self.supporting_text = [v if isinstance(v, str) else str(v) for v in self.supporting_text]\n", + "\n", + " self._normalize_inlined_as_dict(slot_name=\"has_supporting_studies\", slot_type=Study, key_name=\"id\", keyed=True)\n", + "\n", + " if self.update_date is not None and not isinstance(self.update_date, XSDDate):\n", + " self.update_date = XSDDate(self.update_date)\n", + "\n", + " if self.has_confidence_score is not None and not isinstance(self.has_confidence_score, float):\n", + " self.has_confidence_score = float(self.has_confidence_score)\n", + "\n", + " if self.elevate_to_prediction is not None and not isinstance(self.elevate_to_prediction, Bool):\n", + " self.elevate_to_prediction = Bool(self.elevate_to_prediction)\n", + "\n", + " if self.evidence_count is not None and not isinstance(self.evidence_count, int):\n", + " self.evidence_count = int(self.evidence_count)\n", + "\n", + " if self.semmed_agreement_count is not None and not isinstance(self.semmed_agreement_count, int):\n", + " self.semmed_agreement_count = int(self.semmed_agreement_count)\n", "\n", " if not isinstance(self.type, list):\n", " self.type = [self.type] if self.type is not None else []\n", @@ -7746,8 +8512,63 @@ "\n", "\n", "@dataclass(repr=False)\n", + "class DiseaseAssociatedWithResponseToChemicalEntityAssociation(Association):\n", + " \"\"\"\n", + " A statistical association between a disease and a chemical entity where the chemical entity has a therapeutic or\n", + " adverse effect on the disease progression, symptoms or outcomes in a patient, cell line, or any model system.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseAssociatedWithResponseToChemicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:DiseaseAssociatedWithResponseToChemicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"disease associated with response to chemical entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.DiseaseAssociatedWithResponseToChemicalEntityAssociation\n", + "\n", + " id: Union[str, DiseaseAssociatedWithResponseToChemicalEntityAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, DiseaseId] = None\n", + " object: Union[str, ChemicalEntityId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " response_context_qualifier: Optional[Union[str, \"ResponseEnum\"]] = None\n", + " response_target_context_qualifier: Optional[Union[str, \"ResponseTargetEnum\"]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, DiseaseAssociatedWithResponseToChemicalEntityAssociationId):\n", + " self.id = DiseaseAssociatedWithResponseToChemicalEntityAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, DiseaseId):\n", + " self.subject = DiseaseId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, ChemicalEntityId):\n", + " self.object = ChemicalEntityId(self.object)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self.response_context_qualifier is not None and not isinstance(self.response_context_qualifier, ResponseEnum):\n", + " self.response_context_qualifier = ResponseEnum(self.response_context_qualifier)\n", + "\n", + " if self.response_target_context_qualifier is not None and not isinstance(self.response_target_context_qualifier, ResponseTargetEnum):\n", + " self.response_target_context_qualifier = ResponseTargetEnum(self.response_target_context_qualifier)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", "class ChemicalEntityAssessesNamedThingAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityAssessesNamedThingAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityAssessesNamedThingAssociation\"\n", @@ -7759,9 +8580,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ChemicalEntityId] = None\n", " object: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalEntityAssessesNamedThingAssociationId):\n", @@ -7779,8 +8600,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -7793,7 +8614,7 @@ " \"\"\"\n", " Any association between an entity (such as a publication) and various agents that contribute to its realisation\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ContributorAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ContributorAssociation\"\n", @@ -7804,11 +8625,11 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, InformationContentEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, AgentId] = None\n", - " qualifiers: Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]] = empty_list()\n", + " qualifiers: Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ContributorAssociationId):\n", @@ -7821,8 +8642,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -7844,7 +8665,7 @@ " \"\"\"\n", " Any association between one genotype and a genotypic entity that is a sub-component of it\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeToGenotypePartAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeToGenotypePartAssociation\"\n", @@ -7854,11 +8675,11 @@ " id: Union[str, GenotypeToGenotypePartAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " subject: Union[str, GenotypeId] = None\n", " object: Union[str, GenotypeId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeToGenotypePartAssociationId):\n", @@ -7866,8 +8687,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -7891,7 +8712,7 @@ " Any association between a genotype and a gene. The genotype have have multiple variants in that gene or a single\n", " one. There is no assumption of cardinality\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeToGeneAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeToGeneAssociation\"\n", @@ -7901,11 +8722,11 @@ " id: Union[str, GenotypeToGeneAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " subject: Union[str, GenotypeId] = None\n", " object: Union[str, GeneId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeToGeneAssociationId):\n", @@ -7913,8 +8734,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -7937,7 +8758,7 @@ " \"\"\"\n", " Any association between a genotype and a sequence variant.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeToVariantAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeToVariantAssociation\"\n", @@ -7947,11 +8768,11 @@ " id: Union[str, GenotypeToVariantAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " subject: Union[str, GenotypeId] = None\n", " object: Union[str, SequenceVariantId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeToVariantAssociationId):\n", @@ -7959,8 +8780,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -7981,10 +8802,10 @@ "@dataclass(repr=False)\n", "class GeneToGeneAssociation(Association):\n", " \"\"\"\n", - " abstract parent class for different kinds of gene-gene or gene product to gene product relationships. Includes\n", - " homology and interaction.\n", + " parent class for different kinds of gene-gene or gene product to gene product relationships. Includes homology and\n", + " interaction.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToGeneAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToGeneAssociation\"\n", @@ -7992,23 +8813,88 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneToGeneAssociation\n", "\n", " id: Union[str, GeneToGeneAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " causal_mechanism_qualifier: Optional[Union[str, \"CausalMechanismQualifierEnum\"]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", + " subject_activity_qualifier: Optional[Union[str, MolecularActivityId]] = None\n", + " subject_process_qualifier: Optional[Union[str, BiologicalProcessId]] = None\n", + " subject_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", + " object_activity_qualifier: Optional[Union[str, MolecularActivityId]] = None\n", + " object_process_qualifier: Optional[Union[str, BiologicalProcessId]] = None\n", + " object_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, GeneToGeneAssociationId):\n", + " self.id = GeneToGeneAssociationId(self.id)\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, GeneOrGeneProduct):\n", " self.subject = GeneOrGeneProduct(**as_dict(self.subject))\n", "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", " if not isinstance(self.object, GeneOrGeneProduct):\n", " self.object = GeneOrGeneProduct(**as_dict(self.object))\n", "\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", + "\n", + " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", + " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + "\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.causal_mechanism_qualifier is not None and not isinstance(self.causal_mechanism_qualifier, CausalMechanismQualifierEnum):\n", + " self.causal_mechanism_qualifier = CausalMechanismQualifierEnum(self.causal_mechanism_qualifier)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", + " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", + "\n", + " if self.subject_activity_qualifier is not None and not isinstance(self.subject_activity_qualifier, MolecularActivityId):\n", + " self.subject_activity_qualifier = MolecularActivityId(self.subject_activity_qualifier)\n", + "\n", + " if self.subject_process_qualifier is not None and not isinstance(self.subject_process_qualifier, BiologicalProcessId):\n", + " self.subject_process_qualifier = BiologicalProcessId(self.subject_process_qualifier)\n", + "\n", + " if self.subject_context_qualifier is not None and not isinstance(self.subject_context_qualifier, AnatomicalEntityId):\n", + " self.subject_context_qualifier = AnatomicalEntityId(self.subject_context_qualifier)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " if self.object_activity_qualifier is not None and not isinstance(self.object_activity_qualifier, MolecularActivityId):\n", + " self.object_activity_qualifier = MolecularActivityId(self.object_activity_qualifier)\n", + "\n", + " if self.object_process_qualifier is not None and not isinstance(self.object_process_qualifier, BiologicalProcessId):\n", + " self.object_process_qualifier = BiologicalProcessId(self.object_process_qualifier)\n", + "\n", + " if self.object_context_qualifier is not None and not isinstance(self.object_context_qualifier, AnatomicalEntityId):\n", + " self.object_context_qualifier = AnatomicalEntityId(self.object_context_qualifier)\n", + "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -8021,7 +8907,7 @@ " A homology association between two genes. May be orthology (in which case the species of subject and object should\n", " differ) or paralogy (in which case the species may be the same)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToGeneHomologyAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToGeneHomologyAssociation\"\n", @@ -8032,10 +8918,10 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToGeneHomologyAssociationId):\n", @@ -8048,8 +8934,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8069,7 +8955,7 @@ " comparisons. The genes in a given family generally share common sequence motifs which generally map onto shared\n", " gene product structure-function relationships.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToGeneFamilyAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToGeneFamilyAssociation\"\n", @@ -8081,9 +8967,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, GeneId] = None\n", " object: Union[str, GeneFamilyId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToGeneFamilyAssociationId):\n", @@ -8101,8 +8987,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -8111,24 +8997,211 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class GeneExpressionMixin(YAMLRoot):\n", + "class GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation(Association):\n", " \"\"\"\n", - " Observed gene expression intensity, context (site, stage) and associated phenotypic status within which the\n", - " expression occurs.\n", + " Relationship between a gene family and a contained gene or gene product or gene family.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneExpressionMixin\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:GeneExpressionMixin\"\n", - " class_name: ClassVar[str] = \"gene expression mixin\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.GeneExpressionMixin\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation\"\n", + " class_name: ClassVar[str] = \"gene family to gene or gene product or gene family association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation\n", "\n", - " quantifier_qualifier: Optional[Union[str, OntologyClassId]] = None\n", - " expression_site: Optional[Union[str, AnatomicalEntityId]] = None\n", - " stage_qualifier: Optional[Union[str, LifeStageId]] = None\n", - " phenotypic_state: Optional[Union[str, DiseaseOrPhenotypicFeatureId]] = None\n", + " id: Union[str, GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, GeneFamilyId] = None\n", + " object: Union[dict, GeneOrGeneProduct] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociationId):\n", + " self.id = GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, GeneFamilyId):\n", + " self.subject = GeneFamilyId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, GeneOrGeneProduct):\n", + " self.object = GeneOrGeneProduct(**as_dict(self.object))\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation(Association):\n", + " \"\"\"\n", + " Relationship between a gene or gene product or gene family to a specified biological process or activity (e.g.\n", + " molecular activity, biological process or pathway).\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation\"\n", + " class_name: ClassVar[str] = \"gene or gene product or gene family to biological process or activity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation\n", + "\n", + " id: Union[str, GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[dict, GeneOrGeneProductOrGeneFamily] = None\n", + " object: Union[str, BiologicalProcessOrActivityId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociationId):\n", + " self.id = GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, GeneOrGeneProductOrGeneFamily):\n", + " self.subject = GeneOrGeneProductOrGeneFamily(**as_dict(self.subject))\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, BiologicalProcessOrActivityId):\n", + " self.object = BiologicalProcessOrActivityId(self.object)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation(Association):\n", + " \"\"\"\n", + " Relationship between a biological processor activity (e.g. molecular activity, biological process or pathway) to\n", + " gene or gene product or gene family.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation\"\n", + " class_name: ClassVar[str] = \"biological process or activity to gene or gene product or gene family association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation\n", + "\n", + " id: Union[str, BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, BiologicalProcessOrActivityId] = None\n", + " object: Union[dict, GeneOrGeneProductOrGeneFamily] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociationId):\n", + " self.id = BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, BiologicalProcessOrActivityId):\n", + " self.subject = BiologicalProcessOrActivityId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, GeneOrGeneProductOrGeneFamily):\n", + " self.object = GeneOrGeneProductOrGeneFamily(**as_dict(self.object))\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation(Association):\n", + " \"\"\"\n", + " Classification relationship between biological processes or activities (e.g. coupling of two molecular activities;\n", + " assignment of molecular activity to a pathway; implicating a pathway in a biological process; etc.)\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation\"\n", + " class_name: ClassVar[str] = \"biological process or activity to biological process or activity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation\n", + "\n", + " id: Union[str, BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, BiologicalProcessOrActivityId] = None\n", + " object: Union[str, BiologicalProcessOrActivityId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociationId):\n", + " self.id = BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, BiologicalProcessOrActivityId):\n", + " self.subject = BiologicalProcessOrActivityId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, BiologicalProcessOrActivityId):\n", + " self.object = BiologicalProcessOrActivityId(self.object)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class GeneExpressionMixin(YAMLRoot):\n", + " \"\"\"\n", + " Observed gene expression intensity, context (site, stage) and associated phenotypic status within which the\n", + " expression occurs.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneExpressionMixin\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:GeneExpressionMixin\"\n", + " class_name: ClassVar[str] = \"gene expression mixin\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.GeneExpressionMixin\n", + "\n", + " quantifier_qualifier: Optional[Union[str, OntologyClassId]] = None\n", + " expression_site: Optional[Union[str, AnatomicalEntityId]] = None\n", + " stage_qualifier: Optional[Union[str, LifeStageId]] = None\n", + " phenotypic_state: Optional[Union[str, DiseaseOrPhenotypicFeatureId]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self.quantifier_qualifier is not None and not isinstance(self.quantifier_qualifier, OntologyClassId):\n", " self.quantifier_qualifier = OntologyClassId(self.quantifier_qualifier)\n", "\n", @@ -8149,7 +9222,7 @@ " \"\"\"\n", " Indicates that two genes are co-expressed, generally under the same conditions.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToGeneCoexpressionAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToGeneCoexpressionAssociation\"\n", @@ -8161,13 +9234,13 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " quantifier_qualifier: Optional[Union[str, OntologyClassId]] = None\n", " expression_site: Optional[Union[str, AnatomicalEntityId]] = None\n", " stage_qualifier: Optional[Union[str, LifeStageId]] = None\n", " phenotypic_state: Optional[Union[str, DiseaseOrPhenotypicFeatureId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToGeneCoexpressionAssociationId):\n", @@ -8175,8 +9248,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.quantifier_qualifier is not None and not isinstance(self.quantifier_qualifier, OntologyClassId):\n", " self.quantifier_qualifier = OntologyClassId(self.quantifier_qualifier)\n", @@ -8202,7 +9275,7 @@ " An interaction between two genes or two gene products. May be physical (e.g. protein binding) or genetic (between\n", " genes). May be symmetric (e.g. protein interaction) or directed (e.g. phosphorylation)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PairwiseGeneToGeneInteraction\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PairwiseGeneToGeneInteraction\"\n", @@ -8214,9 +9287,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PairwiseGeneToGeneInteractionId):\n", @@ -8224,8 +9297,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -8238,7 +9311,7 @@ " \"\"\"\n", " An interaction at the molecular level between two physical entities\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PairwiseMolecularInteraction\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PairwiseMolecularInteraction\"\n", @@ -8249,11 +9322,11 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, MolecularEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, MolecularEntityId] = None\n", " interacting_molecules_category: Optional[Union[str, OntologyClassId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PairwiseMolecularInteractionId):\n", @@ -8266,8 +9339,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8288,7 +9361,7 @@ " \"\"\"\n", " An relationship between a cell line and another entity\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CellLineToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CellLineToEntityAssociationMixin\"\n", @@ -8296,10 +9369,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.CellLineToEntityAssociationMixin\n", "\n", " subject: Union[str, CellLineId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, CellLineId):\n", @@ -8307,8 +9380,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8324,7 +9397,7 @@ " An relationship between a cell line and a disease or a phenotype, where the cell line is derived from an\n", " individual with that disease or phenotype.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CellLineToDiseaseOrPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CellLineToDiseaseOrPhenotypicFeatureAssociation\"\n", @@ -8332,7 +9405,7 @@ " class_model_uri: ClassVar[URIRef] = DIST.CellLineToDiseaseOrPhenotypicFeatureAssociation\n", "\n", " id: Union[str, CellLineToDiseaseOrPhenotypicFeatureAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", @@ -8340,9 +9413,9 @@ " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CellLineToDiseaseOrPhenotypicFeatureAssociationId):\n", @@ -8350,8 +9423,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8372,8 +9445,9 @@ " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -8386,7 +9460,7 @@ " \"\"\"\n", " An interaction between a chemical entity and another entity\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityToEntityAssociationMixin\"\n", @@ -8394,10 +9468,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntityToEntityAssociationMixin\n", "\n", " subject: Union[dict, ChemicalEntityOrGeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, ChemicalEntityOrGeneOrGeneProduct):\n", @@ -8405,8 +9479,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8421,7 +9495,7 @@ " \"\"\"\n", " An interaction between a drug and another entity\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DrugToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DrugToEntityAssociationMixin\"\n", @@ -8429,10 +9503,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.DrugToEntityAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -8440,8 +9514,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8461,7 +9535,7 @@ " \"\"\"\n", " An interaction between a chemical entity and another entity\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalToEntityAssociationMixin\"\n", @@ -8469,10 +9543,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ChemicalToEntityAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -8480,8 +9554,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8501,7 +9575,7 @@ " \"\"\"\n", " An abstract association for use where the case is the subject\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CaseToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CaseToEntityAssociationMixin\"\n", @@ -8509,10 +9583,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.CaseToEntityAssociationMixin\n", "\n", " subject: Union[str, CaseId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, CaseId):\n", @@ -8520,8 +9594,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -8532,30 +9606,31 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalToChemicalAssociation(Association):\n", + "class ChemicalEntityToChemicalEntityAssociation(Association):\n", " \"\"\"\n", " A relationship between two chemical entities. This can encompass actual interactions as well as temporal causal\n", " edges, e.g. one chemical converted to another.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalToChemicalAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChemicalToChemicalAssociation\"\n", - " class_name: ClassVar[str] = \"chemical to chemical association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChemicalToChemicalAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityToChemicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityToChemicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"chemical entity to chemical entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntityToChemicalEntityAssociation\n", "\n", - " id: Union[str, ChemicalToChemicalAssociationId] = None\n", + " id: Union[str, ChemicalEntityToChemicalEntityAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, ChemicalEntityId] = None\n", + " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChemicalToChemicalAssociationId):\n", - " self.id = ChemicalToChemicalAssociationId(self.id)\n", + " if not isinstance(self.id, ChemicalEntityToChemicalEntityAssociationId):\n", + " self.id = ChemicalEntityToChemicalEntityAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -8564,14 +9639,17 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", " if not isinstance(self.object, ChemicalEntityId):\n", " self.object = ChemicalEntityId(self.object)\n", "\n", + " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", + " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", + "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -8579,8 +9657,13 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ReactionToParticipantAssociation(ChemicalToChemicalAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class ReactionToParticipantAssociation(ChemicalEntityToChemicalEntityAssociation):\n", + " \"\"\"\n", + " An association between a biochemical reaction and a participating molecular entity, qualified by the\n", + " stoichiometry, the side (reactant vs. product) on which the participant appears, and the direction of the\n", + " reaction.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ReactionToParticipantAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ReactionToParticipantAssociation\"\n", @@ -8590,14 +9673,14 @@ " id: Union[str, ReactionToParticipantAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, ChemicalEntityId] = None\n", " subject: Union[str, MolecularEntityId] = None\n", " stoichiometry: Optional[int] = None\n", " reaction_direction: Optional[Union[str, \"ReactionDirectionEnum\"]] = None\n", " reaction_side: Optional[Union[str, \"ReactionSideEnum\"]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ReactionToParticipantAssociationId):\n", @@ -8625,7 +9708,11 @@ "\n", "@dataclass(repr=False)\n", "class ReactionToCatalystAssociation(ReactionToParticipantAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A specialization of reaction-to-participant association in which the participant is a gene or gene product (e.g.,\n", + " an enzyme) that catalyses the reaction.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ReactionToCatalystAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ReactionToCatalystAssociation\"\n", @@ -8635,11 +9722,11 @@ " id: Union[str, ReactionToCatalystAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " subject: Union[str, MolecularEntityId] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ReactionToCatalystAssociationId):\n", @@ -8657,32 +9744,32 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalToChemicalDerivationAssociation(ChemicalToChemicalAssociation):\n", + "class ChemicalEntityToChemicalDerivationAssociation(ChemicalEntityToChemicalEntityAssociation):\n", " \"\"\"\n", " A causal relationship between two chemical entities, where the subject represents the upstream entity and the\n", " object represents the downstream. For any such association there is an implicit reaction: IF R has-input C1 AND R\n", " has-output C2 AND R enabled-by P AND R type Reaction THEN C1 derives-into C2 catalyst qualifier P\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalToChemicalDerivationAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChemicalToChemicalDerivationAssociation\"\n", - " class_name: ClassVar[str] = \"chemical to chemical derivation association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChemicalToChemicalDerivationAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityToChemicalDerivationAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityToChemicalDerivationAssociation\"\n", + " class_name: ClassVar[str] = \"chemical entity to chemical derivation association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntityToChemicalDerivationAssociation\n", "\n", - " id: Union[str, ChemicalToChemicalDerivationAssociationId] = None\n", + " id: Union[str, ChemicalEntityToChemicalDerivationAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ChemicalEntityId] = None\n", " object: Union[str, ChemicalEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", - " catalyst_qualifier: Optional[Union[Union[dict, MacromolecularMachineMixin], List[Union[dict, MacromolecularMachineMixin]]]] = empty_list()\n", + " predicate: Union[str, URIorCURIE] = None\n", + " catalyst_qualifier: Optional[Union[Union[dict, MacromolecularMachineMixin], list[Union[dict, MacromolecularMachineMixin]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChemicalToChemicalDerivationAssociationId):\n", - " self.id = ChemicalToChemicalDerivationAssociationId(self.id)\n", + " if not isinstance(self.id, ChemicalEntityToChemicalDerivationAssociationId):\n", + " self.id = ChemicalEntityToChemicalDerivationAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -8696,8 +9783,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if not isinstance(self.catalyst_qualifier, list):\n", " self.catalyst_qualifier = [self.catalyst_qualifier] if self.catalyst_qualifier is not None else []\n", @@ -8710,34 +9797,36 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalToDiseaseOrPhenotypicFeatureAssociation(Association):\n", + "class ChemicalEntityToDiseaseOrPhenotypicFeatureAssociation(Association):\n", " \"\"\"\n", " An interaction between a chemical entity and a phenotype or disease, where the presence of the chemical gives rise\n", " to or exacerbates the phenotype.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalToDiseaseOrPhenotypicFeatureAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChemicalToDiseaseOrPhenotypicFeatureAssociation\"\n", - " class_name: ClassVar[str] = \"chemical to disease or phenotypic feature association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChemicalToDiseaseOrPhenotypicFeatureAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityToDiseaseOrPhenotypicFeatureAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityToDiseaseOrPhenotypicFeatureAssociation\"\n", + " class_name: ClassVar[str] = \"chemical entity to disease or phenotypic feature association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntityToDiseaseOrPhenotypicFeatureAssociation\n", "\n", - " id: Union[str, ChemicalToDiseaseOrPhenotypicFeatureAssociationId] = None\n", + " id: Union[str, ChemicalEntityToDiseaseOrPhenotypicFeatureAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object: Union[str, DiseaseOrPhenotypicFeatureId] = None\n", + " clinical_approval_status: Optional[Union[str, \"ClinicalApprovalStatusEnum\"]] = None\n", + " max_research_phase: Optional[Union[str, \"ResearchPhaseEnum\"]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChemicalToDiseaseOrPhenotypicFeatureAssociationId):\n", - " self.id = ChemicalToDiseaseOrPhenotypicFeatureAssociationId(self.id)\n", + " if not isinstance(self.id, ChemicalEntityToDiseaseOrPhenotypicFeatureAssociationId):\n", + " self.id = ChemicalEntityToDiseaseOrPhenotypicFeatureAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -8746,14 +9835,20 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", " if not isinstance(self.object, DiseaseOrPhenotypicFeatureId):\n", " self.object = DiseaseOrPhenotypicFeatureId(self.object)\n", "\n", + " if self.clinical_approval_status is not None and not isinstance(self.clinical_approval_status, ClinicalApprovalStatusEnum):\n", + " self.clinical_approval_status = ClinicalApprovalStatusEnum(self.clinical_approval_status)\n", + "\n", + " if self.max_research_phase is not None and not isinstance(self.max_research_phase, ResearchPhaseEnum):\n", + " self.max_research_phase = ResearchPhaseEnum(self.max_research_phase)\n", + "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", "\n", @@ -8763,8 +9858,9 @@ " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -8776,9 +9872,10 @@ "class ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation(Association):\n", " \"\"\"\n", " This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic\n", - " feature where the disease or phenotypic feature is a secondary undesirable effect.\n", + " feature where the chemical or treatment is used to treat, or is being studied to treat, the disease or phenotypic\n", + " feature.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation\"\n", @@ -8790,20 +9887,19 @@ " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", - " FDA_adverse_event_level: Optional[Union[str, \"FDAIDAAdverseEventEnum\"]] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociationId):\n", @@ -8821,8 +9917,98 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", + " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", + "\n", + " if self.subject_specialization_qualifier is not None and not isinstance(self.subject_specialization_qualifier, URIorCURIE):\n", + " self.subject_specialization_qualifier = URIorCURIE(self.subject_specialization_qualifier)\n", + "\n", + " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", + " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", + "\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", + "\n", + " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", + " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", + "\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", + "\n", + " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", + " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + "\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class ChemicalOrDrugOrTreatmentAdverseEventAssociation(Association):\n", + " \"\"\"\n", + " This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic\n", + " feature where the disease or phenotypic feature is an untoward medical occurrence that happens during treatment,\n", + " whether or not considered related to the treatment.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalOrDrugOrTreatmentAdverseEventAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalOrDrugOrTreatmentAdverseEventAssociation\"\n", + " class_name: ClassVar[str] = \"chemical or drug or treatment adverse event association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalOrDrugOrTreatmentAdverseEventAssociation\n", + "\n", + " id: Union[str, ChemicalOrDrugOrTreatmentAdverseEventAssociationId] = None\n", + " subject: Union[str, NamedThingId] = None\n", + " object: Union[str, NamedThingId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " FDA_adverse_event_level: Optional[Union[str, \"FDAIDAAdverseEventEnum\"]] = None\n", + " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", + " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", + " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", + " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, ChemicalOrDrugOrTreatmentAdverseEventAssociationId):\n", + " self.id = ChemicalOrDrugOrTreatmentAdverseEventAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, NamedThingId):\n", + " self.subject = NamedThingId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, NamedThingId):\n", + " self.object = NamedThingId(self.object)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.FDA_adverse_event_level is not None and not isinstance(self.FDA_adverse_event_level, FDAIDAAdverseEventEnum):\n", " self.FDA_adverse_event_level = FDAIDAAdverseEventEnum(self.FDA_adverse_event_level)\n", @@ -8836,26 +10022,27 @@ " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -8864,34 +10051,41 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation(ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation):\n", + "class ChemicalOrDrugOrTreatmentSideEffectAssociation(Association):\n", " \"\"\"\n", " This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic\n", - " feature where the disesae or phenotypic feature is a secondary, typically (but not always) undesirable effect.\n", + " feature where the disease or phenotypic feature is an unintended, but predictable, secondary effect of the\n", + " treatment.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation\"\n", - " class_name: ClassVar[str] = \"chemical or drug or treatment side effect disease or phenotypic feature association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalOrDrugOrTreatmentSideEffectAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalOrDrugOrTreatmentSideEffectAssociation\"\n", + " class_name: ClassVar[str] = \"chemical or drug or treatment side effect association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalOrDrugOrTreatmentSideEffectAssociation\n", "\n", - " id: Union[str, ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociationId] = None\n", + " id: Union[str, ChemicalOrDrugOrTreatmentSideEffectAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", + " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociationId):\n", - " self.id = ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociationId(self.id)\n", + " if not isinstance(self.id, ChemicalOrDrugOrTreatmentSideEffectAssociationId):\n", + " self.id = ChemicalOrDrugOrTreatmentSideEffectAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -8905,8 +10099,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -8917,8 +10111,27 @@ " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", + "\n", + " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", + " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", + "\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", + "\n", + " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", + " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + "\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -8931,7 +10144,7 @@ " \"\"\"\n", " An interaction between a gene or gene product and a biological process or pathway.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToPathwayAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToPathwayAssociation\"\n", @@ -8939,13 +10152,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneToPathwayAssociation\n", "\n", " id: Union[str, GeneToPathwayAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[str, PathwayId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToPathwayAssociationId):\n", @@ -8953,8 +10166,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -8977,7 +10190,7 @@ " \"\"\"\n", " Association that holds the relationship between a reaction and the pathway it participates in.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MolecularActivityToPathwayAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MolecularActivityToPathwayAssociation\"\n", @@ -8989,9 +10202,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, MolecularActivityId] = None\n", " object: Union[str, PathwayId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MolecularActivityToPathwayAssociationId):\n", @@ -9009,8 +10222,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -9019,34 +10232,29 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalToPathwayAssociation(Association):\n", + "class ChemicalEntityToPathwayAssociation(Association):\n", " \"\"\"\n", " An interaction between a chemical entity and a biological process or pathway.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalToPathwayAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChemicalToPathwayAssociation\"\n", - " class_name: ClassVar[str] = \"chemical to pathway association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChemicalToPathwayAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityToPathwayAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityToPathwayAssociation\"\n", + " class_name: ClassVar[str] = \"chemical entity to pathway association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntityToPathwayAssociation\n", "\n", - " id: Union[str, ChemicalToPathwayAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " id: Union[str, ChemicalEntityToPathwayAssociationId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ChemicalEntityId] = None\n", " object: Union[str, PathwayId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChemicalToPathwayAssociationId):\n", - " self.id = ChemicalToPathwayAssociationId(self.id)\n", - "\n", - " if self._is_empty(self.predicate):\n", - " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.id, ChemicalEntityToPathwayAssociationId):\n", + " self.id = ChemicalEntityToPathwayAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -9065,55 +10273,124 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class NamedThingAssociatedWithLikelihoodOfNamedThingAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class ChemicalEntityToBiologicalProcessAssociation(Association):\n", + " \"\"\"\n", + " An association between a chemical entity and a biological process, where the chemical entity has some effect on\n", + " the biological process.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NamedThingAssociatedWithLikelihoodOfNamedThingAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:NamedThingAssociatedWithLikelihoodOfNamedThingAssociation\"\n", - " class_name: ClassVar[str] = \"named thing associated with likelihood of named thing association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.NamedThingAssociatedWithLikelihoodOfNamedThingAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityToBiologicalProcessAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityToBiologicalProcessAssociation\"\n", + " class_name: ClassVar[str] = \"chemical entity to biological process association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalEntityToBiologicalProcessAssociation\n", "\n", - " id: Union[str, NamedThingAssociatedWithLikelihoodOfNamedThingAssociationId] = None\n", + " id: Union[str, ChemicalEntityToBiologicalProcessAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", - " object: Union[str, NamedThingId] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", - " subject_context_qualifier: Optional[Union[str, OntologyClassId]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " object_context_qualifier: Optional[Union[str, OntologyClassId]] = None\n", - " population_context_qualifier: Optional[Union[str, PopulationOfIndividualOrganismsId]] = None\n", + " subject: Union[str, ChemicalEntityId] = None\n", + " object: Union[str, BiologicalProcessId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, NamedThingAssociatedWithLikelihoodOfNamedThingAssociationId):\n", - " self.id = NamedThingAssociatedWithLikelihoodOfNamedThingAssociationId(self.id)\n", + " if not isinstance(self.id, ChemicalEntityToBiologicalProcessAssociationId):\n", + " self.id = ChemicalEntityToBiologicalProcessAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", - " if not isinstance(self.subject, NamedThingId):\n", - " self.subject = NamedThingId(self.subject)\n", - "\n", - " if self._is_empty(self.predicate):\n", - " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.subject, ChemicalEntityId):\n", + " self.subject = ChemicalEntityId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, BiologicalProcessId):\n", + " self.object = BiologicalProcessId(self.object)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", + " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", + "\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class NamedThingAssociatedWithLikelihoodOfNamedThingAssociation(Association):\n", + " \"\"\"\n", + " An association in which the subject entity is linked to the likelihood of the object entity occurring,\n", + " manifesting, or being observed. Subject and object may each be qualified by aspect and context, and the\n", + " association may be further qualified by a population context.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"NamedThingAssociatedWithLikelihoodOfNamedThingAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:NamedThingAssociatedWithLikelihoodOfNamedThingAssociation\"\n", + " class_name: ClassVar[str] = \"named thing associated with likelihood of named thing association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.NamedThingAssociatedWithLikelihoodOfNamedThingAssociation\n", + "\n", + " id: Union[str, NamedThingAssociatedWithLikelihoodOfNamedThingAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, NamedThingId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, NamedThingId] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " subject_context_qualifier: Optional[Union[str, OntologyClassId]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_context_qualifier: Optional[Union[str, OntologyClassId]] = None\n", + " population_context_qualifier: Optional[Union[str, PopulationOfIndividualOrganismsId]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, NamedThingAssociatedWithLikelihoodOfNamedThingAssociationId):\n", + " self.id = NamedThingAssociatedWithLikelihoodOfNamedThingAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, NamedThingId):\n", + " self.subject = NamedThingId(self.subject)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", " if not isinstance(self.object, NamedThingId):\n", " self.object = NamedThingId(self.object)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_context_qualifier is not None and not isinstance(self.subject_context_qualifier, OntologyClassId):\n", " self.subject_context_qualifier = OntologyClassId(self.subject_context_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_context_qualifier is not None and not isinstance(self.object_context_qualifier, OntologyClassId):\n", " self.object_context_qualifier = OntologyClassId(self.object_context_qualifier)\n", @@ -9130,11 +10407,11 @@ "@dataclass(repr=False)\n", "class ChemicalGeneInteractionAssociation(Association):\n", " \"\"\"\n", - " describes a physical interaction between a chemical entity and a gene or gene product. Any biological or chemical\n", - " effect resulting from such an interaction are out of scope, and covered by the ChemicalAffectsGeneAssociation type\n", - " (e.g. impact of a chemical on the abundance, activity, structure, etc, of either participant in the interaction)\n", + " describes an interaction between a chemical entity and a gene or gene product. Any biological or chemical effect\n", + " resulting from such an interaction are out of scope, and covered by the ChemicalAffectsGeneAssociation type (e.g.\n", + " impact of a chemical on the abundance, activity, structure, etc, of either participant in the interaction)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalGeneInteractionAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalGeneInteractionAssociation\"\n", @@ -9146,17 +10423,24 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ChemicalEntityId] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " has_affinity: Optional[Union[dict[Union[str, AffinityMeasurementId], Union[dict, AffinityMeasurement]], list[Union[dict, AffinityMeasurement]]]] = empty_dict()\n", " subject_form_or_variant_qualifier: Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]] = None\n", " subject_part_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]] = None\n", " subject_derivative_qualifier: Optional[Union[str, \"ChemicalEntityDerivativeEnum\"]] = None\n", " subject_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_form_or_variant_qualifier: Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]] = None\n", " object_part_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]] = None\n", " object_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", - " anatomical_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", + " anatomical_context_qualifier: Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]] = empty_list()\n", + " causal_mechanism_qualifier: Optional[Union[str, \"CausalMechanismQualifierEnum\"]] = None\n", + " dgidb_interaction_score: Optional[float] = None\n", + " dgidb_evidence_score: Optional[int] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalGeneInteractionAssociationId):\n", @@ -9174,8 +10458,10 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " self._normalize_inlined_as_list(slot_name=\"has_affinity\", slot_type=AffinityMeasurement, key_name=\"id\", keyed=True)\n", "\n", " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, ChemicalOrGeneOrGeneProductFormOrVariantEnum):\n", " self.subject_form_or_variant_qualifier = ChemicalOrGeneOrGeneProductFormOrVariantEnum(self.subject_form_or_variant_qualifier)\n", @@ -9189,6 +10475,15 @@ " if self.subject_context_qualifier is not None and not isinstance(self.subject_context_qualifier, AnatomicalEntityId):\n", " self.subject_context_qualifier = AnatomicalEntityId(self.subject_context_qualifier)\n", "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", + "\n", " if self.object_form_or_variant_qualifier is not None and not isinstance(self.object_form_or_variant_qualifier, ChemicalOrGeneOrGeneProductFormOrVariantEnum):\n", " self.object_form_or_variant_qualifier = ChemicalOrGeneOrGeneProductFormOrVariantEnum(self.object_form_or_variant_qualifier)\n", "\n", @@ -9198,8 +10493,65 @@ " if self.object_context_qualifier is not None and not isinstance(self.object_context_qualifier, AnatomicalEntityId):\n", " self.object_context_qualifier = AnatomicalEntityId(self.object_context_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, AnatomicalEntityId):\n", - " self.anatomical_context_qualifier = AnatomicalEntityId(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, AnatomicalEntityId) else AnatomicalEntityId(v) for v in self.anatomical_context_qualifier]\n", + "\n", + " if self.causal_mechanism_qualifier is not None and not isinstance(self.causal_mechanism_qualifier, CausalMechanismQualifierEnum):\n", + " self.causal_mechanism_qualifier = CausalMechanismQualifierEnum(self.causal_mechanism_qualifier)\n", + "\n", + " if self.dgidb_interaction_score is not None and not isinstance(self.dgidb_interaction_score, float):\n", + " self.dgidb_interaction_score = float(self.dgidb_interaction_score)\n", + "\n", + " if self.dgidb_evidence_score is not None and not isinstance(self.dgidb_evidence_score, int):\n", + " self.dgidb_evidence_score = int(self.dgidb_evidence_score)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class MacromolecularMachineHasSubstrateAssociation(Association):\n", + " \"\"\"\n", + " Describes the relationship between an enzyme (usually a macromolecular complex or gene product) and the molecules\n", + " it acts on (substrate). The substrate can be a chemical, a polypeptide, or a protein.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularMachineHasSubstrateAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:MacromolecularMachineHasSubstrateAssociation\"\n", + " class_name: ClassVar[str] = \"macromolecular machine has substrate association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.MacromolecularMachineHasSubstrateAssociation\n", + "\n", + " id: Union[str, MacromolecularMachineHasSubstrateAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[dict, MacromolecularMachineMixin] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[dict, ChemicalEntityOrProteinOrPolypeptide] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, MacromolecularMachineHasSubstrateAssociationId):\n", + " self.id = MacromolecularMachineHasSubstrateAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, MacromolecularMachineMixin):\n", + " self.subject = MacromolecularMachineMixin(**as_dict(self.subject))\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, ChemicalEntityOrProteinOrPolypeptide):\n", + " self.object = ChemicalEntityOrProteinOrPolypeptide()\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -9212,7 +10564,7 @@ " \"\"\"\n", " Describes a regulatory relationship between two genes or gene products.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneRegulatesGeneAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneRegulatesGeneAssociation\"\n", @@ -9224,13 +10576,13 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object_aspect_qualifier: Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"] = None\n", " object_direction_qualifier: Union[str, \"DirectionQualifierEnum\"] = None\n", - " qualified_predicate: str = None\n", - " subject: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", - " object: Union[dict, GeneOrGeneProduct] = None\n", + " qualified_predicate: Union[str, URIorCURIE] = None\n", + " subject: Union[dict, ChemicalEntityOrGeneOrGeneProduct] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[dict, ChemicalEntityOrGeneOrGeneProduct] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneRegulatesGeneAssociationId):\n", @@ -9248,23 +10600,23 @@ "\n", " if self._is_empty(self.qualified_predicate):\n", " self.MissingRequiredField(\"qualified_predicate\")\n", - " if not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", - " if not isinstance(self.subject, GeneOrGeneProduct):\n", - " self.subject = GeneOrGeneProduct(**as_dict(self.subject))\n", + " if not isinstance(self.subject, ChemicalEntityOrGeneOrGeneProduct):\n", + " self.subject = ChemicalEntityOrGeneOrGeneProduct()\n", "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", - " if not isinstance(self.object, GeneOrGeneProduct):\n", - " self.object = GeneOrGeneProduct(**as_dict(self.object))\n", + " if not isinstance(self.object, ChemicalEntityOrGeneOrGeneProduct):\n", + " self.object = ChemicalEntityOrGeneOrGeneProduct()\n", "\n", " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", @@ -9280,7 +10632,7 @@ " \"\"\"\n", " Describes a regulatory relationship between two genes or gene products.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ProcessRegulatesProcessAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ProcessRegulatesProcessAssociation\"\n", @@ -9291,10 +10643,10 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, BiologicalProcessId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, BiologicalProcessId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ProcessRegulatesProcessAssociationId):\n", @@ -9307,8 +10659,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9322,24 +10674,24 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class ChemicalAffectsGeneAssociation(Association):\n", + "class ChemicalAffectsBiologicalEntityAssociation(Association):\n", " \"\"\"\n", - " Describes an effect that a chemical has on a gene or gene product (e.g. an impact of on its abundance,\n", + " Describes an effect that a chemical has on a biological entity (e.g. an impact of on its abundance,\n", " activity,localization, processing, expression, etc.)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalAffectsGeneAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:ChemicalAffectsGeneAssociation\"\n", - " class_name: ClassVar[str] = \"chemical affects gene association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.ChemicalAffectsGeneAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalAffectsBiologicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalAffectsBiologicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"chemical affects biological entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalAffectsBiologicalEntityAssociation\n", "\n", - " id: Union[str, ChemicalAffectsGeneAssociationId] = None\n", + " id: Union[str, ChemicalAffectsBiologicalEntityAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ChemicalEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", - " object: Union[dict, GeneOrGeneProduct] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, BiologicalEntityId] = None\n", " subject_form_or_variant_qualifier: Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]] = None\n", " subject_part_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]] = None\n", " subject_derivative_qualifier: Optional[Union[str, \"ChemicalEntityDerivativeEnum\"]] = None\n", @@ -9352,15 +10704,15 @@ " object_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", " causal_mechanism_qualifier: Optional[Union[str, \"CausalMechanismQualifierEnum\"]] = None\n", - " anatomical_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]] = empty_list()\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, ChemicalAffectsGeneAssociationId):\n", - " self.id = ChemicalAffectsGeneAssociationId(self.id)\n", + " if not isinstance(self.id, ChemicalAffectsBiologicalEntityAssociationId):\n", + " self.id = ChemicalAffectsBiologicalEntityAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -9369,13 +10721,13 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", - " if not isinstance(self.object, GeneOrGeneProduct):\n", - " self.object = GeneOrGeneProduct(**as_dict(self.object))\n", + " if not isinstance(self.object, BiologicalEntityId):\n", + " self.object = BiologicalEntityId(self.object)\n", "\n", " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, ChemicalOrGeneOrGeneProductFormOrVariantEnum):\n", " self.subject_form_or_variant_qualifier = ChemicalOrGeneOrGeneProductFormOrVariantEnum(self.subject_form_or_variant_qualifier)\n", @@ -9413,11 +10765,12 @@ " if self.causal_mechanism_qualifier is not None and not isinstance(self.causal_mechanism_qualifier, CausalMechanismQualifierEnum):\n", " self.causal_mechanism_qualifier = CausalMechanismQualifierEnum(self.causal_mechanism_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, AnatomicalEntityId):\n", - " self.anatomical_context_qualifier = AnatomicalEntityId(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, AnatomicalEntityId) else AnatomicalEntityId(v) for v in self.anatomical_context_qualifier]\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", @@ -9429,12 +10782,61 @@ "\n", "\n", "@dataclass(repr=False)\n", + "class ChemicalAffectsGeneAssociation(ChemicalAffectsBiologicalEntityAssociation):\n", + " \"\"\"\n", + " Describes an effect that a chemical has on a gene or gene product (e.g. an impact of on its abundance,\n", + " activity,localization, processing, expression, etc.)\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalAffectsGeneAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:ChemicalAffectsGeneAssociation\"\n", + " class_name: ClassVar[str] = \"chemical affects gene association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.ChemicalAffectsGeneAssociation\n", + "\n", + " id: Union[str, ChemicalAffectsGeneAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, ChemicalEntityId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, BiologicalEntityId] = None\n", + " dgidb_interaction_score: Optional[float] = None\n", + " dgidb_evidence_score: Optional[int] = None\n", + " evidence_count: Optional[int] = None\n", + " supporting_documents: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list()\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, ChemicalAffectsGeneAssociationId):\n", + " self.id = ChemicalAffectsGeneAssociationId(self.id)\n", + "\n", + " if self.dgidb_interaction_score is not None and not isinstance(self.dgidb_interaction_score, float):\n", + " self.dgidb_interaction_score = float(self.dgidb_interaction_score)\n", + "\n", + " if self.dgidb_evidence_score is not None and not isinstance(self.dgidb_evidence_score, int):\n", + " self.dgidb_evidence_score = int(self.dgidb_evidence_score)\n", + "\n", + " if self.evidence_count is not None and not isinstance(self.evidence_count, int):\n", + " self.evidence_count = int(self.evidence_count)\n", + "\n", + " if not isinstance(self.supporting_documents, list):\n", + " self.supporting_documents = [self.supporting_documents] if self.supporting_documents is not None else []\n", + " self.supporting_documents = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.supporting_documents]\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", "class GeneAffectsChemicalAssociation(Association):\n", " \"\"\"\n", " Describes an effect that a gene or gene product has on a chemical entity (e.g. an impact of on its abundance,\n", " activity, localization, processing, transport, etc.)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneAffectsChemicalAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneAffectsChemicalAssociation\"\n", @@ -9444,8 +10846,8 @@ " id: Union[str, GeneAffectsChemicalAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " subject: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " subject: Union[dict, ChemicalEntityOrGeneOrGeneProduct] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, ChemicalEntityId] = None\n", " subject_form_or_variant_qualifier: Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]] = None\n", " subject_part_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]] = None\n", @@ -9460,11 +10862,11 @@ " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", " object_derivative_qualifier: Optional[Union[str, \"ChemicalEntityDerivativeEnum\"]] = None\n", " causal_mechanism_qualifier: Optional[Union[str, \"CausalMechanismQualifierEnum\"]] = None\n", - " anatomical_context_qualifier: Optional[Union[str, AnatomicalEntityId]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]] = empty_list()\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneAffectsChemicalAssociationId):\n", @@ -9472,13 +10874,13 @@ "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", - " if not isinstance(self.subject, GeneOrGeneProduct):\n", - " self.subject = GeneOrGeneProduct(**as_dict(self.subject))\n", + " if not isinstance(self.subject, ChemicalEntityOrGeneOrGeneProduct):\n", + " self.subject = ChemicalEntityOrGeneOrGeneProduct()\n", "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9524,11 +10926,12 @@ " if self.causal_mechanism_qualifier is not None and not isinstance(self.causal_mechanism_qualifier, CausalMechanismQualifierEnum):\n", " self.causal_mechanism_qualifier = CausalMechanismQualifierEnum(self.causal_mechanism_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, AnatomicalEntityId):\n", - " self.anatomical_context_qualifier = AnatomicalEntityId(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, AnatomicalEntityId) else AnatomicalEntityId(v) for v in self.anatomical_context_qualifier]\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.species_context_qualifier is not None and not isinstance(self.species_context_qualifier, OrganismTaxonId):\n", " self.species_context_qualifier = OrganismTaxonId(self.species_context_qualifier)\n", @@ -9544,7 +10947,7 @@ " \"\"\"\n", " An interaction between a drug and a gene or gene product.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DrugToGeneAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DrugToGeneAssociation\"\n", @@ -9553,12 +10956,12 @@ "\n", " id: Union[str, DrugToGeneAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DrugToGeneAssociationId):\n", @@ -9571,8 +10974,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9590,7 +10993,7 @@ " \"\"\"\n", " An association between a material sample and something.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MaterialSampleToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MaterialSampleToEntityAssociationMixin\"\n", @@ -9598,10 +11001,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.MaterialSampleToEntityAssociationMixin\n", "\n", " subject: Union[str, MaterialSampleId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, MaterialSampleId):\n", @@ -9609,8 +11012,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9625,7 +11028,7 @@ " \"\"\"\n", " An association between a material sample and the material entity from which it is derived.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MaterialSampleDerivationAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MaterialSampleDerivationAssociation\"\n", @@ -9636,10 +11039,10 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, MaterialSampleId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MaterialSampleDerivationAssociationId):\n", @@ -9652,8 +11055,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9671,7 +11074,7 @@ " \"\"\"\n", " An association between a material sample and a disease or phenotype.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MaterialSampleToDiseaseOrPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MaterialSampleToDiseaseOrPhenotypicFeatureAssociation\"\n", @@ -9680,16 +11083,16 @@ "\n", " id: Union[str, MaterialSampleToDiseaseOrPhenotypicFeatureAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MaterialSampleToDiseaseOrPhenotypicFeatureAssociationId):\n", @@ -9702,8 +11105,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9719,8 +11122,9 @@ " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -9730,7 +11134,10 @@ "\n", "@dataclass(repr=False)\n", "class DiseaseToEntityAssociationMixin(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A mixin applied to any association whose subject (source node) is a disease.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseToEntityAssociationMixin\"\n", @@ -9738,10 +11145,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.DiseaseToEntityAssociationMixin\n", "\n", " subject: Union[str, DiseaseId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, DiseaseId):\n", @@ -9749,8 +11156,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9765,7 +11172,7 @@ " \"\"\"\n", " An association between some entity and an exposure event.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToExposureEventAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToExposureEventAssociationMixin\"\n", @@ -9773,10 +11180,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.EntityToExposureEventAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, ExposureEventId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -9784,8 +11191,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9800,7 +11207,7 @@ " \"\"\"\n", " An association between an exposure event and a disease.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseToExposureEventAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseToExposureEventAssociation\"\n", @@ -9809,12 +11216,12 @@ "\n", " id: Union[str, DiseaseToExposureEventAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseToExposureEventAssociationId):\n", @@ -9827,8 +11234,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9846,7 +11253,7 @@ " \"\"\"\n", " An association between some entity and an outcome\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToOutcomeAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToOutcomeAssociationMixin\"\n", @@ -9854,10 +11261,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.EntityToOutcomeAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[dict, Outcome] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -9865,8 +11272,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9881,7 +11288,7 @@ " \"\"\"\n", " An association between an exposure event and an outcome.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ExposureEventToOutcomeAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ExposureEventToOutcomeAssociation\"\n", @@ -9890,14 +11297,14 @@ "\n", " id: Union[str, ExposureEventToOutcomeAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " population_context_qualifier: Optional[Union[str, PopulationOfIndividualOrganismsId]] = None\n", " temporal_context_qualifier: Optional[Union[str, TimeType]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ExposureEventToOutcomeAssociationId):\n", @@ -9910,8 +11317,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9935,7 +11342,7 @@ " \"\"\"\n", " Qualifier for frequency type associations\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"FrequencyQualifierMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:FrequencyQualifierMixin\"\n", @@ -9943,11 +11350,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.FrequencyQualifierMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -9955,8 +11362,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -9974,7 +11381,7 @@ " \"\"\"\n", " Qualifiers for entity to disease or phenotype associations.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToFeatureOrDiseaseQualifiersMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToFeatureOrDiseaseQualifiersMixin\"\n", @@ -9982,30 +11389,30 @@ " class_model_uri: ClassVar[URIRef] = DIST.EntityToFeatureOrDiseaseQualifiersMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -10014,11 +11421,91 @@ "\n", "\n", "@dataclass(repr=False)\n", + "class EntityToFeatureOrVariantQualifiersMixin(FrequencyQualifierMixin):\n", + " \"\"\"\n", + " Qualifiers for entity to variant associations.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToFeatureOrVariantQualifiersMixin\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:EntityToFeatureOrVariantQualifiersMixin\"\n", + " class_name: ClassVar[str] = \"entity to feature or variant qualifiers mixin\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.EntityToFeatureOrVariantQualifiersMixin\n", + "\n", + " subject: Union[str, NamedThingId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, NamedThingId] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", + "\n", + " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", + " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + "\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class EntityToFeatureOrGeneQualifiersMixin(FrequencyQualifierMixin):\n", + " \"\"\"\n", + " Qualifiers for entity to gene associations.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToFeatureOrGeneQualifiersMixin\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:EntityToFeatureOrGeneQualifiersMixin\"\n", + " class_name: ClassVar[str] = \"entity to feature or gene qualifiers mixin\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.EntityToFeatureOrGeneQualifiersMixin\n", + "\n", + " subject: Union[str, NamedThingId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, NamedThingId] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", + "\n", + " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", + " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + "\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + "\n", + "\n", + "@dataclass(repr=False)\n", "class FeatureOrDiseaseQualifiersToEntityMixin(FrequencyQualifierMixin):\n", " \"\"\"\n", " Qualifiers for disease or phenotype to entity associations.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"FeatureOrDiseaseQualifiersToEntityMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:FeatureOrDiseaseQualifiersToEntityMixin\"\n", @@ -10026,36 +11513,39 @@ " class_model_uri: ClassVar[URIRef] = DIST.FeatureOrDiseaseQualifiersToEntityMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " super().__post_init__(**kwargs)\n", "\n", "\n", "@dataclass(repr=False)\n", "class EntityToPhenotypicFeatureAssociationMixin(EntityToFeatureOrDiseaseQualifiersMixin):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A mixin applied to any association whose object (target node) is a phenotypic feature.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToPhenotypicFeatureAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToPhenotypicFeatureAssociationMixin\"\n", @@ -10063,7 +11553,7 @@ " class_model_uri: ClassVar[URIRef] = DIST.EntityToPhenotypicFeatureAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, PhenotypicFeatureId] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", " has_count: Optional[int] = None\n", @@ -10071,7 +11561,7 @@ " has_quotient: Optional[float] = None\n", " has_percentage: Optional[float] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -10079,8 +11569,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10107,14 +11597,17 @@ "\n", "@dataclass(repr=False)\n", "class PhenotypicFeatureToEntityAssociationMixin(FeatureOrDiseaseQualifiersToEntityMixin):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A mixin applied to any association whose subject (source node) is a phenotypic feature.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhenotypicFeatureToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhenotypicFeatureToEntityAssociationMixin\"\n", " class_name: ClassVar[str] = \"phenotypic feature to entity association mixin\"\n", " class_model_uri: ClassVar[URIRef] = DIST.PhenotypicFeatureToEntityAssociationMixin\n", "\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " subject: Union[str, PhenotypicFeatureId] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", @@ -10123,7 +11616,7 @@ " has_quotient: Optional[float] = None\n", " has_percentage: Optional[float] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, PhenotypicFeatureId):\n", @@ -10153,7 +11646,7 @@ " Association between two concept nodes of phenotypic character, qualified by the predicate used. This association\n", " may typically be used to specify 'similar_to' or 'member_of' relationships.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhenotypicFeatureToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhenotypicFeatureToPhenotypicFeatureAssociation\"\n", @@ -10162,20 +11655,20 @@ "\n", " id: Union[str, PhenotypicFeatureToPhenotypicFeatureAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhenotypicFeatureToPhenotypicFeatureAssociationId):\n", @@ -10188,8 +11681,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10199,20 +11692,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.sex_qualifier is not None and not isinstance(self.sex_qualifier, BiologicalSexId):\n", " self.sex_qualifier = BiologicalSexId(self.sex_qualifier)\n", @@ -10236,7 +11729,7 @@ " used. Conversely, for more specific associations (like 'gene to disease association', the publication should be\n", " captured as an edge property).\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"InformationContentEntityToNamedThingAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:InformationContentEntityToNamedThingAssociation\"\n", @@ -10248,9 +11741,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, NamedThingId] = None\n", " object: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, InformationContentEntityToNamedThingAssociationId):\n", @@ -10268,8 +11761,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -10282,7 +11775,7 @@ " \"\"\"\n", " mixin class for any association whose object (target node) is a disease\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToDiseaseAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToDiseaseAssociationMixin\"\n", @@ -10290,10 +11783,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.EntityToDiseaseAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, DiseaseId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", " if not isinstance(self.object, DiseaseId):\n", @@ -10304,7 +11797,7 @@ "\n", "@dataclass(repr=False)\n", "class DiseaseOrPhenotypicFeatureToEntityAssociationMixin(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseOrPhenotypicFeatureToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseOrPhenotypicFeatureToEntityAssociationMixin\"\n", @@ -10312,10 +11805,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.DiseaseOrPhenotypicFeatureToEntityAssociationMixin\n", "\n", " subject: Union[str, DiseaseOrPhenotypicFeatureId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, DiseaseOrPhenotypicFeatureId):\n", @@ -10323,8 +11816,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10340,7 +11833,7 @@ " An association between either a disease or a phenotypic feature and an anatomical entity, where the\n", " disease/feature manifests in that site.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseOrPhenotypicFeatureToLocationAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseOrPhenotypicFeatureToLocationAssociation\"\n", @@ -10349,12 +11842,12 @@ "\n", " id: Union[str, DiseaseOrPhenotypicFeatureToLocationAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object: Union[str, AnatomicalEntityId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseOrPhenotypicFeatureToLocationAssociationId):\n", @@ -10367,8 +11860,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10386,7 +11879,7 @@ " \"\"\"\n", " An association between either a disease or a phenotypic feature and its mode of (genetic) inheritance.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation\"\n", @@ -10397,10 +11890,10 @@ " subject: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, GeneticInheritanceId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociationId):\n", @@ -10413,8 +11906,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10429,7 +11922,7 @@ "\n", "@dataclass(repr=False)\n", "class EntityToDiseaseOrPhenotypicFeatureAssociationMixin(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToDiseaseOrPhenotypicFeatureAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToDiseaseOrPhenotypicFeatureAssociationMixin\"\n", @@ -10437,14 +11930,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.EntityToDiseaseOrPhenotypicFeatureAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, DiseaseOrPhenotypicFeatureId] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " subject_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", - " anatomical_context_qualifier: Optional[str] = None\n", + " anatomical_context_qualifier: Optional[Union[str, list[str]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -10452,8 +11945,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10469,15 +11962,16 @@ " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", "\n", - " if self.anatomical_context_qualifier is not None and not isinstance(self.anatomical_context_qualifier, str):\n", - " self.anatomical_context_qualifier = str(self.anatomical_context_qualifier)\n", + " if not isinstance(self.anatomical_context_qualifier, list):\n", + " self.anatomical_context_qualifier = [self.anatomical_context_qualifier] if self.anatomical_context_qualifier is not None else []\n", + " self.anatomical_context_qualifier = [v if isinstance(v, str) else str(v) for v in self.anatomical_context_qualifier]\n", "\n", " super().__post_init__(**kwargs)\n", "\n", "\n", "@dataclass(repr=False)\n", "class GenotypeToEntityAssociationMixin(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeToEntityAssociationMixin\"\n", @@ -10485,10 +11979,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.GenotypeToEntityAssociationMixin\n", "\n", " subject: Union[str, GenotypeId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, GenotypeId):\n", @@ -10496,8 +11990,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10513,7 +12007,7 @@ " Any association between one genotype and a phenotypic feature, where having the genotype confers the phenotype,\n", " either in isolation or through environment\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeToPhenotypicFeatureAssociation\"\n", @@ -10524,18 +12018,18 @@ " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " subject: Union[str, GenotypeId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeToPhenotypicFeatureAssociationId):\n", @@ -10548,8 +12042,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -10559,20 +12053,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -10592,7 +12086,7 @@ " Any association between an environment and a phenotypic feature, where being in the environment influences the\n", " phenotype.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ExposureEventToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ExposureEventToPhenotypicFeatureAssociation\"\n", @@ -10600,21 +12094,21 @@ " class_model_uri: ClassVar[URIRef] = DIST.ExposureEventToPhenotypicFeatureAssociation\n", "\n", " id: Union[str, ExposureEventToPhenotypicFeatureAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ExposureEventId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ExposureEventToPhenotypicFeatureAssociationId):\n", @@ -10622,8 +12116,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10638,20 +12132,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -10671,7 +12165,7 @@ " An association between a disease and a phenotypic feature in which the phenotypic feature is associated with the\n", " disease in some way.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DiseaseToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DiseaseToPhenotypicFeatureAssociation\"\n", @@ -10679,7 +12173,7 @@ " class_model_uri: ClassVar[URIRef] = DIST.DiseaseToPhenotypicFeatureAssociation\n", "\n", " id: Union[str, DiseaseToPhenotypicFeatureAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, DiseaseId] = None\n", @@ -10690,15 +12184,15 @@ " has_quotient: Optional[float] = None\n", " has_percentage: Optional[float] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DiseaseToPhenotypicFeatureAssociationId):\n", @@ -10706,8 +12200,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -10737,20 +12231,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -10770,7 +12264,7 @@ " An association between a case (e.g. individual patient) and a phenotypic feature in which the individual has or\n", " has had the phenotype.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CaseToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CaseToPhenotypicFeatureAssociation\"\n", @@ -10779,20 +12273,22 @@ "\n", " id: Union[str, CaseToPhenotypicFeatureAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " negated: Optional[Union[bool, Bool]] = None\n", + " onset_qualifier: Optional[Union[str, OnsetId]] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CaseToPhenotypicFeatureAssociationId):\n", @@ -10805,31 +12301,37 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", " if not isinstance(self.object, NamedThingId):\n", " self.object = NamedThingId(self.object)\n", "\n", + " if self.negated is not None and not isinstance(self.negated, Bool):\n", + " self.negated = Bool(self.negated)\n", + "\n", + " if self.onset_qualifier is not None and not isinstance(self.onset_qualifier, OnsetId):\n", + " self.onset_qualifier = OnsetId(self.onset_qualifier)\n", + "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -10844,12 +12346,158 @@ "\n", "\n", "@dataclass(repr=False)\n", + "class CaseToDiseaseAssociation(Association):\n", + " \"\"\"\n", + " An association between a Case (patient) and a Disease\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CaseToDiseaseAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:CaseToDiseaseAssociation\"\n", + " class_name: ClassVar[str] = \"case to disease association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.CaseToDiseaseAssociation\n", + "\n", + " id: Union[str, CaseToDiseaseAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, NamedThingId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, DiseaseId] = None\n", + " onset_qualifier: Optional[Union[str, OnsetId]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, CaseToDiseaseAssociationId):\n", + " self.id = CaseToDiseaseAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, NamedThingId):\n", + " self.subject = NamedThingId(self.subject)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, DiseaseId):\n", + " self.object = DiseaseId(self.object)\n", + "\n", + " if self.onset_qualifier is not None and not isinstance(self.onset_qualifier, OnsetId):\n", + " self.onset_qualifier = OnsetId(self.onset_qualifier)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class CaseToVariantAssociation(Association):\n", + " \"\"\"\n", + " Association between a Case and a Genetic Variant\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CaseToVariantAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:CaseToVariantAssociation\"\n", + " class_name: ClassVar[str] = \"case to variant association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.CaseToVariantAssociation\n", + "\n", + " id: Union[str, CaseToVariantAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, NamedThingId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[str, SequenceVariantId] = None\n", + " has_zygosity: Optional[Union[str, ZygosityId]] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, CaseToVariantAssociationId):\n", + " self.id = CaseToVariantAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, NamedThingId):\n", + " self.subject = NamedThingId(self.subject)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, SequenceVariantId):\n", + " self.object = SequenceVariantId(self.object)\n", + "\n", + " if self.has_zygosity is not None and not isinstance(self.has_zygosity, ZygosityId):\n", + " self.has_zygosity = ZygosityId(self.has_zygosity)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class CaseToGeneAssociation(Association):\n", + " \"\"\"\n", + " Association between a Case and a Gene (e.g., indicating a gene of interest for the case)\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CaseToGeneAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:CaseToGeneAssociation\"\n", + " class_name: ClassVar[str] = \"case to gene association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.CaseToGeneAssociation\n", + "\n", + " id: Union[str, CaseToGeneAssociationId] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, NamedThingId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " object: Union[dict, GeneOrGeneProduct] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, CaseToGeneAssociationId):\n", + " self.id = CaseToGeneAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, NamedThingId):\n", + " self.subject = NamedThingId(self.subject)\n", + "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, GeneOrGeneProduct):\n", + " self.object = GeneOrGeneProduct(**as_dict(self.object))\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", "class BehaviorToBehavioralFeatureAssociation(Association):\n", " \"\"\"\n", " An association between an mixture behavior and a behavioral feature manifested by the individual exhibited or has\n", " exhibited the behavior.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BehaviorToBehavioralFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:BehaviorToBehavioralFeatureAssociation\"\n", @@ -10857,21 +12505,21 @@ " class_model_uri: ClassVar[URIRef] = DIST.BehaviorToBehavioralFeatureAssociation\n", "\n", " id: Union[str, BehaviorToBehavioralFeatureAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, BehaviorId] = None\n", " object: Union[str, BehavioralFeatureId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, BehaviorToBehavioralFeatureAssociationId):\n", @@ -10879,8 +12527,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -10895,20 +12543,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -10924,7 +12572,7 @@ "\n", "@dataclass(repr=False)\n", "class GeneToEntityAssociationMixin(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToEntityAssociationMixin\"\n", @@ -10932,10 +12580,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneToEntityAssociationMixin\n", "\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, GeneOrGeneProduct):\n", @@ -10943,8 +12591,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10956,7 +12604,7 @@ "\n", "@dataclass(repr=False)\n", "class VariantToEntityAssociationMixin(YAMLRoot):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantToEntityAssociationMixin\"\n", @@ -10964,10 +12612,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.VariantToEntityAssociationMixin\n", "\n", " subject: Union[str, SequenceVariantId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, SequenceVariantId):\n", @@ -10975,8 +12623,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -10987,34 +12635,40 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class GeneToDiseaseOrPhenotypicFeatureAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class GeneToPhenotypicFeatureAssociation(Association):\n", + " \"\"\"\n", + " An association between a gene or gene product and a phenotypic feature, where variation in the gene is correlated\n", + " with the phenotypic feature.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToDiseaseOrPhenotypicFeatureAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:GeneToDiseaseOrPhenotypicFeatureAssociation\"\n", - " class_name: ClassVar[str] = \"gene to disease or phenotypic feature association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.GeneToDiseaseOrPhenotypicFeatureAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToPhenotypicFeatureAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:GeneToPhenotypicFeatureAssociation\"\n", + " class_name: ClassVar[str] = \"gene to phenotypic feature association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.GeneToPhenotypicFeatureAssociation\n", "\n", - " id: Union[str, GeneToDiseaseOrPhenotypicFeatureAssociationId] = None\n", + " id: Union[str, GeneToPhenotypicFeatureAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", - " object: Union[str, DiseaseOrPhenotypicFeatureId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " object: Union[str, PhenotypicFeatureId] = None\n", + " predicate: Union[str, \"GeneToPhenotypicFeaturePredicateEnum\"] = None\n", + " subject_form_or_variant_qualifier: Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]] = None\n", " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " allelic_requirement: Optional[str] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, GeneToDiseaseOrPhenotypicFeatureAssociationId):\n", - " self.id = GeneToDiseaseOrPhenotypicFeatureAssociationId(self.id)\n", + " if not isinstance(self.id, GeneToPhenotypicFeatureAssociationId):\n", + " self.id = GeneToPhenotypicFeatureAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -11023,13 +12677,16 @@ "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", - " if not isinstance(self.object, DiseaseOrPhenotypicFeatureId):\n", - " self.object = DiseaseOrPhenotypicFeatureId(self.object)\n", + " if not isinstance(self.object, PhenotypicFeatureId):\n", + " self.object = PhenotypicFeatureId(self.object)\n", "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, GeneToPhenotypicFeaturePredicateEnum):\n", + " self.predicate = GeneToPhenotypicFeaturePredicateEnum(self.predicate)\n", + "\n", + " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, ChemicalOrGeneOrGeneProductFormOrVariantEnum):\n", + " self.subject_form_or_variant_qualifier = ChemicalOrGeneOrGeneProductFormOrVariantEnum(self.subject_form_or_variant_qualifier)\n", "\n", " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", @@ -11037,67 +12694,8 @@ " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", - " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", - "\n", - " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", - " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", - "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", - "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", - "\n", - " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", - " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", - "\n", - " if self.sex_qualifier is not None and not isinstance(self.sex_qualifier, BiologicalSexId):\n", - " self.sex_qualifier = BiologicalSexId(self.sex_qualifier)\n", - "\n", - " super().__post_init__(**kwargs)\n", - " if not isinstance(self.category, list):\n", - " self.category = [self.category] if self.category is not None else []\n", - " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", - "\n", - "\n", - "@dataclass(repr=False)\n", - "class GeneToPhenotypicFeatureAssociation(GeneToDiseaseOrPhenotypicFeatureAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", - "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToPhenotypicFeatureAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:GeneToPhenotypicFeatureAssociation\"\n", - " class_name: ClassVar[str] = \"gene to phenotypic feature association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.GeneToPhenotypicFeatureAssociation\n", - "\n", - " id: Union[str, GeneToPhenotypicFeatureAssociationId] = None\n", - " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", - " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", - " subject: Union[dict, GeneOrGeneProduct] = None\n", - " object: Union[str, PhenotypicFeatureId] = None\n", - " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", - " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", - " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self._is_empty(self.id):\n", - " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, GeneToPhenotypicFeatureAssociationId):\n", - " self.id = GeneToPhenotypicFeatureAssociationId(self.id)\n", - "\n", - " if self._is_empty(self.subject):\n", - " self.MissingRequiredField(\"subject\")\n", - " if not isinstance(self.subject, GeneOrGeneProduct):\n", - " self.subject = GeneOrGeneProduct(**as_dict(self.subject))\n", - "\n", - " if self._is_empty(self.object):\n", - " self.MissingRequiredField(\"object\")\n", - " if not isinstance(self.object, PhenotypicFeatureId):\n", - " self.object = PhenotypicFeatureId(self.object)\n", + " if self.allelic_requirement is not None and not isinstance(self.allelic_requirement, str):\n", + " self.allelic_requirement = str(self.allelic_requirement)\n", "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", @@ -11105,11 +12703,11 @@ " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11124,8 +12722,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class GeneToDiseaseAssociation(GeneToDiseaseOrPhenotypicFeatureAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class GeneToDiseaseAssociation(Association):\n", + " \"\"\"\n", + " An association between a gene or gene product and a disease, where variation in the gene is correlated with the\n", + " disease.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToDiseaseAssociation\"\n", @@ -11135,16 +12737,18 @@ " id: Union[str, GeneToDiseaseAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[str, DiseaseId] = None\n", - " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", - " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", + " predicate: Union[str, \"GeneToDiseasePredicateEnum\"] = None\n", + " subject_form_or_variant_qualifier: Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " allelic_requirement: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + " diseases_confidence_score: Optional[float] = None\n", + " gene2phenotype_confidence_category: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToDiseaseAssociationId):\n", @@ -11160,20 +12764,31 @@ " if not isinstance(self.object, DiseaseId):\n", " self.object = DiseaseId(self.object)\n", "\n", - " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", - " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, GeneToDiseasePredicateEnum):\n", + " self.predicate = GeneToDiseasePredicateEnum(self.predicate)\n", "\n", - " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", - " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, ChemicalOrGeneOrGeneProductFormOrVariantEnum):\n", + " self.subject_form_or_variant_qualifier = ChemicalOrGeneOrGeneProductFormOrVariantEnum(self.subject_form_or_variant_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", - " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", + " if self.allelic_requirement is not None and not isinstance(self.allelic_requirement, str):\n", + " self.allelic_requirement = str(self.allelic_requirement)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " if self.diseases_confidence_score is not None and not isinstance(self.diseases_confidence_score, float):\n", + " self.diseases_confidence_score = float(self.diseases_confidence_score)\n", + "\n", + " if self.gene2phenotype_confidence_category is not None and not isinstance(self.gene2phenotype_confidence_category, str):\n", + " self.gene2phenotype_confidence_category = str(self.gene2phenotype_confidence_category)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -11182,8 +12797,12 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class CausalGeneToDiseaseAssociation(GeneToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class CausalGeneToDiseaseAssociation(Association):\n", + " \"\"\"\n", + " An association between a gene and a disease where variation in the gene has been shown to have a causal role in\n", + " the disease.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CausalGeneToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CausalGeneToDiseaseAssociation\"\n", @@ -11191,23 +12810,28 @@ " class_model_uri: ClassVar[URIRef] = DIST.CausalGeneToDiseaseAssociation\n", "\n", " id: Union[str, CausalGeneToDiseaseAssociationId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[str, DiseaseId] = None\n", - " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", - " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", + " subject_form_or_variant_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " allelic_requirement: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CausalGeneToDiseaseAssociationId):\n", " self.id = CausalGeneToDiseaseAssociationId(self.id)\n", "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, GeneOrGeneProduct):\n", @@ -11218,20 +12842,20 @@ " if not isinstance(self.object, DiseaseId):\n", " self.object = DiseaseId(self.object)\n", "\n", - " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", - " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", + " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, str):\n", + " self.subject_form_or_variant_qualifier = str(self.subject_form_or_variant_qualifier)\n", "\n", - " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", - " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.allelic_requirement is not None and not isinstance(self.allelic_requirement, str):\n", + " self.allelic_requirement = str(self.allelic_requirement)\n", "\n", - " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", - " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -11240,8 +12864,13 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class CorrelatedGeneToDiseaseAssociation(GeneToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + "class CorrelatedGeneToDiseaseAssociation(Association):\n", + " \"\"\"\n", + " An association between a gene (or gene product) and a disease for which the gene is statistically correlated with\n", + " the disease rather than asserted as causal. Such associations typically derive from GWAS, co-occurrence analyses,\n", + " or other statistical methods, and are annotated with scores such as a z-score or a diseases confidence score.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CorrelatedGeneToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CorrelatedGeneToDiseaseAssociation\"\n", @@ -11251,16 +12880,22 @@ " id: Union[str, CorrelatedGeneToDiseaseAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[str, DiseaseId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " z_score: Optional[float] = None\n", + " diseases_confidence_score: Optional[float] = None\n", + " subject_form_or_variant_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", + " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", + " allelic_requirement: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CorrelatedGeneToDiseaseAssociationId):\n", @@ -11276,17 +12911,40 @@ " if not isinstance(self.object, DiseaseId):\n", " self.object = DiseaseId(self.object)\n", "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " if self.z_score is not None and not isinstance(self.z_score, float):\n", + " self.z_score = float(self.z_score)\n", + "\n", + " if self.diseases_confidence_score is not None and not isinstance(self.diseases_confidence_score, float):\n", + " self.diseases_confidence_score = float(self.diseases_confidence_score)\n", + "\n", + " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, str):\n", + " self.subject_form_or_variant_qualifier = str(self.subject_form_or_variant_qualifier)\n", + "\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", + "\n", + " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", + " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", + "\n", + " if self.allelic_requirement is not None and not isinstance(self.allelic_requirement, str):\n", + " self.allelic_requirement = str(self.allelic_requirement)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", - "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11299,7 +12957,11 @@ "\n", "@dataclass(repr=False)\n", "class DruggableGeneToDiseaseAssociation(GeneToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between a gene (or gene product) and a disease in which the gene is classified by its druggability\n", + " (e.g., via the IDG/Pharos target development-level tiers).\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"DruggableGeneToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:DruggableGeneToDiseaseAssociation\"\n", @@ -11311,15 +12973,15 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object: Union[str, DiseaseId] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, \"GeneToDiseasePredicateEnum\"] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", + " druggable_gene_category: Optional[Union[str, \"DruggableGeneCategoryEnum\"]] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", - " has_evidence: Optional[Union[Union[str, \"DruggableGeneCategoryEnum\"], List[Union[str, \"DruggableGeneCategoryEnum\"]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, DruggableGeneToDiseaseAssociationId):\n", @@ -11332,8 +12994,14 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, GeneToDiseasePredicateEnum):\n", + " self.predicate = GeneToDiseasePredicateEnum(self.predicate)\n", + "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", + " if self.druggable_gene_category is not None and not isinstance(self.druggable_gene_category, DruggableGeneCategoryEnum):\n", + " self.druggable_gene_category = DruggableGeneCategoryEnum(self.druggable_gene_category)\n", "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", @@ -11341,19 +13009,12 @@ " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", - "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", "\n", - " if not isinstance(self.has_evidence, list):\n", - " self.has_evidence = [self.has_evidence] if self.has_evidence is not None else []\n", - " self.has_evidence = [v if isinstance(v, DruggableGeneCategoryEnum) else DruggableGeneCategoryEnum(v) for v in self.has_evidence]\n", - "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -11362,7 +13023,11 @@ "\n", "@dataclass(repr=False)\n", "class PhenotypicFeatureToDiseaseAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between a phenotypic feature (sign or symptom) and a disease, where the phenotypic feature is a\n", + " manifestation or clinical indicator of the disease.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PhenotypicFeatureToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PhenotypicFeatureToDiseaseAssociation\"\n", @@ -11374,17 +13039,17 @@ " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PhenotypicFeatureToDiseaseAssociationId):\n", @@ -11402,26 +13067,26 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11441,7 +13106,7 @@ " An association between a variant and a gene, where the variant has a genetic association with the gene (i.e. is in\n", " linkage disequilibrium)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantToGeneAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantToGeneAssociation\"\n", @@ -11453,9 +13118,9 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object: Union[str, GeneId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VariantToGeneAssociationId):\n", @@ -11473,8 +13138,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -11487,7 +13152,7 @@ " \"\"\"\n", " An association between a variant and expression of a gene (i.e. e-QTL)\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantToGeneExpressionAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantToGeneExpressionAssociation\"\n", @@ -11499,13 +13164,13 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " object: Union[str, GeneId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " quantifier_qualifier: Optional[Union[str, OntologyClassId]] = None\n", " expression_site: Optional[Union[str, AnatomicalEntityId]] = None\n", " stage_qualifier: Optional[Union[str, LifeStageId]] = None\n", " phenotypic_state: Optional[Union[str, DiseaseOrPhenotypicFeatureId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VariantToGeneExpressionAssociationId):\n", @@ -11513,8 +13178,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.quantifier_qualifier is not None and not isinstance(self.quantifier_qualifier, OntologyClassId):\n", " self.quantifier_qualifier = OntologyClassId(self.quantifier_qualifier)\n", @@ -11539,7 +13204,7 @@ " \"\"\"\n", " An association between a variant and a population, where the variant has particular frequency in the population\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantToPopulationAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantToPopulationAssociation\"\n", @@ -11547,7 +13212,7 @@ " class_model_uri: ClassVar[URIRef] = DIST.VariantToPopulationAssociation\n", "\n", " id: Union[str, VariantToPopulationAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, SequenceVariantId] = None\n", @@ -11558,7 +13223,7 @@ " has_percentage: Optional[float] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VariantToPopulationAssociationId):\n", @@ -11566,8 +13231,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -11605,7 +13270,7 @@ " \"\"\"\n", " An association between a two populations\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"PopulationToPopulationAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:PopulationToPopulationAssociation\"\n", @@ -11617,9 +13282,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, PopulationOfIndividualOrganismsId] = None\n", " object: Union[str, PopulationOfIndividualOrganismsId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PopulationToPopulationAssociationId):\n", @@ -11637,8 +13302,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -11648,7 +13313,11 @@ "\n", "@dataclass(repr=False)\n", "class VariantToPhenotypicFeatureAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between a sequence variant and a phenotypic feature, in which the allele state of the variant is\n", + " linked to the manifestation of the phenotype.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantToPhenotypicFeatureAssociation\"\n", @@ -11656,21 +13325,21 @@ " class_model_uri: ClassVar[URIRef] = DIST.VariantToPhenotypicFeatureAssociation\n", "\n", " id: Union[str, VariantToPhenotypicFeatureAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, SequenceVariantId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " sex_qualifier: Optional[Union[str, BiologicalSexId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VariantToPhenotypicFeatureAssociationId):\n", @@ -11678,8 +13347,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -11694,20 +13363,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11723,7 +13392,11 @@ "\n", "@dataclass(repr=False)\n", "class VariantToDiseaseAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between a sequence variant and a disease, in which the allele state of the variant is linked to the\n", + " disease state.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantToDiseaseAssociation\"\n", @@ -11734,17 +13407,17 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VariantToDiseaseAssociationId):\n", @@ -11757,8 +13430,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -11768,20 +13441,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11794,7 +13467,11 @@ "\n", "@dataclass(repr=False)\n", "class GenotypeToDiseaseAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between a genotype and a disease, in which the genotype (typically a combination of alleles at one\n", + " or more loci) is linked to the disease state.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeToDiseaseAssociation\"\n", @@ -11805,17 +13482,17 @@ " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeToDiseaseAssociationId):\n", @@ -11828,8 +13505,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -11839,20 +13516,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11870,7 +13547,7 @@ " that it recapitulates some features of the disease in a way that is useful for studying the disease outside a\n", " patient carrying the disease\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ModelToDiseaseAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ModelToDiseaseAssociationMixin\"\n", @@ -11878,10 +13555,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.ModelToDiseaseAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -11889,8 +13566,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -11902,7 +13579,11 @@ "\n", "@dataclass(repr=False)\n", "class GeneAsAModelOfDiseaseAssociation(GeneToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association in which a gene (e.g., a model-organism ortholog of a known disease gene) serves as a model of a\n", + " human disease - for example, because mutants of the gene recapitulate core features of the disease.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneAsAModelOfDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneAsAModelOfDiseaseAssociation\"\n", @@ -11912,16 +13593,16 @@ " id: Union[str, GeneAsAModelOfDiseaseAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", " object: Union[str, DiseaseId] = None\n", + " predicate: Union[str, \"GeneToDiseasePredicateEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", - " qualified_predicate: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneAsAModelOfDiseaseAssociationId):\n", @@ -11932,17 +13613,17 @@ " if not isinstance(self.subject, GeneOrGeneProduct):\n", " self.subject = GeneOrGeneProduct(**as_dict(self.subject))\n", "\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", + "\n", " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", - "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -11955,7 +13636,11 @@ "\n", "@dataclass(repr=False)\n", "class VariantAsAModelOfDiseaseAssociation(VariantToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association in which a sequence variant serves as a model of a disease, recapitulating features relevant for\n", + " studying the disease outside of a patient who carries it.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"VariantAsAModelOfDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:VariantAsAModelOfDiseaseAssociation\"\n", @@ -11965,18 +13650,18 @@ " id: Union[str, VariantAsAModelOfDiseaseAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " subject: Union[str, SequenceVariantId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, VariantAsAModelOfDiseaseAssociationId):\n", @@ -11990,20 +13675,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -12016,7 +13701,11 @@ "\n", "@dataclass(repr=False)\n", "class GenotypeAsAModelOfDiseaseAssociation(GenotypeToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association in which a genotype serves as a model of a disease, recapitulating features relevant for studying\n", + " the disease outside of a patient who carries it.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenotypeAsAModelOfDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenotypeAsAModelOfDiseaseAssociation\"\n", @@ -12026,18 +13715,18 @@ " id: Union[str, GenotypeAsAModelOfDiseaseAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " subject: Union[str, GenotypeId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenotypeAsAModelOfDiseaseAssociationId):\n", @@ -12051,20 +13740,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -12077,7 +13766,11 @@ "\n", "@dataclass(repr=False)\n", "class CellLineAsAModelOfDiseaseAssociation(CellLineToDiseaseOrPhenotypicFeatureAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association in which a cell line - typically derived from an organismal entity with a disease state - serves as\n", + " a model for that disease in experimental settings.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"CellLineAsAModelOfDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:CellLineAsAModelOfDiseaseAssociation\"\n", @@ -12085,20 +13778,20 @@ " class_model_uri: ClassVar[URIRef] = DIST.CellLineAsAModelOfDiseaseAssociation\n", "\n", " id: Union[str, CellLineAsAModelOfDiseaseAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, CellLineId] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, CellLineAsAModelOfDiseaseAssociationId):\n", @@ -12106,8 +13799,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -12125,20 +13818,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -12148,7 +13841,11 @@ "\n", "@dataclass(repr=False)\n", "class OrganismalEntityAsAModelOfDiseaseAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association in which an organismal entity (e.g., a strain or breed) serves as a model of a disease, either\n", + " because it has a natural predisposition to the disease or was bred or engineered specifically to recapitulate it.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismalEntityAsAModelOfDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismalEntityAsAModelOfDiseaseAssociation\"\n", @@ -12156,20 +13853,20 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismalEntityAsAModelOfDiseaseAssociation\n", "\n", " id: Union[str, OrganismalEntityAsAModelOfDiseaseAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, OrganismalEntityId] = None\n", " frequency_qualifier: Optional[Union[str, FrequencyValue]] = None\n", - " subject_aspect_qualifier: Optional[str] = None\n", + " subject_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " subject_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " object_aspect_qualifier: Optional[str] = None\n", + " object_aspect_qualifier: Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", - " qualified_predicate: Optional[str] = None\n", + " qualified_predicate: Optional[Union[str, URIorCURIE]] = None\n", " disease_context_qualifier: Optional[Union[str, DiseaseId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OrganismalEntityAsAModelOfDiseaseAssociationId):\n", @@ -12177,8 +13874,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -12193,20 +13890,20 @@ " if self.frequency_qualifier is not None and not isinstance(self.frequency_qualifier, FrequencyValue):\n", " self.frequency_qualifier = FrequencyValue(self.frequency_qualifier)\n", "\n", - " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, str):\n", - " self.subject_aspect_qualifier = str(self.subject_aspect_qualifier)\n", + " if self.subject_aspect_qualifier is not None and not isinstance(self.subject_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.subject_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.subject_aspect_qualifier)\n", "\n", " if self.subject_direction_qualifier is not None and not isinstance(self.subject_direction_qualifier, DirectionQualifierEnum):\n", " self.subject_direction_qualifier = DirectionQualifierEnum(self.subject_direction_qualifier)\n", "\n", - " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, str):\n", - " self.object_aspect_qualifier = str(self.object_aspect_qualifier)\n", + " if self.object_aspect_qualifier is not None and not isinstance(self.object_aspect_qualifier, GeneOrGeneProductOrChemicalEntityAspectEnum):\n", + " self.object_aspect_qualifier = GeneOrGeneProductOrChemicalEntityAspectEnum(self.object_aspect_qualifier)\n", "\n", " if self.object_direction_qualifier is not None and not isinstance(self.object_direction_qualifier, DirectionQualifierEnum):\n", " self.object_direction_qualifier = DirectionQualifierEnum(self.object_direction_qualifier)\n", "\n", - " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, str):\n", - " self.qualified_predicate = str(self.qualified_predicate)\n", + " if self.qualified_predicate is not None and not isinstance(self.qualified_predicate, URIorCURIE):\n", + " self.qualified_predicate = URIorCURIE(self.qualified_predicate)\n", "\n", " if self.disease_context_qualifier is not None and not isinstance(self.disease_context_qualifier, DiseaseId):\n", " self.disease_context_qualifier = DiseaseId(self.disease_context_qualifier)\n", @@ -12219,7 +13916,11 @@ "\n", "@dataclass(repr=False)\n", "class OrganismToOrganismAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between two individual organisms (e.g., symbiosis, parasitism, predation, or other inter-organism\n", + " relationships).\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismToOrganismAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismToOrganismAssociation\"\n", @@ -12227,13 +13928,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismToOrganismAssociation\n", "\n", " id: Union[str, OrganismToOrganismAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, IndividualOrganismId] = None\n", " object: Union[str, IndividualOrganismId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OrganismToOrganismAssociationId):\n", @@ -12257,7 +13958,11 @@ "\n", "@dataclass(repr=False)\n", "class TaxonToTaxonAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between two organism taxa, capturing ecological or evolutionary relationships between the taxa\n", + " (e.g., a host-pathogen relationship or shared habitat).\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"TaxonToTaxonAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:TaxonToTaxonAssociation\"\n", @@ -12265,13 +13970,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.TaxonToTaxonAssociation\n", "\n", " id: Union[str, TaxonToTaxonAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, OrganismTaxonId] = None\n", " object: Union[str, OrganismTaxonId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, TaxonToTaxonAssociationId):\n", @@ -12295,7 +14000,11 @@ "\n", "@dataclass(repr=False)\n", "class GeneHasVariantThatContributesToDiseaseAssociation(GeneToDiseaseAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A gene-to-disease association that is asserted on the grounds that the gene harbours a sequence variant that\n", + " contributes to the disease. Qualifies the gene with the form or variant that underlies the contribution.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneHasVariantThatContributesToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneHasVariantThatContributesToDiseaseAssociation\"\n", @@ -12307,10 +14016,10 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[str, DiseaseId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, \"GeneToDiseasePredicateEnum\"] = None\n", " subject_form_or_variant_qualifier: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneHasVariantThatContributesToDiseaseAssociationId):\n", @@ -12328,8 +14037,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, GeneToDiseasePredicateEnum):\n", + " self.predicate = GeneToDiseasePredicateEnum(self.predicate)\n", "\n", " if self.subject_form_or_variant_qualifier is not None and not isinstance(self.subject_form_or_variant_qualifier, str):\n", " self.subject_form_or_variant_qualifier = str(self.subject_form_or_variant_qualifier)\n", @@ -12345,7 +14054,7 @@ " \"\"\"\n", " An association between a gene and a gene expression site, possibly qualified by stage/timing info.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToExpressionSiteAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToExpressionSiteAssociation\"\n", @@ -12357,11 +14066,12 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, GeneOrGeneProduct] = None\n", " object: Union[str, AnatomicalEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " stage_qualifier: Optional[Union[str, LifeStageId]] = None\n", " quantifier_qualifier: Optional[Union[str, OntologyClassId]] = None\n", + " object_specialization_qualifier: Optional[Union[str, URIorCURIE]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToExpressionSiteAssociationId):\n", @@ -12379,8 +14089,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.stage_qualifier is not None and not isinstance(self.stage_qualifier, LifeStageId):\n", " self.stage_qualifier = LifeStageId(self.stage_qualifier)\n", @@ -12388,6 +14098,9 @@ " if self.quantifier_qualifier is not None and not isinstance(self.quantifier_qualifier, OntologyClassId):\n", " self.quantifier_qualifier = OntologyClassId(self.quantifier_qualifier)\n", "\n", + " if self.object_specialization_qualifier is not None and not isinstance(self.object_specialization_qualifier, URIorCURIE):\n", + " self.object_specialization_qualifier = URIorCURIE(self.object_specialization_qualifier)\n", + "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -12400,7 +14113,7 @@ " An association between a sequence variant and a treatment or health intervention. The treatment object itself\n", " encompasses both the disease and the drug used.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SequenceVariantModulatesTreatmentAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SequenceVariantModulatesTreatmentAssociation\"\n", @@ -12408,13 +14121,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.SequenceVariantModulatesTreatmentAssociation\n", "\n", " id: Union[str, SequenceVariantModulatesTreatmentAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, SequenceVariantId] = None\n", " object: Union[str, TreatmentId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, SequenceVariantId):\n", @@ -12437,7 +14150,7 @@ " An association between a macromolecular machine mixin (gene, gene product or complex of gene products) and either\n", " a molecular activity, a biological process or a cellular location in which a function is executed.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"FunctionalAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:FunctionalAssociation\"\n", @@ -12445,13 +14158,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.FunctionalAssociation\n", "\n", " id: Union[str, FunctionalAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, MacromolecularMachineMixin] = None\n", " object: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, FunctionalAssociationId):\n", @@ -12478,7 +14191,7 @@ " \"\"\"\n", " an association which has a macromolecular machine mixin as a subject\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularMachineToEntityAssociationMixin\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MacromolecularMachineToEntityAssociationMixin\"\n", @@ -12486,11 +14199,11 @@ " class_model_uri: ClassVar[URIRef] = DIST.MacromolecularMachineToEntityAssociationMixin\n", "\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, NamedThingId):\n", @@ -12498,8 +14211,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -12519,7 +14232,7 @@ " (as represented in the GO molecular function branch), where the entity carries out the activity, or contributes to\n", " its execution.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularMachineToMolecularActivityAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MacromolecularMachineToMolecularActivityAssociation\"\n", @@ -12527,14 +14240,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.MacromolecularMachineToMolecularActivityAssociation\n", "\n", " id: Union[str, MacromolecularMachineToMolecularActivityAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, MacromolecularMachineMixin] = None\n", " object: Union[str, MolecularActivityId] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MacromolecularMachineToMolecularActivityAssociationId):\n", @@ -12542,8 +14255,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -12566,7 +14279,7 @@ " or pathway (as represented in the GO biological process branch), where the entity carries out some part of the\n", " process, regulates it, or acts upstream of it.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularMachineToBiologicalProcessAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MacromolecularMachineToBiologicalProcessAssociation\"\n", @@ -12574,14 +14287,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.MacromolecularMachineToBiologicalProcessAssociation\n", "\n", " id: Union[str, MacromolecularMachineToBiologicalProcessAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, MacromolecularMachineMixin] = None\n", " object: Union[str, BiologicalProcessId] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MacromolecularMachineToBiologicalProcessAssociationId):\n", @@ -12589,8 +14302,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -12613,7 +14326,7 @@ " (as represented in the GO cellular component branch), where the entity carries out its function in the cellular\n", " component.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MacromolecularMachineToCellularComponentAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MacromolecularMachineToCellularComponentAssociation\"\n", @@ -12621,14 +14334,14 @@ " class_model_uri: ClassVar[URIRef] = DIST.MacromolecularMachineToCellularComponentAssociation\n", "\n", " id: Union[str, MacromolecularMachineToCellularComponentAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[dict, MacromolecularMachineMixin] = None\n", " object: Union[str, CellularComponentId] = None\n", " species_context_qualifier: Optional[Union[str, OrganismTaxonId]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MacromolecularMachineToCellularComponentAssociationId):\n", @@ -12636,8 +14349,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -12659,7 +14372,7 @@ " Added in response to capturing relationship between microbiome activities as measured via measurements of blood\n", " analytes as collected via blood and stool samples\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MolecularActivityToChemicalEntityAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MolecularActivityToChemicalEntityAssociation\"\n", @@ -12667,13 +14380,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.MolecularActivityToChemicalEntityAssociation\n", "\n", " id: Union[str, MolecularActivityToChemicalEntityAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, MolecularActivityId] = None\n", " object: Union[str, ChemicalEntityId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MolecularActivityToChemicalEntityAssociationId):\n", @@ -12701,7 +14414,7 @@ " Added in response to capturing relationship between microbiome activities as measured via measurements of blood\n", " analytes as collected via blood and stool samples\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"MolecularActivityToMolecularActivityAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:MolecularActivityToMolecularActivityAssociation\"\n", @@ -12709,13 +14422,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.MolecularActivityToMolecularActivityAssociation\n", "\n", " id: Union[str, MolecularActivityToMolecularActivityAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, MolecularActivityId] = None\n", " object: Union[str, MolecularActivityId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, MolecularActivityToMolecularActivityAssociationId):\n", @@ -12739,7 +14452,11 @@ "\n", "@dataclass(repr=False)\n", "class GeneToGoTermAssociation(FunctionalAssociation):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " A functional association between a gene (or gene product or macromolecular complex) and a Gene Ontology (GO) term\n", + " describing the molecular function, biological process, or cellular component in which it participates.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToGoTermAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToGoTermAssociation\"\n", @@ -12747,13 +14464,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.GeneToGoTermAssociation\n", "\n", " id: Union[str, GeneToGoTermAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, GeneId] = None\n", " object: Union[str, OntologyClassId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToGoTermAssociationId):\n", @@ -12777,7 +14494,11 @@ "\n", "@dataclass(repr=False)\n", "class EntityToDiseaseAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between any entity and a disease, capturing clinical context such as approval status, research\n", + " phase, FDA regulatory approvals, and number of cases.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToDiseaseAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToDiseaseAssociation\"\n", @@ -12786,14 +14507,16 @@ "\n", " id: Union[str, EntityToDiseaseAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " clinical_approval_status: Optional[Union[str, \"ClinicalApprovalStatusEnum\"]] = None\n", " max_research_phase: Optional[Union[str, \"ResearchPhaseEnum\"]] = None\n", + " FDA_regulatory_approvals: Optional[Union[str, list[str]]] = empty_list()\n", + " number_of_cases: Optional[int] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EntityToDiseaseAssociationId):\n", @@ -12805,6 +14528,13 @@ " if self.max_research_phase is not None and not isinstance(self.max_research_phase, ResearchPhaseEnum):\n", " self.max_research_phase = ResearchPhaseEnum(self.max_research_phase)\n", "\n", + " if not isinstance(self.FDA_regulatory_approvals, list):\n", + " self.FDA_regulatory_approvals = [self.FDA_regulatory_approvals] if self.FDA_regulatory_approvals is not None else []\n", + " self.FDA_regulatory_approvals = [v if isinstance(v, str) else str(v) for v in self.FDA_regulatory_approvals]\n", + "\n", + " if self.number_of_cases is not None and not isinstance(self.number_of_cases, int):\n", + " self.number_of_cases = int(self.number_of_cases)\n", + "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -12813,7 +14543,11 @@ "\n", "@dataclass(repr=False)\n", "class EntityToPhenotypicFeatureAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An association between any entity and a phenotypic feature, capturing clinical context such as approval status,\n", + " research phase, FDA regulatory approvals, and number of cases.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"EntityToPhenotypicFeatureAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:EntityToPhenotypicFeatureAssociation\"\n", @@ -12822,14 +14556,16 @@ "\n", " id: Union[str, EntityToPhenotypicFeatureAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " clinical_approval_status: Optional[Union[str, \"ClinicalApprovalStatusEnum\"]] = None\n", " max_research_phase: Optional[Union[str, \"ResearchPhaseEnum\"]] = None\n", + " FDA_regulatory_approvals: Optional[Union[str, list[str]]] = empty_list()\n", + " number_of_cases: Optional[int] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, EntityToPhenotypicFeatureAssociationId):\n", @@ -12841,6 +14577,13 @@ " if self.max_research_phase is not None and not isinstance(self.max_research_phase, ResearchPhaseEnum):\n", " self.max_research_phase = ResearchPhaseEnum(self.max_research_phase)\n", "\n", + " if not isinstance(self.FDA_regulatory_approvals, list):\n", + " self.FDA_regulatory_approvals = [self.FDA_regulatory_approvals] if self.FDA_regulatory_approvals is not None else []\n", + " self.FDA_regulatory_approvals = [v if isinstance(v, str) else str(v) for v in self.FDA_regulatory_approvals]\n", + "\n", + " if self.number_of_cases is not None and not isinstance(self.number_of_cases, int):\n", + " self.number_of_cases = int(self.number_of_cases)\n", + "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -12852,7 +14595,7 @@ " \"\"\"\n", " An association between a sequence feature and a nucleic acid entity it is localized to.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SequenceAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SequenceAssociation\"\n", @@ -12861,12 +14604,12 @@ "\n", " id: Union[str, SequenceAssociationId] = None\n", " subject: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SequenceAssociationId):\n", @@ -12884,7 +14627,7 @@ " A relationship between a sequence feature and a nucleic acid entity it is localized to. The reference entity may\n", " be a chromosome, chromosome region or information entity such as a contig.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GenomicSequenceLocalization\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GenomicSequenceLocalization\"\n", @@ -12896,14 +14639,14 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, NucleicAcidEntityId] = None\n", " object: Union[str, NucleicAcidEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " start_interbase_coordinate: Optional[int] = None\n", " end_interbase_coordinate: Optional[int] = None\n", " genome_build: Optional[Union[str, \"StrandEnum\"]] = None\n", " strand: Optional[Union[str, \"StrandEnum\"]] = None\n", " phase: Optional[Union[str, \"PhaseEnum\"]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GenomicSequenceLocalizationId):\n", @@ -12921,8 +14664,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.start_interbase_coordinate is not None and not isinstance(self.start_interbase_coordinate, int):\n", " self.start_interbase_coordinate = int(self.start_interbase_coordinate)\n", @@ -12950,7 +14693,7 @@ " \"\"\"\n", " For example, a particular exon is part of a particular transcript or gene\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"SequenceFeatureRelationship\"]\n", " class_class_curie: ClassVar[str] = \"biolink:SequenceFeatureRelationship\"\n", @@ -12958,13 +14701,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.SequenceFeatureRelationship\n", "\n", " id: Union[str, SequenceFeatureRelationshipId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, NucleicAcidEntityId] = None\n", " object: Union[str, NucleicAcidEntityId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, SequenceFeatureRelationshipId):\n", @@ -12991,7 +14734,7 @@ " \"\"\"\n", " A gene is a collection of transcripts\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"TranscriptToGeneRelationship\"]\n", " class_class_curie: ClassVar[str] = \"biolink:TranscriptToGeneRelationship\"\n", @@ -12999,13 +14742,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.TranscriptToGeneRelationship\n", "\n", " id: Union[str, TranscriptToGeneRelationshipId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, TranscriptId] = None\n", " object: Union[str, GeneId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, TranscriptToGeneRelationshipId):\n", @@ -13032,7 +14775,7 @@ " \"\"\"\n", " A gene is transcribed and potentially translated to a gene product\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneToGeneProductRelationship\"]\n", " class_class_curie: ClassVar[str] = \"biolink:GeneToGeneProductRelationship\"\n", @@ -13044,9 +14787,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, GeneId] = None\n", " object: Union[dict, GeneProductMixin] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, GeneToGeneProductRelationshipId):\n", @@ -13064,8 +14807,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -13078,7 +14821,7 @@ " \"\"\"\n", " A transcript is formed from multiple exons\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ExonToTranscriptRelationship\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ExonToTranscriptRelationship\"\n", @@ -13086,13 +14829,13 @@ " class_model_uri: ClassVar[URIRef] = DIST.ExonToTranscriptRelationship\n", "\n", " id: Union[str, ExonToTranscriptRelationshipId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, ExonId] = None\n", " object: Union[str, TranscriptId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ExonToTranscriptRelationshipId):\n", @@ -13119,7 +14862,7 @@ " \"\"\"\n", " A regulatory relationship between two genes\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation\"\n", @@ -13129,12 +14872,12 @@ " id: Union[str, ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " subject: Union[dict, ChemicalEntityOrGeneOrGeneProduct] = None\n", " object: Union[dict, GeneOrGeneProduct] = None\n", " object_direction_qualifier: Optional[Union[str, \"DirectionQualifierEnum\"]] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociationId):\n", @@ -13142,8 +14885,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -13166,7 +14909,11 @@ "\n", "@dataclass(repr=False)\n", "class AnatomicalEntityToAnatomicalEntityAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An abstract parent class for associations between two anatomical entities, such as part-of, develops-from, or\n", + " other mereological and ontogenic relationships.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AnatomicalEntityToAnatomicalEntityAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:AnatomicalEntityToAnatomicalEntityAssociation\"\n", @@ -13174,13 +14921,58 @@ " class_model_uri: ClassVar[URIRef] = DIST.AnatomicalEntityToAnatomicalEntityAssociation\n", "\n", " id: Union[str, AnatomicalEntityToAnatomicalEntityAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, AnatomicalEntityId] = None\n", + " object: Union[str, AnatomicalEntityId] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, AnatomicalEntityId):\n", + " self.subject = AnatomicalEntityId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, AnatomicalEntityId):\n", + " self.object = AnatomicalEntityId(self.object)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class AnatomicalEntityHasPartAnatomicalEntityAssociation(AnatomicalEntityToAnatomicalEntityAssociation):\n", + " \"\"\"\n", + " A relationship between two anatomical entities where the relationship is mereological, i.e the two entities are\n", + " related by parthood, that is, the subject is has the object entity as a part (the expected predicate is\n", + " \"biolink:has_part\" or suitable predicate slots inheriting from it, i.e., \"biolink:has_plasma_membrane_part\",\n", + " \"biolink:has_variant_part\", etc.). This includes relationships between cells and cellular components, between\n", + " issues and cells, whole organisms and tissues.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AnatomicalEntityHasPartAnatomicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:AnatomicalEntityHasPartAnatomicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"anatomical entity has part anatomical entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.AnatomicalEntityHasPartAnatomicalEntityAssociation\n", + "\n", + " id: Union[str, AnatomicalEntityHasPartAnatomicalEntityAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, AnatomicalEntityId] = None\n", " object: Union[str, AnatomicalEntityId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, AnatomicalEntityHasPartAnatomicalEntityAssociationId):\n", + " self.id = AnatomicalEntityHasPartAnatomicalEntityAssociationId(self.id)\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, AnatomicalEntityId):\n", @@ -13191,6 +14983,11 @@ " if not isinstance(self.object, AnatomicalEntityId):\n", " self.object = AnatomicalEntityId(self.object)\n", "\n", + " if self._is_empty(self.predicate):\n", + " self.MissingRequiredField(\"predicate\")\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", " self.category = [self.category] if self.category is not None else []\n", @@ -13198,31 +14995,33 @@ "\n", "\n", "@dataclass(repr=False)\n", - "class AnatomicalEntityToAnatomicalEntityPartOfAssociation(AnatomicalEntityToAnatomicalEntityAssociation):\n", + "class AnatomicalEntityPartOfAnatomicalEntityAssociation(AnatomicalEntityToAnatomicalEntityAssociation):\n", " \"\"\"\n", " A relationship between two anatomical entities where the relationship is mereological, i.e the two entities are\n", - " related by parthood. This includes relationships between cellular components and cells, between cells and tissues,\n", - " tissues and whole organisms\n", + " related by parthood, that is, the subject is a part of the object entity (the expected predicate is\n", + " \"biolink:part_of\" or suitable predicate slots inheriting from it, i.e., \"biolink:plasma_membrane_part_of\",\n", + " \"biolink:variant_part_of\", etc.). This includes relationships between cellular components and cells, between cells\n", + " and tissues, tissues and whole organisms.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", - " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AnatomicalEntityToAnatomicalEntityPartOfAssociation\"]\n", - " class_class_curie: ClassVar[str] = \"biolink:AnatomicalEntityToAnatomicalEntityPartOfAssociation\"\n", - " class_name: ClassVar[str] = \"anatomical entity to anatomical entity part of association\"\n", - " class_model_uri: ClassVar[URIRef] = DIST.AnatomicalEntityToAnatomicalEntityPartOfAssociation\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AnatomicalEntityPartOfAnatomicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:AnatomicalEntityPartOfAnatomicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"anatomical entity part of anatomical entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.AnatomicalEntityPartOfAnatomicalEntityAssociation\n", "\n", - " id: Union[str, AnatomicalEntityToAnatomicalEntityPartOfAssociationId] = None\n", + " id: Union[str, AnatomicalEntityPartOfAnatomicalEntityAssociationId] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, AnatomicalEntityId] = None\n", " object: Union[str, AnatomicalEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, AnatomicalEntityToAnatomicalEntityPartOfAssociationId):\n", - " self.id = AnatomicalEntityToAnatomicalEntityPartOfAssociationId(self.id)\n", + " if not isinstance(self.id, AnatomicalEntityPartOfAnatomicalEntityAssociationId):\n", + " self.id = AnatomicalEntityPartOfAnatomicalEntityAssociationId(self.id)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -13236,8 +15035,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -13252,7 +15051,7 @@ " related by development. A number of different relationship types can be used to specify the precise nature of the\n", " relationship.\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"AnatomicalEntityToAnatomicalEntityOntogenicAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:AnatomicalEntityToAnatomicalEntityOntogenicAssociation\"\n", @@ -13264,9 +15063,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, AnatomicalEntityId] = None\n", " object: Union[str, AnatomicalEntityId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, AnatomicalEntityToAnatomicalEntityOntogenicAssociationId):\n", @@ -13284,8 +15083,90 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation(Association):\n", + " \"\"\"\n", + " An association between a gene or gene product or gene family and an anatomical entity.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"gene or gene product or gene family to anatomical entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation\n", + "\n", + " id: Union[str, GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociationId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[dict, GeneOrGeneProductOrGeneFamily] = None\n", + " object: Union[str, AnatomicalEntityId] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociationId):\n", + " self.id = GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, GeneOrGeneProductOrGeneFamily):\n", + " self.subject = GeneOrGeneProductOrGeneFamily(**as_dict(self.subject))\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, AnatomicalEntityId):\n", + " self.object = AnatomicalEntityId(self.object)\n", + "\n", + " super().__post_init__(**kwargs)\n", + " if not isinstance(self.category, list):\n", + " self.category = [self.category] if self.category is not None else []\n", + " self.category = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.category]\n", + "\n", + "\n", + "@dataclass(repr=False)\n", + "class BiologicalProcessOrActivityToAnatomicalEntityAssociation(Association):\n", + " \"\"\"\n", + " An association between a biological process or activity and an anatomical entity.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = BIOLINK[\"BiologicalProcessOrActivityToAnatomicalEntityAssociation\"]\n", + " class_class_curie: ClassVar[str] = \"biolink:BiologicalProcessOrActivityToAnatomicalEntityAssociation\"\n", + " class_name: ClassVar[str] = \"biological process or activity to anatomical entity association\"\n", + " class_model_uri: ClassVar[URIRef] = DIST.BiologicalProcessOrActivityToAnatomicalEntityAssociation\n", + "\n", + " id: Union[str, BiologicalProcessOrActivityToAnatomicalEntityAssociationId] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", + " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", + " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", + " subject: Union[str, BiologicalProcessOrActivityId] = None\n", + " object: Union[str, AnatomicalEntityId] = None\n", + "\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", + " if self._is_empty(self.id):\n", + " self.MissingRequiredField(\"id\")\n", + " if not isinstance(self.id, BiologicalProcessOrActivityToAnatomicalEntityAssociationId):\n", + " self.id = BiologicalProcessOrActivityToAnatomicalEntityAssociationId(self.id)\n", + "\n", + " if self._is_empty(self.subject):\n", + " self.MissingRequiredField(\"subject\")\n", + " if not isinstance(self.subject, BiologicalProcessOrActivityId):\n", + " self.subject = BiologicalProcessOrActivityId(self.subject)\n", + "\n", + " if self._is_empty(self.object):\n", + " self.MissingRequiredField(\"object\")\n", + " if not isinstance(self.object, AnatomicalEntityId):\n", + " self.object = AnatomicalEntityId(self.object)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -13298,7 +15179,7 @@ " \"\"\"\n", " An association between an organism taxon and another entity\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismTaxonToEntityAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismTaxonToEntityAssociation\"\n", @@ -13306,10 +15187,10 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismTaxonToEntityAssociation\n", "\n", " subject: Union[str, OrganismTaxonId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " object: Union[str, NamedThingId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, OrganismTaxonId):\n", @@ -13317,8 +15198,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.object):\n", " self.MissingRequiredField(\"object\")\n", @@ -13333,7 +15214,7 @@ " \"\"\"\n", " A relationship between two organism taxon nodes\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismTaxonToOrganismTaxonAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismTaxonToOrganismTaxonAssociation\"\n", @@ -13341,17 +15222,17 @@ " class_model_uri: ClassVar[URIRef] = DIST.OrganismTaxonToOrganismTaxonAssociation\n", "\n", " id: Union[str, OrganismTaxonToOrganismTaxonAssociationId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " knowledge_level: Union[str, \"KnowledgeLevelEnum\"] = None\n", " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, OrganismTaxonId] = None\n", " object: Union[str, OrganismTaxonId] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", @@ -13374,7 +15255,7 @@ " \"\"\"\n", " A child-parent relationship between two taxa. For example: Homo sapiens subclass_of Homo\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismTaxonToOrganismTaxonSpecialization\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismTaxonToOrganismTaxonSpecialization\"\n", @@ -13386,9 +15267,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, OrganismTaxonId] = None\n", " object: Union[str, OrganismTaxonId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OrganismTaxonToOrganismTaxonSpecializationId):\n", @@ -13406,8 +15287,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -13422,7 +15303,7 @@ " parasitism), or it may be non-symbiotic. Example: plague transmitted_by flea; cattle domesticated_by Homo sapiens;\n", " plague infects Homo sapiens\n", " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismTaxonToOrganismTaxonInteraction\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismTaxonToOrganismTaxonInteraction\"\n", @@ -13434,10 +15315,10 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, OrganismTaxonId] = None\n", " object: Union[str, OrganismTaxonId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", " associated_environmental_context: Optional[str] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, OrganismTaxonToOrganismTaxonInteractionId):\n", @@ -13455,8 +15336,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " if self.associated_environmental_context is not None and not isinstance(self.associated_environmental_context, str):\n", " self.associated_environmental_context = str(self.associated_environmental_context)\n", @@ -13469,7 +15350,11 @@ "\n", "@dataclass(repr=False)\n", "class OrganismTaxonToEnvironmentAssociation(Association):\n", - " _inherited_slots: ClassVar[List[str]] = []\n", + " \"\"\"\n", + " An abstract association between an organism taxon and an environmental context (e.g., a habitat, biome, or\n", + " ecological setting) in which the taxon occurs.\n", + " \"\"\"\n", + " _inherited_slots: ClassVar[list[str]] = []\n", "\n", " class_class_uri: ClassVar[URIRef] = BIOLINK[\"OrganismTaxonToEnvironmentAssociation\"]\n", " class_class_curie: ClassVar[str] = \"biolink:OrganismTaxonToEnvironmentAssociation\"\n", @@ -13481,9 +15366,9 @@ " agent_type: Union[str, \"AgentTypeEnum\"] = None\n", " subject: Union[str, OrganismTaxonId] = None\n", " object: Union[str, NamedThingId] = None\n", - " predicate: Union[str, PredicateType] = None\n", + " predicate: Union[str, URIorCURIE] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.subject):\n", " self.MissingRequiredField(\"subject\")\n", " if not isinstance(self.subject, OrganismTaxonId):\n", @@ -13496,8 +15381,8 @@ "\n", " if self._is_empty(self.predicate):\n", " self.MissingRequiredField(\"predicate\")\n", - " if not isinstance(self.predicate, PredicateType):\n", - " self.predicate = PredicateType(self.predicate)\n", + " if not isinstance(self.predicate, URIorCURIE):\n", + " self.predicate = URIorCURIE(self.predicate)\n", "\n", " super().__post_init__(**kwargs)\n", " if not isinstance(self.category, list):\n", @@ -13506,8 +15391,131 @@ "\n", "\n", "# Enumerations\n", - "class ApprovalStatusEnum(EnumDefinitionImpl):\n", + "class BinaryRelationEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " Mathematical binary relation qualifiers of a value in its context.\n", + " \"\"\"\n", + " less_than = PermissibleValue(text=\"less_than\")\n", + " equal_to = PermissibleValue(text=\"equal_to\")\n", + " greater_than = PermissibleValue(text=\"greater_than\")\n", + "\n", + " _defn = EnumDefinition(\n", + " name=\"BinaryRelationEnum\",\n", + " description=\"Mathematical binary relation qualifiers of a value in its context.\",\n", + " )\n", + "\n", + "class ResponseEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " A response to a treatment or intervention\n", + " \"\"\"\n", + " therapeutic_response = PermissibleValue(\n", + " text=\"therapeutic_response\",\n", + " description=\"A positive response to a treatment or intervention\")\n", + " negative = PermissibleValue(\n", + " text=\"negative\",\n", + " description=\"A negative response to a treatment or intervention\")\n", + "\n", + " _defn = EnumDefinition(\n", + " name=\"ResponseEnum\",\n", + " description=\"A response to a treatment or intervention\",\n", + " )\n", "\n", + "class ResponseTargetEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " The target of a treatment or intervention\n", + " \"\"\"\n", + " cohort = PermissibleValue(\n", + " text=\"cohort\",\n", + " description=\"A group of individuals that are the target of a treatment or intervention\")\n", + " individual = PermissibleValue(\n", + " text=\"individual\",\n", + " description=\"An individual that is the target of a treatment or intervention\")\n", + " sample = PermissibleValue(\n", + " text=\"sample\",\n", + " description=\"A biological materialsample that is the target of a treatment or intervention\")\n", + "\n", + " _defn = EnumDefinition(\n", + " name=\"ResponseTargetEnum\",\n", + " description=\"The target of a treatment or intervention\",\n", + " )\n", + "\n", + " @classmethod\n", + " def _addvals(cls):\n", + " setattr(cls, \"cell line\",\n", + " PermissibleValue(\n", + " text=\"cell line\",\n", + " description=\"A cell line that is the target of a treatment or intervention\"))\n", + "\n", + "class ClinicalTrialStatusEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " Enumeration of clinical trial statuses indicating the recruitment state, availability, or regulatory status of a\n", + " clinical study or intervention.\n", + " \"\"\"\n", + " ACTIVE_NOT_RECRUITING = PermissibleValue(\n", + " text=\"ACTIVE_NOT_RECRUITING\",\n", + " description=\"The study is ongoing but not currently recruiting participants.\")\n", + " APPROVED_FOR_MARKETING = PermissibleValue(\n", + " text=\"APPROVED_FOR_MARKETING\",\n", + " description=\"The intervention has received regulatory approval for marketing.\")\n", + " AVAILABLE = PermissibleValue(\n", + " text=\"AVAILABLE\",\n", + " description=\"The intervention or data is available for use or distribution.\")\n", + " COMPLETED = PermissibleValue(\n", + " text=\"COMPLETED\",\n", + " description=\"The study has ended normally and participants are no longer being examined or treated.\")\n", + " ENROLLING_BY_INVITATION = PermissibleValue(\n", + " text=\"ENROLLING_BY_INVITATION\",\n", + " description=\"Participants are being enrolled by invitation only.\")\n", + " NO_LONGER_AVAILABLE = PermissibleValue(\n", + " text=\"NO_LONGER_AVAILABLE\",\n", + " description=\"The intervention or data is no longer available.\")\n", + " NOT_YET_RECRUITING = PermissibleValue(\n", + " text=\"NOT_YET_RECRUITING\",\n", + " description=\"The study has not yet started recruiting participants.\")\n", + " RECRUITING = PermissibleValue(\n", + " text=\"RECRUITING\",\n", + " description=\"The study is currently recruiting participants.\")\n", + " SUSPENDED = PermissibleValue(\n", + " text=\"SUSPENDED\",\n", + " description=\"The study has been temporarily halted but may resume.\")\n", + " TEMPORARILY_NOT_AVAILABLE = PermissibleValue(\n", + " text=\"TEMPORARILY_NOT_AVAILABLE\",\n", + " description=\"The intervention or data is not currently available but may become available later.\")\n", + " TERMINATED = PermissibleValue(\n", + " text=\"TERMINATED\",\n", + " description=\"The study has stopped prematurely and will not start again.\")\n", + " UNKNOWN = PermissibleValue(\n", + " text=\"UNKNOWN\",\n", + " description=\"The recruitment or availability status is unknown.\")\n", + " WITHDRAWN = PermissibleValue(\n", + " text=\"WITHDRAWN\",\n", + " description=\"The study was halted before enrolling its first participant.\")\n", + "\n", + " _defn = EnumDefinition(\n", + " name=\"ClinicalTrialStatusEnum\",\n", + " description=\"\"\"Enumeration of clinical trial statuses indicating the recruitment state, availability, or regulatory status of a clinical study or intervention.\"\"\",\n", + " )\n", + "\n", + "class ClinicalTrialAgeStageEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " Enumeration of age stages or populations commonly used in clinical trials to categorize participant demographics\n", + " and target populations.\n", + " \"\"\"\n", + " adult = PermissibleValue(text=\"adult\")\n", + " child = PermissibleValue(text=\"child\")\n", + " older_adult = PermissibleValue(text=\"older_adult\")\n", + "\n", + " _defn = EnumDefinition(\n", + " name=\"ClinicalTrialAgeStageEnum\",\n", + " description=\"\"\"Enumeration of age stages or populations commonly used in clinical trials to categorize participant demographics and target populations.\"\"\",\n", + " )\n", + "\n", + "class ApprovalStatusEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " An enumeration of regulatory and development milestones for a drug or therapeutic, spanning discovery, preclinical\n", + " research, FDA clinical trial phases (1-4), special review designations (e.g., fast track, breakthrough therapy,\n", + " priority review), regular FDA approval, and post-approval withdrawal.\n", + " \"\"\"\n", " discovery_and_development_phase = PermissibleValue(\n", " text=\"discovery_and_development_phase\",\n", " description=\"\"\"Discovery & Development Phase. Discovery involves researchers finding new possibilities for medication through testing molecular compounds, noting unexpected effects from existing treatments, or the creation of new technology that allows novel ways of targeting medical products to sites in the body. Drug development occurs after researchers identify potential compounds for experiments.\"\"\")\n", @@ -13554,10 +15562,14 @@ "\n", " _defn = EnumDefinition(\n", " name=\"ApprovalStatusEnum\",\n", + " description=\"\"\"An enumeration of regulatory and development milestones for a drug or therapeutic, spanning discovery, preclinical research, FDA clinical trial phases (1-4), special review designations (e.g., fast track, breakthrough therapy, priority review), regular FDA approval, and post-approval withdrawal.\"\"\",\n", " )\n", "\n", "class ClinicalApprovalStatusEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration describing whether a chemical or therapy is approved for use in treating a specific condition\n", + " (e.g., FDA-approved for a condition, not approved, off-label use, or withdrawn following approval).\n", + " \"\"\"\n", " approved_for_condition = PermissibleValue(text=\"approved_for_condition\")\n", " fda_approved_for_condition = PermissibleValue(text=\"fda_approved_for_condition\")\n", " not_approved_for_condition = PermissibleValue(text=\"not_approved_for_condition\")\n", @@ -13567,10 +15579,14 @@ "\n", " _defn = EnumDefinition(\n", " name=\"ClinicalApprovalStatusEnum\",\n", + " description=\"\"\"An enumeration describing whether a chemical or therapy is approved for use in treating a specific condition (e.g., FDA-approved for a condition, not approved, off-label use, or withdrawn following approval).\"\"\",\n", " )\n", "\n", "class ResearchPhaseEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of research phases describing the stage of investigation for a drug or therapy, spanning\n", + " preclinical research through clinical trial phases 1 through 4 (including phase 1/2 and phase 2/3 combinations).\n", + " \"\"\"\n", " pre_clinical_research_phase = PermissibleValue(\n", " text=\"pre_clinical_research_phase\",\n", " description=\"\"\"Biolink 'pre_clinical_research' is the union of both the `FDA discovery and development phase` and `FDA preclinical research phase`. Discovery involves researchers finding new possibilities for medication through testing molecular compounds, noting unexpected effects from existing treatments, or the creation of new technology that allows novel ways of targeting medical products to sites in the body. Drug development occurs after researchers identify potential compounds for experiments Preclinical Research Phase. Once researchers have examined the possibilities a new drug may contain, they must do preliminary research to determine its potential for harm (toxicity). This is categorized as preclinical research and can be one of two types: in vitro or in vivo.\"\"\")\n", @@ -13580,9 +15596,15 @@ " clinical_trial_phase_1 = PermissibleValue(\n", " text=\"clinical_trial_phase_1\",\n", " description=\"\"\"In the FDA Clinical Trial Phase, the Clinical Trial Phase 1 involves 20 – 100 study participants and lasts several months. This phase is used to determine the safety and dosage of the drug, and about 70% of these drugs move on to the next clinical research phase.\"\"\")\n", + " clinical_trial_phase_1_to_2 = PermissibleValue(\n", + " text=\"clinical_trial_phase_1_to_2\",\n", + " description=\"\"\"A study that tests the safety, side effects, and best dose of a new treatment. Phase I/II clinical trials also test how well a certain type of cancer or other disease responds to a new treatment. In the phase II part of the clinical trial, patients usually receive the highest dose of treatment that did not cause harmful side effects in the phase I part of the clinical trial. Combining phases I and II may allow research questions to be answered more quickly or with fewer patients. Also called phase 1/phase 2 clinical trial.\"\"\")\n", " clinical_trial_phase_2 = PermissibleValue(\n", " text=\"clinical_trial_phase_2\",\n", " description=\"\"\"In the FDA Clinical Trial Phase, the Clinical Trial Phase 2 involves up to several hundred people, who must have the disease or condition the drug supposes to treat. This phase can last from a few months to two years, and its purpose is to monitor the efficacy of the drug, as well as note side effects that may occur.\"\"\")\n", + " clinical_trial_phase_2_to_3 = PermissibleValue(\n", + " text=\"clinical_trial_phase_2_to_3\",\n", + " description=\"\"\"A study that tests how well a new treatment works for a certain type of cancer or other disease and compares the new treatment with a standard treatment. Phase II/III clinical trials may also provide more information about the safety and side effects of the new treatment. Combining phases II and III may allow research questions to be answered more quickly or with fewer patients. Also called phase 2/phase 3 clinical trial.\"\"\")\n", " clinical_trial_phase_3 = PermissibleValue(\n", " text=\"clinical_trial_phase_3\",\n", " description=\"\"\"In the FDA Clinical Trial Phase, the Clinical Trial Phase 3 involves 300 – 3000 volunteers and can last up to four years. It is used to continue monitoring the efficacy of the drug, as well as exploring any longer-term adverse reactions.\"\"\")\n", @@ -13593,10 +15615,14 @@ "\n", " _defn = EnumDefinition(\n", " name=\"ResearchPhaseEnum\",\n", + " description=\"\"\"An enumeration of research phases describing the stage of investigation for a drug or therapy, spanning preclinical research through clinical trial phases 1 through 4 (including phase 1/2 and phase 2/3 combinations).\"\"\",\n", " )\n", "\n", "class DirectionQualifierEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of values that qualify a change or effect by its direction, i.e., whether the referenced quantity\n", + " or activity is increased (including up-regulated) or decreased (including down-regulated).\n", + " \"\"\"\n", " increased = PermissibleValue(text=\"increased\")\n", " upregulated = PermissibleValue(text=\"upregulated\")\n", " decreased = PermissibleValue(text=\"decreased\")\n", @@ -13604,32 +15630,48 @@ "\n", " _defn = EnumDefinition(\n", " name=\"DirectionQualifierEnum\",\n", + " description=\"\"\"An enumeration of values that qualify a change or effect by its direction, i.e., whether the referenced quantity or activity is increased (including up-regulated) or decreased (including down-regulated).\"\"\",\n", " )\n", "\n", "class ChemicalEntityDerivativeEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of relationships by which one chemical entity is derived from another, e.g., a metabolite produced\n", + " from a parent compound.\n", + " \"\"\"\n", " metabolite = PermissibleValue(text=\"metabolite\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"ChemicalEntityDerivativeEnum\",\n", + " description=\"\"\"An enumeration of relationships by which one chemical entity is derived from another, e.g., a metabolite produced from a parent compound.\"\"\",\n", " )\n", "\n", "class ChemicalOrGeneOrGeneProductFormOrVariantEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration used as a qualifier to indicate a specific form or variant of a chemical, gene, or gene product\n", + " involved in an association (e.g., modified form, loss-of-function variant, gain-of-function variant,\n", + " dominant-negative variant, polymorphic form, SNP form, mutant form, or analog form).\n", + " \"\"\"\n", " genetic_variant_form = PermissibleValue(text=\"genetic_variant_form\")\n", " modified_form = PermissibleValue(text=\"modified_form\")\n", " loss_of_function_variant_form = PermissibleValue(text=\"loss_of_function_variant_form\")\n", + " non_loss_of_function_variant_form = PermissibleValue(text=\"non_loss_of_function_variant_form\")\n", " gain_of_function_variant_form = PermissibleValue(text=\"gain_of_function_variant_form\")\n", + " dominant_negative_variant_form = PermissibleValue(text=\"dominant_negative_variant_form\")\n", " polymorphic_form = PermissibleValue(text=\"polymorphic_form\")\n", " snp_form = PermissibleValue(text=\"snp_form\")\n", + " mutant_form = PermissibleValue(text=\"mutant_form\")\n", " analog_form = PermissibleValue(text=\"analog_form\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"ChemicalOrGeneOrGeneProductFormOrVariantEnum\",\n", + " description=\"\"\"An enumeration used as a qualifier to indicate a specific form or variant of a chemical, gene, or gene product involved in an association (e.g., modified form, loss-of-function variant, gain-of-function variant, dominant-negative variant, polymorphic form, SNP form, mutant form, or analog form).\"\"\",\n", " )\n", "\n", "class GeneOrGeneProductOrChemicalPartQualifierEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration used as a qualifier to indicate a particular structural or functional part of a gene, gene product,\n", + " or chemical (e.g., 3' UTR, 5' UTR, poly-A tail, promoter, enhancer, exon, or intron).\n", + " \"\"\"\n", " polya_tail = PermissibleValue(text=\"polya_tail\")\n", " promoter = PermissibleValue(text=\"promoter\")\n", " enhancer = PermissibleValue(text=\"enhancer\")\n", @@ -13638,6 +15680,7 @@ "\n", " _defn = EnumDefinition(\n", " name=\"GeneOrGeneProductOrChemicalPartQualifierEnum\",\n", + " description=\"\"\"An enumeration used as a qualifier to indicate a particular structural or functional part of a gene, gene product, or chemical (e.g., 3' UTR, 5' UTR, poly-A tail, promoter, enhancer, exon, or intron).\"\"\",\n", " )\n", "\n", " @classmethod\n", @@ -13648,7 +15691,13 @@ " PermissibleValue(text=\"5_prime_utr\"))\n", "\n", "class GeneOrGeneProductOrChemicalEntityAspectEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration used as a qualifier to indicate the specific aspect of a gene, gene product, or chemical entity\n", + " that is affected or measured in an association. Values cover activity and abundance (expression, synthesis,\n", + " degradation, stability, localization, transport), molecular interactions, and a wide range of molecular\n", + " modifications such as phosphorylation, methylation, acetylation, ubiquitination, and other post-translational or\n", + " chemical modifications.\n", + " \"\"\"\n", " activity_or_abundance = PermissibleValue(\n", " text=\"activity_or_abundance\",\n", " description=\"\"\"Used in cases where the specificity of the relationship can not be determined to be either activity or abundance. In general, a more specific value from this enumeration should be used.\"\"\")\n", @@ -13669,6 +15718,7 @@ " aggregation = PermissibleValue(text=\"aggregation\")\n", " interaction = PermissibleValue(text=\"interaction\")\n", " release = PermissibleValue(text=\"release\")\n", + " isomerization = PermissibleValue(text=\"isomerization\")\n", " secretion = PermissibleValue(text=\"secretion\")\n", " uptake = PermissibleValue(text=\"uptake\")\n", " splicing = PermissibleValue(text=\"splicing\")\n", @@ -13709,6 +15759,7 @@ "\n", " _defn = EnumDefinition(\n", " name=\"GeneOrGeneProductOrChemicalEntityAspectEnum\",\n", + " description=\"\"\"An enumeration used as a qualifier to indicate the specific aspect of a gene, gene product, or chemical entity that is affected or measured in an association. Values cover activity and abundance (expression, synthesis, degradation, stability, localization, transport), molecular interactions, and a wide range of molecular modifications such as phosphorylation, methylation, acetylation, ubiquitination, and other post-translational or chemical modifications.\"\"\",\n", " )\n", "\n", " @classmethod\n", @@ -13717,62 +15768,272 @@ " PermissibleValue(text=\"ADP-ribosylation\"))\n", "\n", "class CausalMechanismQualifierEnum(EnumDefinitionImpl):\n", - "\n", - " binding = PermissibleValue(\n", - " text=\"binding\",\n", - " description=\"\"\"A causal mechanism mediated by the direct contact between effector and target chemical or biomolecular entity, which form a stable physical interaction.\"\"\")\n", + " \"\"\"\n", + " An enumeration used as a qualifier to specify the causal or pharmacologic mechanism by which an effect is exerted\n", + " in an association (e.g., agonism, antagonism, inverse agonism, allosteric modulation, activation, inhibition, and\n", + " their competitive or partial variants).\n", + " \"\"\"\n", + " modulation = PermissibleValue(\n", + " text=\"modulation\",\n", + " description=\"\"\"A causal mechanism that effects the normal functioning of a protein in some way e.g., mixed agonist/antagonist or unclear whether action is positive or negative\"\"\")\n", + " allosteric_modulation = PermissibleValue(\n", + " text=\"allosteric_modulation\",\n", + " description=\"\"\"A modulation mechanism that occurs when a chemical exerts an effect on a protein targets via a different binding site than the natural ('orthosteric') ligand site.\"\"\")\n", + " mixed_allosteric_modulation = PermissibleValue(\n", + " text=\"mixed_allosteric_modulation\",\n", + " description=\"\"\"An allosteric modulation mechanism that occurs when a chemical may exert an activating effect or an inhibitory effect in different conditions / contexts (e.g. concentration, receptor conformational state, signaling pathway context, receptor subtype, cellular environment).\"\"\")\n", + " biphasic_allosteric_modulation = PermissibleValue(\n", + " text=\"biphasic_allosteric_modulation\",\n", + " description=\"\"\"A mixed allosteric modulation mechanism that occurs when a chemical exerts an activating effect at lower concentrations, and an inhibitory effect at higher concentrations.\"\"\")\n", + " mixed_agonism = PermissibleValue(\n", + " text=\"mixed_agonism\",\n", + " description=\"\"\"An modulation mechanism in which the effector acts as both an agonist (activating a receptor) and an antagonist (blocking a receptor) at different receptor sites.\"\"\")\n", + " positive_modulation = PermissibleValue(\n", + " text=\"positive_modulation\",\n", + " description=\"\"\"A modulation mechanism that positively effects the normal functioning of a target by increasing or enhancing its activity or abundance, or its sensitivity to other factors that do so.\"\"\")\n", + " potentiation = PermissibleValue(\n", + " text=\"potentiation\",\n", + " description=\"\"\"A positive modulation mechanism in which the effector binds to and enhances or intensifies the effect of some other chemical or drug on its target.\"\"\")\n", + " induction = PermissibleValue(\n", + " text=\"induction\",\n", + " description=\"\"\"A positive modulation mechanism in which the effector binds to and increases the activity/rate of an enzyme that processes drugs in the body.\"\"\")\n", + " cofactor = PermissibleValue(\n", + " text=\"cofactor\",\n", + " description=\"\"\"A positive modulation mechanism in which the effector (usually some non-protein chemical compound or metallic ion) is required for a target enzyme's biological/catalytic activity.\"\"\")\n", + " activation = PermissibleValue(\n", + " text=\"activation\",\n", + " description=\"\"\"A positive modulation mechanism in which the effector binds to and positively affects the normal functioning of its target.\"\"\")\n", + " positive_allosteric_modulation = PermissibleValue(\n", + " text=\"positive_allosteric_modulation\",\n", + " description=\"\"\"A positive modulation mechanism in which the effector enhances the action of the endogenous ligand of a receptor by binding to a site distinct from that ligand (i.e. non-competitive inhibition)\"\"\")\n", + " agonism = PermissibleValue(\n", + " text=\"agonism\",\n", + " description=\"\"\"An activation mechanism in which the effector binds and activates a receptor to mimic the effect of an endogenous ligand.\"\"\")\n", + " partial_agonism = PermissibleValue(\n", + " text=\"partial_agonism\",\n", + " description=\"\"\"An agonism mechanism in which the effector binds to and only partially activates a receptor (relative to the response to a full agonist)\"\"\")\n", + " biased_agonism = PermissibleValue(\n", + " text=\"biased_agonism\",\n", + " description=\"\"\"An agonism mechanism in which the effector binds to a receptor and activates certain signaling pathways while ignoring others, allowing it to produce a desired effect without unwanted side effects.\"\"\")\n", + " antibody_agonism = PermissibleValue(\n", + " text=\"antibody_agonism\",\n", + " description=\"\"\"An agonism mechanism in which the effector is an antobody that binds and activates a receptor to mimic the effect of an endogenous ligand.\"\"\")\n", + " molecular_channel_opening = PermissibleValue(\n", + " text=\"molecular_channel_opening\",\n", + " description=\"\"\"An activation mechanism in which the effector binds to a molecular channel and facilitates transport of ions through it.\"\"\")\n", + " stimulation = PermissibleValue(\n", + " text=\"stimulation\",\n", + " description=\"\"\"An activation mechanism in which the effector directly or indirectly affects its target, stimulating a physiological response.\"\"\")\n", + " guanyl_nucleotide_exchange = PermissibleValue(\n", + " text=\"guanyl_nucleotide_exchange\",\n", + " description=\"\"\"An activation mechanism in which the effector catalyzes the exchange of guanosine diphosphate (GDP) for guanosine triphosphate (GTP) in a guanine nucleotide-binding protein (G-protein).\"\"\")\n", + " negative_modulation = PermissibleValue(\n", + " text=\"negative_modulation\",\n", + " description=\"\"\"A modulation mechanism that negatively effects the normal functioning of a target by decreasing or impeding its activity or abundance, or its sensitivity to other factors that do so.\"\"\")\n", + " negative_gene_editing_modulation = PermissibleValue(\n", + " text=\"negative_gene_editing_modulation\",\n", + " description=\"\"\"A negative modulation mechanism in which the effector elicits the negative modulation of its target through a gene editing activity.\"\"\")\n", + " gtpase_activation = PermissibleValue(\n", + " text=\"gtpase_activation\",\n", + " description=\"\"\"An activation mechanism in which the effector accelerates the intrinsic GTPase activity of a G-protein, promoting the conversion of the active, GTP-bound form to the inactive, GDP-bound form, thereby terminating a signaling event. Note that this is a negative modulation mechanism because the target is the G-protein whose activity is attenuated through gtpase activation.\"\"\")\n", + " atpase_activation = PermissibleValue(\n", + " text=\"atpase_activation\",\n", + " description=\"\"\"An activation mechanism in which the effector accelerates the intrinsic ATPase activity of a target protein, promoting the conversion of the active, ATP-bound form to the inactive, ADP-bound form, thereby terminating a signaling event. Note that this is a negative modulation mechanism because the target is the protein whose activity is attenuated through atpase activation.\"\"\")\n", + " antisense_oligonucleotide_inhibition = PermissibleValue(\n", + " text=\"antisense_oligonucleotide_inhibition\",\n", + " description=\"\"\"A negative modulation mechanism in which an antisense oligonucleotide effector prevents translation of a complementary mRNA sequence through binding and targeting it for degradation. Note that while this is called \\\"inhibition', it is not inhibition in the classic biochemical sense that requires a direct interaction between effector and target.\"\"\")\n", + " rna_interference_inhibition = PermissibleValue(\n", + " text=\"rna_interference_inhibition\",\n", + " description=\"\"\"A negative modulation mechanism in which an effector small interfering RNA (siRNA) molecule finds and destroys messenger RNA (mRNA) with a complementary sequence, preventing a specific gene from being translated into a protein. Note that while this is called \\\"inhibition', it is not inhibition in the classic biochemical sense that requires a direct interaction between effector and target.\"\"\")\n", + " suppression = PermissibleValue(\n", + " text=\"suppression\",\n", + " description=\"\"\"A negative modulation mechanism in which the effector directly or indirectly affects its target, suppressing a physiological process.\"\"\")\n", + " feedback_inhibition = PermissibleValue(\n", + " text=\"feedback_inhibition\",\n", + " description=\"\"\"An negative modulation mechanism in which the end product of a metabolic pathway inhibits an enzyme early in that same pathway, which stops the production of the final product when it's no longer needed.\"\"\")\n", " inhibition = PermissibleValue(\n", " text=\"inhibition\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to the target and negatively effects its normal function, e.g. prevention of enzymatic reaction or activation of downstream pathway.\"\"\")\n", + " description=\"\"\"A negative modulation mechanism in which the effector binds to the target and negatively effects its normal function, e.g. prevention of enzymatic reaction or activation of downstream pathway.\"\"\")\n", " antibody_inhibition = PermissibleValue(\n", " text=\"antibody_inhibition\",\n", - " description=\"A causal mechanism in which an antibody specifically binds to and interferes with the target.\")\n", + " description=\"\"\"An inhibition mechanism in which an antibody effector specifically binds to and interferes with the target.\"\"\")\n", " antagonism = PermissibleValue(\n", " text=\"antagonism\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to a receptor and prevents activation by an agonist through competing for the binding site.\"\"\")\n", + " description=\"\"\"An inhibition mechanism in which the effector binds to a receptor and prevents activation by an agonist through competing for the binding site.\"\"\")\n", + " allosteric_antagonism = PermissibleValue(\n", + " text=\"allosteric_antagonism\",\n", + " description=\"\"\"An inhibition mechanism in which the effector binds to a receptor at an allosteric site and prevents activation by a positive allosteric modulator at that site.\"\"\")\n", + " non_competitive_antagonism = PermissibleValue(\n", + " text=\"non_competitive_antagonism\",\n", + " description=\"\"\"An inhibition mechanism in which the effector binds a site distinct from the agonist's binding site (non-orthosteric), or irreversibly/insurmountably inactivates the receptor - reduces the receptor’s maximal response (Emax) in a way that cannot be overcome by adding more agonist.\"\"\")\n", + " competitive_inhibition = PermissibleValue(\n", + " text=\"competitive_inhibition\",\n", + " description=\"\"\"An inhibition mechanism in which the effector binds to a target molecule (such as an enzyme) and prevents the binding of a substrate (or another binding partner) and vice versa.\"\"\")\n", + " noncompetitive_inhibition = PermissibleValue(\n", + " text=\"noncompetitive_inhibition\",\n", + " description=\"\"\"An inhibition mechanism in which the effector binds to a target molecule (such as an enzyme) at a site other than the active site, in a way that reduces the activity of the target.\"\"\")\n", + " negative_allosteric_modulation = PermissibleValue(\n", + " text=\"negative_allosteric_modulation\",\n", + " description=\"\"\"A noncompetitive inhibition mechanism in which the effector reduces or prevents the action of the endogenous ligand of a receptor by binding to a site distinct from that ligand, and causing a conformational change that affects ligand binding.\"\"\")\n", + " gating_inhibition = PermissibleValue(\n", + " text=\"gating_inhibition\",\n", + " description=\"\"\"An inhibition mechanism mediated by the transition of ion channels between their open (conducting) and closed (non-conducting) conformational states.\"\"\")\n", + " irreversible_inhibition = PermissibleValue(\n", + " text=\"irreversible_inhibition\",\n", + " description=\"\"\"An inhibition mechanism in which an effector permanently binds to a target, permanently disrupting its activity.\"\"\")\n", " molecular_channel_blockage = PermissibleValue(\n", " text=\"molecular_channel_blockage\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to a molecular channel and prevents or reduces transport of ions through it.\"\"\")\n", + " description=\"\"\"An inhibition mechanism in which the effector binds to a molecular channel and prevents or reduces transport of ions through it.\"\"\")\n", " inverse_agonism = PermissibleValue(\n", " text=\"inverse_agonism\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to the same receptor-binding site as an agonist and antagonizes its effects, often exerting the opposite effect of the agonist by suppressing spontaneous receptor signaling.\"\"\")\n", - " negative_allosteric_modulation = PermissibleValue(\n", - " text=\"negative_allosteric_modulation\",\n", - " description=\"\"\"A causal mechanism in which the effector reduces or prevents the action of the endogenous ligand of a receptor by binding to a site distinct from that ligand (i.e. non-competitive inhibition)\"\"\")\n", - " agonism = PermissibleValue(\n", - " text=\"agonism\",\n", - " description=\"\"\"A causal mechanism in which the effector binds and activates a receptor to mimic the effect of an endogenous ligand.\"\"\")\n", - " molecular_channel_opening = PermissibleValue(\n", - " text=\"molecular_channel_opening\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to a molecular channel and facilitates transport of ions through it.\"\"\")\n", - " positive_allosteric_modulation = PermissibleValue(\n", - " text=\"positive_allosteric_modulation\",\n", - " description=\"\"\"A causal mechanism in which the effector enhances the action of the endogenous ligand of a receptor by binding to a site distinct from that ligand (i.e. non-competitive inhibition)\"\"\")\n", - " potentiation = PermissibleValue(\n", - " text=\"potentiation\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to and enhances or intensifies the effect of some other chemical or drug on its target.\"\"\")\n", - " activation = PermissibleValue(\n", - " text=\"activation\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to and positively affects the normal functioning of its target.\"\"\")\n", - " inducer = PermissibleValue(\n", - " text=\"inducer\",\n", - " description=\"\"\"A causal mechanism in which the effector binds to and increases the activity/rate of an enzyme that processes drugs in the body.\"\"\")\n", + " description=\"\"\"An inhibition mechanism in which the effector binds to the same receptor-binding site as an agonist and antagonizes its effects, often exerting the opposite effect of the agonist by suppressing spontaneous receptor signaling.\"\"\")\n", + " binding = PermissibleValue(\n", + " text=\"binding\",\n", + " description=\"\"\"A modulation mechanism mediated by the direct contact between effector and target chemical or biomolecular entity, which form a stable physical interaction (typically non-covalent).\"\"\")\n", + " covalent_binding = PermissibleValue(\n", + " text=\"covalent_binding\",\n", + " description=\"\"\"A modulation mechanism mediated by a direct covalent binding interaction between effector and target chemical or biomolecular entity.\"\"\")\n", + " adduction = PermissibleValue(\n", + " text=\"adduction\",\n", + " description=\"\"\"A covalent binding mechanism in which a drug-protein adduct forms by the covalent binding of electrophilic drugs or their reactive metabolite(s) to a target protein.\"\"\")\n", + " crosslinking = PermissibleValue(\n", + " text=\"crosslinking\",\n", + " description=\"\"\"A covalent binding mechanism in which an effector induces cross-linking of target proteins or nucleic acids - covalently joining them into a rigid structure.\"\"\")\n", + " transglutamination = PermissibleValue(\n", + " text=\"transglutamination\",\n", + " description=\"\"\"A covalent binding mechanism involving formation of a covalent bond between a glutamine residue and an amine as catalyzed by a transglutaminase.\"\"\")\n", + " disuphide_binding = PermissibleValue(\n", + " text=\"disuphide_binding\",\n", + " description=\"\"\"A covalent binding mechanism involving a covalent bond formed between two cysteine residues in or between proteins.\"\"\")\n", + " stabilization = PermissibleValue(\n", + " text=\"stabilization\",\n", + " description=\"\"\"A modulation mechanism in which the effector increases the conformational stability of a protein or complex.\"\"\")\n", + " chaperone_mediated_stabilization = PermissibleValue(text=\"chaperone_mediated_stabilization\")\n", + " destabilization = PermissibleValue(\n", + " text=\"destabilization\",\n", + " description=\"\"\"A modulation mechanism in which a chaperone molecule directly binds to a partially folded biosynthetic intermediate to stabilize the protein and allow it to complete the folding process to yield a functional protein.\"\"\")\n", + " degradation = PermissibleValue(\n", + " text=\"degradation\",\n", + " description=\"\"\"A modulation mechanism that controls protein and cellular component levels through the regulated breakdown and recycling of molecules.\"\"\")\n", + " cleavage = PermissibleValue(\n", + " text=\"cleavage\",\n", + " description=\"\"\"A modulation mechanism in which an effector promotes degeneration of the target protein through cleaving of the peptide bonds.\"\"\")\n", + " hydrolysis = PermissibleValue(\n", + " text=\"hydrolysis\",\n", + " description=\"\"\"A modulation mechanism in which an effector cleaves its target through a chemical reaction where a molecule of water is used to break a bond.\"\"\")\n", + " disruption = PermissibleValue(\n", + " text=\"disruption\",\n", + " description=\"\"\"A modulation mechanism in which an effector destabilizes or disrupts a protein complex, macromolecular assembly, cell membrane etc.\"\"\")\n", + " opening = PermissibleValue(\n", + " text=\"opening\",\n", + " description=\"\"\"A modulation mechanism in which an effector positively effects the normal functioning of an ion channel e.g., facilitates transport of ions through the channel.\"\"\")\n", + " multitarget_modulation = PermissibleValue(\n", + " text=\"multitarget_modulation\",\n", + " description=\"\"\"A modulation mechanism in which an effector achieves a physiological effect through simultaneous interaction with multiple gene targets.\"\"\")\n", + " chelation = PermissibleValue(\n", + " text=\"chelation\",\n", + " description=\"\"\"A modulation mechanism in which an effector binds to a metal ion target, reducing its availability/reactivity for further interactions.\"\"\")\n", + " release = PermissibleValue(\n", + " text=\"release\",\n", + " description=\"\"\"A modulation mechanism in which an effector reverses the normal functioning of a transporter, causing release of the substrate, rather than uptake\"\"\")\n", + " sequestration = PermissibleValue(\n", + " text=\"sequestration\",\n", + " description=\"\"\"A modulation mechanism in which an effector binds to a substance such as a drug, toxin or metabolite and reduces its availability for further interactions.\"\"\")\n", + " oxidoreduction = PermissibleValue(\n", + " text=\"oxidoreduction\",\n", + " description=\"\"\"A modulation mechanism in which in which electrons are transferred between molecules catalyzed by an oxidoreductase enzyme.\"\"\")\n", + " exogenous_protein = PermissibleValue(\n", + " text=\"exogenous_protein\",\n", + " description=\"\"\"A modulation mechanism in which a protein from an exogenous source acts as a substitute or supplement for a specific protein which is absent or has reduced function in an affected target/subject.\"\"\")\n", + " exogenous_gene = PermissibleValue(\n", + " text=\"exogenous_gene\",\n", + " description=\"\"\"A modulation mechanism in which a nucleic acid from an exogenous source acts as a substitute or supplement for a specific gene which is absent or has reduced function in an affected target/subject.\"\"\")\n", " transcriptional_regulation = PermissibleValue(\n", " text=\"transcriptional_regulation\",\n", - " description=\"A causal mechanism mediated by through the control of target gene transcription\")\n", + " description=\"A modulation mechanism mediated by through the control of target gene transcription.\")\n", + " translational_regulation = PermissibleValue(\n", + " text=\"translational_regulation\",\n", + " description=\"A modulation mechanism mediated by through the control of target gene translation.\")\n", + " catalytic_activity = PermissibleValue(\n", + " text=\"catalytic_activity\",\n", + " description=\"\"\"A modulation mechanism mediated by through the catalytic activity of the effector on the target.\"\"\")\n", + " chemical_modification = PermissibleValue(\n", + " text=\"chemical_modification\",\n", + " description=\"\"\"A modulation mechanism mediated by a protein/complex effector altering a small molecule by modifying it or converting it to something else.\"\"\")\n", + " relocalization = PermissibleValue(\n", + " text=\"relocalization\",\n", + " description=\"\"\"A modulation mechanism mediated by an effector that alters the localization of a target in the cell or body.\"\"\")\n", + " isomerization = PermissibleValue(\n", + " text=\"isomerization\",\n", + " description=\"\"\"A modulation mechanism mediated by an effector that alters the isomeric conformation of a target.\"\"\")\n", " signaling_mediated_control = PermissibleValue(\n", " text=\"signaling_mediated_control\",\n", - " description=\"\"\"A causal mechanism mediated by the activation or control of signaling events that influence the some aspect of the target entity (e.g. its activity, processing, transport, etc)\"\"\")\n", - " stabilization = PermissibleValue(text=\"stabilization\")\n", - " stimulation = PermissibleValue(text=\"stimulation\")\n", - " releasing_activity = PermissibleValue(text=\"releasing_activity\")\n", + " description=\"\"\"A modulation mechanism mediated by the activation or control of signaling events that influence the some aspect of the target entity (e.g. its activity, processing, transport, etc.).\"\"\")\n", + " immune_system_modulation = PermissibleValue(\n", + " text=\"immune_system_modulation\",\n", + " description=\"\"\"A modulation mechanism in which the actions of the effector on the immune system ultimately mediate the affects a target.\"\"\")\n", + " vaccine_antigen = PermissibleValue(\n", + " text=\"vaccine_antigen\",\n", + " description=\"\"\"An immune system modulation mechanism in which a vaccine mediates its effect through the activation of the immune system against the target.\"\"\")\n", + " post_transcriptional_regulation = PermissibleValue(\n", + " text=\"post_transcriptional_regulation\",\n", + " description=\"\"\"A modulation mechanism which controls expression of a target gene at the RNA level after a gene has been transcribed into messenger RNA (mRNA).\"\"\")\n", + " molecular_modification = PermissibleValue(\n", + " text=\"molecular_modification\",\n", + " description=\"\"\"A modulation mechanism through which an effect is mediated by the modification of a target, through addition of chemical moieties such phosphate groups, ubiquitin, lipids, etc., which alter its activity or cellular behavior.\"\"\")\n", + " phosphorylation = PermissibleValue(text=\"phosphorylation\")\n", + " dephosphorylation = PermissibleValue(text=\"dephosphorylation\")\n", + " neddylation = PermissibleValue(text=\"neddylation\")\n", + " deneddylation = PermissibleValue(text=\"deneddylation\")\n", + " lipidation = PermissibleValue(text=\"lipidation\")\n", + " palmitoylation = PermissibleValue(text=\"palmitoylation\")\n", + " myristoylation = PermissibleValue(text=\"myristoylation\")\n", + " tyrosination = PermissibleValue(text=\"tyrosination\")\n", + " carboxylation = PermissibleValue(text=\"carboxylation\")\n", + " ubiquitination = PermissibleValue(text=\"ubiquitination\")\n", + " monoubiquitination = PermissibleValue(text=\"monoubiquitination\")\n", + " polyubiquitination = PermissibleValue(text=\"polyubiquitination\")\n", + " deubiquitination = PermissibleValue(text=\"deubiquitination\")\n", + " sulfation = PermissibleValue(text=\"sulfation\")\n", + " reduction = PermissibleValue(\n", + " text=\"reduction\",\n", + " description=\"\"\"A molecular modification mechanism in which an effector modifies a target substrate via a reduction reaction.\"\"\")\n", + " oxidation = PermissibleValue(\n", + " text=\"oxidation\",\n", + " description=\"\"\"A molecular modification mechanism in which an effector modifies a target substrate via an oxidation reaction.\"\"\")\n", + " acetylation = PermissibleValue(text=\"acetylation\")\n", + " deacetylation = PermissibleValue(text=\"deacetylation\")\n", + " glycosylation = PermissibleValue(text=\"glycosylation\")\n", + " deglycosylation = PermissibleValue(text=\"deglycosylation\")\n", + " methylation = PermissibleValue(text=\"methylation\")\n", + " trimethylation = PermissibleValue(text=\"trimethylation\")\n", + " demethylation = PermissibleValue(text=\"demethylation\")\n", + " sumoylation = PermissibleValue(text=\"sumoylation\")\n", + " desumoylation = PermissibleValue(text=\"desumoylation\")\n", + " ampylation = PermissibleValue(\n", + " text=\"ampylation\",\n", + " description=\"\"\"A molecular modification involving the addition of an adenylyl (AMP) moiety to a substrate protein residue.\"\"\")\n", + " hydroxylation = PermissibleValue(text=\"hydroxylation\")\n", + " s_nitrosylation = PermissibleValue(text=\"s_nitrosylation\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"CausalMechanismQualifierEnum\",\n", + " description=\"\"\"An enumeration used as a qualifier to specify the causal or pharmacologic mechanism by which an effect is exerted in an association (e.g., agonism, antagonism, inverse agonism, allosteric modulation, activation, inhibition, and their competitive or partial variants).\"\"\",\n", " )\n", "\n", - "class LogicalInterpretationEnum(EnumDefinitionImpl):\n", + " @classmethod\n", + " def _addvals(cls):\n", + " setattr(cls, \"ADP-ribosylation\",\n", + " PermissibleValue(text=\"ADP-ribosylation\"))\n", + " setattr(cls, \"de-ADP-ribosylation\",\n", + " PermissibleValue(text=\"de-ADP-ribosylation\"))\n", "\n", + "class LogicalInterpretationEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " An enumeration of logical interpretations that can be applied to a triple to indicate whether the relation should\n", + " be read as existential on both sides (some-some), universal-existential (all-some), or its inverse (inverse\n", + " all-some).\n", + " \"\"\"\n", " some_some = PermissibleValue(\n", " text=\"some_some\",\n", " description=\"A modifier on a triple that causes the triple to be interpreted as a some-some statement\",\n", @@ -13785,10 +16046,14 @@ "\n", " _defn = EnumDefinition(\n", " name=\"LogicalInterpretationEnum\",\n", + " description=\"\"\"An enumeration of logical interpretations that can be applied to a triple to indicate whether the relation should be read as existential on both sides (some-some), universal-existential (all-some), or its inverse (inverse all-some).\"\"\",\n", " )\n", "\n", "class ReactionDirectionEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of possible directions for a biochemical reaction, indicating whether it proceeds left-to-right,\n", + " right-to-left, is bidirectional (reversible), or has no net direction.\n", + " \"\"\"\n", " left_to_right = PermissibleValue(text=\"left_to_right\")\n", " right_to_left = PermissibleValue(text=\"right_to_left\")\n", " bidirectional = PermissibleValue(text=\"bidirectional\")\n", @@ -13796,15 +16061,20 @@ "\n", " _defn = EnumDefinition(\n", " name=\"ReactionDirectionEnum\",\n", + " description=\"\"\"An enumeration of possible directions for a biochemical reaction, indicating whether it proceeds left-to-right, right-to-left, is bidirectional (reversible), or has no net direction.\"\"\",\n", " )\n", "\n", "class ReactionSideEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration indicating on which side of a biochemical reaction a participant appears - the left-hand\n", + " (reactant/substrate) side or the right-hand (product) side, as written.\n", + " \"\"\"\n", " left = PermissibleValue(text=\"left\")\n", " right = PermissibleValue(text=\"right\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"ReactionSideEnum\",\n", + " description=\"\"\"An enumeration indicating on which side of a biochemical reaction a participant appears - the left-hand (reactant/substrate) side or the right-hand (product) side, as written.\"\"\",\n", " )\n", "\n", "class PhaseEnum(EnumDefinitionImpl):\n", @@ -13870,7 +16140,11 @@ " )\n", "\n", "class DruggableGeneCategoryEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of druggability categories for gene targets as defined by the IDG (Illuminating the Druggable\n", + " Genome) / Pharos target development level classification: Tclin (targets of approved drugs), Tchem (targets with\n", + " potent bioactives), Tbio (targets with biological knowledge), and Tdark (poorly characterized targets).\n", + " \"\"\"\n", " tclin = PermissibleValue(\n", " text=\"tclin\",\n", " description=\"\"\"These targets have activities in DrugCentral (ie. approved drugs) with known mechanism of action.\"\"\")\n", @@ -13879,17 +16153,21 @@ " description=\"\"\"These targets have activities in ChEMBL, Guide to Pharmacology or DrugCentral that satisfy the activity thresholds detailed below.\"\"\")\n", " tchem = PermissibleValue(\n", " text=\"tchem\",\n", - " description=\"\"\"These targets do not have known drug or small molecule activities that satisfy the activity thresholds detailed below AND satisfy one or more of the following criteria: target is above the cutoff criteria for Tdark target is annotated with a Gene Ontology Molecular Function or Biological Process leaf term(s) with an Experimental Evidence code\"\"\")\n", + " description=\"\"\"These targets do not have known drug or small molecule activities that satisfy the activity thresholds detailed below AND satisfy one or more of the following criteria: target is above the cutoff criteria for the target is annotated with a Gene Ontology Molecular Function or Biological Process leaf term(s) with an Experimental Evidence code\"\"\")\n", " tdark = PermissibleValue(\n", " text=\"tdark\",\n", " description=\"\"\"These are targets about which virtually nothing is known. They do not have known drug or small molecule activities that satisfy the activity thresholds detailed below AND satisfy two or more of the following criteria: A PubMed text-mining score from Jensen Lab less than 5, greater than or equal TO 3 Gene RIFs, or less than or equal to 50 Antibodies available according to http://antibodypedia.com.\"\"\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"DruggableGeneCategoryEnum\",\n", + " description=\"\"\"An enumeration of druggability categories for gene targets as defined by the IDG (Illuminating the Druggable Genome) / Pharos target development level classification: Tclin (targets of approved drugs), Tchem (targets with potent bioactives), Tbio (targets with biological knowledge), and Tdark (poorly characterized targets).\"\"\",\n", " )\n", "\n", "class DrugAvailabilityEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration describing how a drug or chemical entity may be obtained, distinguishing products that are\n", + " available over the counter from those that require a prescription.\n", + " \"\"\"\n", " over_the_counter = PermissibleValue(\n", " text=\"over_the_counter\",\n", " description=\"chemical entity is available over the counter without a prescription.\")\n", @@ -13899,17 +16177,25 @@ "\n", " _defn = EnumDefinition(\n", " name=\"DrugAvailabilityEnum\",\n", + " description=\"\"\"An enumeration describing how a drug or chemical entity may be obtained, distinguishing products that are available over the counter from those that require a prescription.\"\"\",\n", " )\n", "\n", "class DrugDeliveryEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of routes by which a drug is administered or delivered to a patient, including inhalation, oral,\n", + " transdermal absorption, and various forms of injection (intravenous, subcutaneous, intramuscular).\n", + " \"\"\"\n", " inhalation = PermissibleValue(text=\"inhalation\")\n", " oral = PermissibleValue(text=\"oral\")\n", " absorption_through_the_skin = PermissibleValue(text=\"absorption_through_the_skin\")\n", + " injection = PermissibleValue(text=\"injection\")\n", " intravenous_injection = PermissibleValue(text=\"intravenous_injection\")\n", + " subcutaneous_injection = PermissibleValue(text=\"subcutaneous_injection\")\n", + " intramuscular_injection = PermissibleValue(text=\"intramuscular_injection\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"DrugDeliveryEnum\",\n", + " description=\"\"\"An enumeration of routes by which a drug is administered or delivered to a patient, including inhalation, oral, transdermal absorption, and various forms of injection (intravenous, subcutaneous, intramuscular).\"\"\",\n", " )\n", "\n", "class ResourceRoleEnum(EnumDefinitionImpl):\n", @@ -13927,6 +16213,37 @@ " description=\"\"\"The role played by the information reource in serving as a source for an edge in a TRAPI message. Note that a given Edge should have one and only one 'primary' source, and may have any number of 'aggregator' or 'supporting data' sources. This enumeration is found in Biolink Model, but is repeated here for convenience.\"\"\",\n", " )\n", "\n", + "class AffinityParameterEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " The types of parameters that can be used to describe the affinity between two entities, characteristically\n", + " chemicals and proteins. The values are generally stated as the negative base 10 logarithm of the raw measurements.\n", + " \"\"\"\n", + " pIC50 = PermissibleValue(\n", + " text=\"pIC50\",\n", + " description=\"\"\"Negative base 10 logarithm of the the inhibitory concentration 50% (IC50) measures the concentration needed to block or inhibit a biological response.\"\"\")\n", + " pEC50 = PermissibleValue(\n", + " text=\"pEC50\",\n", + " description=\"\"\"Negative base 10 logarithm of the molar concentration of a chemical that produces a 50% excitation of a function\"\"\")\n", + " pAC50 = PermissibleValue(text=\"pAC50\")\n", + " pXC50 = PermissibleValue(text=\"pXC50\")\n", + " pKi = PermissibleValue(\n", + " text=\"pKi\",\n", + " description=\"\"\"Negative base 10 logarithm of the equilibrium binding affinity for a ligand that reduces the activity of its binding partner. Ki represents the concentration at which the inhibitor ligand occupies 50% of the receptor sites when no competing ligand is present\"\"\")\n", + " pKon = PermissibleValue(\n", + " text=\"pKon\",\n", + " description=\"\"\"Negative base 10 logarithm of the association rate constant (Kon) describes the rate at which molecules bind to each other.\"\"\")\n", + " pKoff = PermissibleValue(\n", + " text=\"pKoff\",\n", + " description=\"\"\"Negative base 10 logarithm of the dissociation rate constant (koff) describes the rate at which they dissociate.\"\"\")\n", + " pKd = PermissibleValue(\n", + " text=\"pKd\",\n", + " description=\"\"\"Negative base 10 logarithm of the equilibrium dissociation constant (KD) which is a measure of the binding affinity and is defined as the ratio of koff to kon.\"\"\")\n", + "\n", + " _defn = EnumDefinition(\n", + " name=\"AffinityParameterEnum\",\n", + " description=\"\"\"The types of parameters that can be used to describe the affinity between two entities, characteristically chemicals and proteins. The values are generally stated as the negative base 10 logarithm of the raw measurements.\"\"\",\n", + " )\n", + "\n", "class FDAIDAAdverseEventEnum(EnumDefinitionImpl):\n", " \"\"\"\n", " please consult with the FDA guidelines as proposed in this document:\n", @@ -13951,41 +16268,52 @@ " )\n", "\n", "class AgentTypeEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration of agent types responsible for generating a statement of knowledge, as defined by the Translator\n", + " Knowledge Level / Agent Type (KL/AT) standard. Values distinguish human (manual) agents from automated agents\n", + " (including data analysis pipelines, computational models, text-mining agents, image-processing agents) and mixed\n", + " cases such as manual validation of automated output.\n", + " \"\"\"\n", " manual_agent = PermissibleValue(\n", " text=\"manual_agent\",\n", - " description=\"\"\"A human agent who is responsible for generating a statement of knowledge. The human may utilize computationally generated information as evidence for the resulting knowledge, but the human is the one who ultimately interprets/reasons with this evidence to produce a statement of knowledge.\"\"\")\n", + " description=\"\"\"A human agent who is responsible for generating a statement of knowledge. The human may utilize computationally generated information as evidence for the resulting knowledge, but the human is the one who ultimately interprets/reasons with this evidence to produce a statement of knowledge.\"\"\")\n", " automated_agent = PermissibleValue(\n", " text=\"automated_agent\",\n", - " description=\"\"\"An automated agent, typically a software program or tool, that is responsible for generating a statement of knowledge. Human contribution to the knowledge creation process ends with the definition and coding of algorithms or analysis pipelines that get executed by the automated agent.\"\"\")\n", + " description=\"\"\"An automated agent, typically a software program or tool, that is responsible for generating a statement of knowledge. Human contribution to the knowledge creation process ends with the definition and coding of algorithms or analysis pipelines that get executed by the automated agent.\"\"\")\n", " data_analysis_pipeline = PermissibleValue(\n", " text=\"data_analysis_pipeline\",\n", - " description=\"\"\"An automated agent that executes an analysis workflow over data and reports the direct results of the analysis. These typically report statistical associations/correlations between variables in the input dataset, and do not interpret/infer broader conclusions from associations the analysis reveals in the data.\"\"\")\n", + " description=\"\"\"An automated agent that executes an analysis workflow over data and reports the direct results of the analysis. These typically report statistical associations/correlations between variables in the input dataset, and do not interpret/infer broader conclusions from associations the analysis reveals in the data.\"\"\")\n", " computational_model = PermissibleValue(\n", " text=\"computational_model\",\n", - " description=\"\"\"An automated agent that generates knowledge statements (typically predictions) based on rules/logic explicitly encoded in an algorithm (e.g. heuristic models, supervised classifiers), or learned from patterns observed in data (e.g. ML models, unsupervised classifiers).\"\"\")\n", + " description=\"\"\"An automated agent that generates knowledge statements (typically predictions) based on rules/logic explicitly encoded in an algorithm (e.g. heuristic models, supervised classifiers), or learned from patterns observed in data (e.g. ML models, unsupervised classifiers).\"\"\")\n", " text_mining_agent = PermissibleValue(\n", " text=\"text_mining_agent\",\n", " description=\"\"\"An automated agent that uses Natural Language Processing to recognize concepts and/or relationships in text, and report them using formally encoded semantics (e.g. as an edge in a knowledge graph).\"\"\")\n", " image_processing_agent = PermissibleValue(\n", " text=\"image_processing_agent\",\n", - " description=\"\"\"An automated agent that processes images to generate textual statements of knowledge derived from the image and/or expressed in text the image depicts (e.g. via OCR).\"\"\")\n", + " description=\"\"\"An automated agent that processes images to generate textual statements of knowledge derived from the image and/or expressed in text the image depicts (e.g. via OCR).\"\"\")\n", " manual_validation_of_automated_agent = PermissibleValue(\n", " text=\"manual_validation_of_automated_agent\",\n", - " description=\"\"\"A human agent reviews and validates/approves the veracity of knowledge that is initially generated by an automated agent.\"\"\")\n", + " description=\"\"\"A human agent reviews and validates/approves the veracity of knowledge that is initially generated by an automated agent.\"\"\")\n", " not_provided = PermissibleValue(\n", " text=\"not_provided\",\n", - " description=\"\"\"The agent type is not provided, typically because it cannot be determined from available information if the agent that generated the knowledge is manual or automated.\"\"\")\n", + " description=\"\"\"The agent type is not provided, typically because it cannot be determined from available information if the agent that generated the knowledge is manual or automated.\"\"\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"AgentTypeEnum\",\n", + " description=\"\"\"An enumeration of agent types responsible for generating a statement of knowledge, as defined by the Translator Knowledge Level / Agent Type (KL/AT) standard. Values distinguish human (manual) agents from automated agents (including data analysis pipelines, computational models, text-mining agents, image-processing agents) and mixed cases such as manual validation of automated output.\"\"\",\n", " )\n", "\n", "class KnowledgeLevelEnum(EnumDefinitionImpl):\n", - "\n", + " \"\"\"\n", + " An enumeration characterizing the type of knowledge expressed in a statement and the kind of evidence and\n", + " reasoning that supports it, as defined by the Translator Knowledge Level / Agent Type (KL/AT) standard. Values\n", + " include knowledge assertion, logical entailment, prediction, statistical association, text co-occurrence, direct\n", + " observation, and not-provided.\n", + " \"\"\"\n", " knowledge_assertion = PermissibleValue(\n", " text=\"knowledge_assertion\",\n", - " description=\"\"\"A statement of purported fact that is put forth by an agent as true, based on assessment of direct evidence. Assertions are likely but not definitively true.\"\"\")\n", + " description=\"\"\"A statement of purported fact that is put forth by an agent as true, based on assessment of direct evidence. Assertions are likely but not definitively true.\"\"\")\n", " logical_entailment = PermissibleValue(\n", " text=\"logical_entailment\",\n", " description=\"\"\"A statement reporting a conclusion that follows logically from premises representing established facts or knowledge assertions (e.g. fingernail part of finger, finger part of hand --> fingernail part of hand).\"\"\")\n", @@ -13995,17 +16323,61 @@ " statistical_association = PermissibleValue(\n", " text=\"statistical_association\",\n", " description=\"\"\"A statement that reports concepts representing variables in a dataset to be statistically associated with each other in a particular cohort (e.g. 'Metformin Treatment (variable 1) is correlated with Diabetes Diagnosis (variable 2) in EHR dataset X').\"\"\")\n", + " text_co_occurrence = PermissibleValue(\n", + " text=\"text_co_occurrence\",\n", + " description=\"\"\"A statement reporting that mentions of two concepts in some corpus of text (e.g. the biomedical literature) occur together at a statistically significant frequency - suggesting that a real-world biological or clinical relationship may exist between the concepts.\"\"\")\n", " observation = PermissibleValue(\n", " text=\"observation\",\n", - " description=\"\"\"A statement reporting (and possibly quantifying) a phenomenon that was observed to occur - absent any analysis or interpretation that generates a statistical association or supports a broader conclusion or inference.\"\"\")\n", + " description=\"\"\"A statement reporting (and possibly quantifying) a phenomenon that was observed to occur - absent any analysis or interpretation that generates a statistical association or supports a broader conclusion or inference.\"\"\")\n", " not_provided = PermissibleValue(\n", " text=\"not_provided\",\n", " description=\"\"\"The knowledge level is not provided, typically because it cannot be determined from available. information.\"\"\")\n", "\n", " _defn = EnumDefinition(\n", " name=\"KnowledgeLevelEnum\",\n", + " description=\"\"\"An enumeration characterizing the type of knowledge expressed in a statement and the kind of evidence and reasoning that supports it, as defined by the Translator Knowledge Level / Agent Type (KL/AT) standard. Values include knowledge assertion, logical entailment, prediction, statistical association, text co-occurrence, direct observation, and not-provided.\"\"\",\n", + " )\n", + "\n", + "class GeneToPhenotypicFeaturePredicateEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " Enumeration of predicates permissible for use in gene to phenotypic feature associations. This constrains the\n", + " relationship types that can be used between genes and phenotypic features.\n", + " \"\"\"\n", + " _defn = EnumDefinition(\n", + " name=\"GeneToPhenotypicFeaturePredicateEnum\",\n", + " description=\"\"\"Enumeration of predicates permissible for use in gene to phenotypic feature associations. This constrains the relationship types that can be used between genes and phenotypic features.\"\"\",\n", + " )\n", + "\n", + " @classmethod\n", + " def _addvals(cls):\n", + " setattr(cls, \"biolink:causes\",\n", + " PermissibleValue(text=\"biolink:causes\"))\n", + " setattr(cls, \"biolink:contributes_to\",\n", + " PermissibleValue(text=\"biolink:contributes_to\"))\n", + " setattr(cls, \"biolink:associated_with\",\n", + " PermissibleValue(text=\"biolink:associated_with\"))\n", + " setattr(cls, \"biolink:has_phenotype\",\n", + " PermissibleValue(text=\"biolink:has_phenotype\"))\n", + "\n", + "class GeneToDiseasePredicateEnum(EnumDefinitionImpl):\n", + " \"\"\"\n", + " Enumeration of predicates permissible for use in gene to disease associations. This constrains the relationship\n", + " types that can be used between genes and diseases.\n", + " \"\"\"\n", + " _defn = EnumDefinition(\n", + " name=\"GeneToDiseasePredicateEnum\",\n", + " description=\"\"\"Enumeration of predicates permissible for use in gene to disease associations. This constrains the relationship types that can be used between genes and diseases.\"\"\",\n", " )\n", "\n", + " @classmethod\n", + " def _addvals(cls):\n", + " setattr(cls, \"biolink:contributes_to\",\n", + " PermissibleValue(text=\"biolink:contributes_to\"))\n", + " setattr(cls, \"biolink:associated_with\",\n", + " PermissibleValue(text=\"biolink:associated_with\"))\n", + " setattr(cls, \"biolink:affects\",\n", + " PermissibleValue(text=\"biolink:affects\"))\n", + "\n", "# Slots\n", "class slots:\n", " pass\n", @@ -14013,8 +16385,17 @@ "slots.gene_has_sequence = Slot(uri=DIST.hasSeq, name=\"gene has sequence\", curie=DIST.curie('hasSeq'),\n", " model_uri=DIST.gene_has_sequence, domain=Gene, range=Union[str, GeneSequence])\n", "\n", + "slots.node_property = Slot(uri=BIOLINK.node_property, name=\"node property\", curie=BIOLINK.curie('node_property'),\n", + " model_uri=DIST.node_property, domain=NamedThing, range=Optional[str])\n", + "\n", + "slots.nodes = Slot(uri=BIOLINK.nodes, name=\"nodes\", curie=BIOLINK.curie('nodes'),\n", + " model_uri=DIST.nodes, domain=None, range=Optional[Union[dict[Union[str, EntityId], Union[dict, Entity]], list[Union[dict, Entity]]]])\n", + "\n", + "slots.edges = Slot(uri=BIOLINK.edges, name=\"edges\", curie=BIOLINK.curie('edges'),\n", + " model_uri=DIST.edges, domain=None, range=Optional[Union[dict[Union[str, AssociationId], Union[dict, Association]], list[Union[dict, Association]]]])\n", + "\n", "slots.has_attribute = Slot(uri=BIOLINK.has_attribute, name=\"has attribute\", curie=BIOLINK.curie('has_attribute'),\n", - " model_uri=DIST.has_attribute, domain=Entity, range=Optional[Union[Union[str, AttributeId], List[Union[str, AttributeId]]]])\n", + " model_uri=DIST.has_attribute, domain=Entity, range=Optional[Union[Union[str, AttributeId], list[Union[str, AttributeId]]]])\n", "\n", "slots.has_attribute_type = Slot(uri=BIOLINK.has_attribute_type, name=\"has attribute type\", curie=BIOLINK.curie('has_attribute_type'),\n", " model_uri=DIST.has_attribute_type, domain=Attribute, range=Union[str, OntologyClassId])\n", @@ -14023,20 +16404,20 @@ " model_uri=DIST.has_qualitative_value, domain=Attribute, range=Optional[Union[str, NamedThingId]])\n", "\n", "slots.has_quantitative_value = Slot(uri=BIOLINK.has_quantitative_value, name=\"has quantitative value\", curie=BIOLINK.curie('has_quantitative_value'),\n", - " model_uri=DIST.has_quantitative_value, domain=Attribute, range=Optional[Union[Union[dict, QuantityValue], List[Union[dict, QuantityValue]]]])\n", + " model_uri=DIST.has_quantitative_value, domain=Attribute, range=Optional[Union[Union[dict, QuantityValue], list[Union[dict, QuantityValue]]]])\n", "\n", "slots.has_numeric_value = Slot(uri=BIOLINK.has_numeric_value, name=\"has numeric value\", curie=BIOLINK.curie('has_numeric_value'),\n", " model_uri=DIST.has_numeric_value, domain=QuantityValue, range=Optional[float])\n", "\n", + "slots.has_binary_relation = Slot(uri=BIOLINK.has_binary_relation, name=\"has binary relation\", curie=BIOLINK.curie('has_binary_relation'),\n", + " model_uri=DIST.has_binary_relation, domain=None, range=Optional[Union[str, \"BinaryRelationEnum\"]])\n", + "\n", "slots.has_unit = Slot(uri=BIOLINK.has_unit, name=\"has unit\", curie=BIOLINK.curie('has_unit'),\n", " model_uri=DIST.has_unit, domain=QuantityValue, range=Optional[Union[str, Unit]])\n", "\n", "slots.base_coordinate = Slot(uri=BIOLINK.base_coordinate, name=\"base coordinate\", curie=BIOLINK.curie('base_coordinate'),\n", " model_uri=DIST.base_coordinate, domain=GenomicSequenceLocalization, range=Optional[int])\n", "\n", - "slots.node_property = Slot(uri=BIOLINK.node_property, name=\"node property\", curie=BIOLINK.curie('node_property'),\n", - " model_uri=DIST.node_property, domain=NamedThing, range=Optional[str])\n", - "\n", "slots.id = Slot(uri=BIOLINK.id, name=\"id\", curie=BIOLINK.curie('id'),\n", " model_uri=DIST.id, domain=Entity, range=Union[str, EntityId])\n", "\n", @@ -14044,17 +16425,20 @@ " model_uri=DIST.iri, domain=None, range=Optional[Union[str, IriType]])\n", "\n", "slots.type = Slot(uri=RDF.type, name=\"type\", curie=RDF.curie('type'),\n", - " model_uri=DIST.type, domain=Entity, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.type, domain=Entity, range=Optional[Union[str, list[str]]])\n", "\n", "slots.category = Slot(uri=BIOLINK.category, name=\"category\", curie=BIOLINK.curie('category'),\n", - " model_uri=DIST.category, domain=Entity, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])\n", + " model_uri=DIST.category, domain=Entity, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", "\n", "slots.publication_type = Slot(uri=DCT.type, name=\"publication type\", curie=DCT.curie('type'),\n", - " model_uri=DIST.publication_type, domain=None, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.publication_type, domain=None, range=Optional[Union[str, list[str]]])\n", "\n", "slots.name = Slot(uri=RDFS.label, name=\"name\", curie=RDFS.curie('label'),\n", " model_uri=DIST.name, domain=Entity, range=Optional[Union[str, LabelType]])\n", "\n", + "slots.hgvs_nomenclature = Slot(uri=BIOLINK.hgvs_nomenclature, name=\"hgvs nomenclature\", curie=BIOLINK.curie('hgvs_nomenclature'),\n", + " model_uri=DIST.hgvs_nomenclature, domain=SequenceVariant, range=Optional[Union[str, list[str]]])\n", + "\n", "slots.stoichiometry = Slot(uri=BIOLINK.stoichiometry, name=\"stoichiometry\", curie=BIOLINK.curie('stoichiometry'),\n", " model_uri=DIST.stoichiometry, domain=Association, range=Optional[int])\n", "\n", @@ -14071,19 +16455,19 @@ " model_uri=DIST.symbol, domain=NamedThing, range=Optional[str])\n", "\n", "slots.synonym = Slot(uri=BIOLINK.synonym, name=\"synonym\", curie=BIOLINK.curie('synonym'),\n", - " model_uri=DIST.synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]])\n", + " model_uri=DIST.synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]])\n", "\n", "slots.exact_synonym = Slot(uri=BIOLINK.exact_synonym, name=\"exact synonym\", curie=BIOLINK.curie('exact_synonym'),\n", - " model_uri=DIST.exact_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]])\n", + " model_uri=DIST.exact_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]])\n", "\n", "slots.broad_synonym = Slot(uri=BIOLINK.broad_synonym, name=\"broad synonym\", curie=BIOLINK.curie('broad_synonym'),\n", - " model_uri=DIST.broad_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]])\n", + " model_uri=DIST.broad_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]])\n", "\n", "slots.narrow_synonym = Slot(uri=BIOLINK.narrow_synonym, name=\"narrow synonym\", curie=BIOLINK.curie('narrow_synonym'),\n", - " model_uri=DIST.narrow_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]])\n", + " model_uri=DIST.narrow_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]])\n", "\n", "slots.related_synonym = Slot(uri=BIOLINK.related_synonym, name=\"related synonym\", curie=BIOLINK.curie('related_synonym'),\n", - " model_uri=DIST.related_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]])\n", + " model_uri=DIST.related_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]])\n", "\n", "slots.deprecated = Slot(uri=BIOLINK.deprecated, name=\"deprecated\", curie=BIOLINK.curie('deprecated'),\n", " model_uri=DIST.deprecated, domain=None, range=Optional[Union[bool, Bool]])\n", @@ -14092,7 +16476,10 @@ " model_uri=DIST.has_topic, domain=NamedThing, range=Optional[Union[str, OntologyClassId]])\n", "\n", "slots.xref = Slot(uri=BIOLINK.xref, name=\"xref\", curie=BIOLINK.curie('xref'),\n", - " model_uri=DIST.xref, domain=NamedThing, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])\n", + " model_uri=DIST.xref, domain=NamedThing, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", + "\n", + "slots.subsets = Slot(uri=BIOLINK.subsets, name=\"subsets\", curie=BIOLINK.curie('subsets'),\n", + " model_uri=DIST.subsets, domain=NamedThing, range=Optional[Union[str, list[str]]])\n", "\n", "slots.url = Slot(uri=BIOLINK.url, name=\"url\", curie=BIOLINK.curie('url'),\n", " model_uri=DIST.url, domain=Entity, range=Optional[str])\n", @@ -14101,7 +16488,7 @@ " model_uri=DIST.semmed_agreement_count, domain=Association, range=Optional[int])\n", "\n", "slots.support_graphs = Slot(uri=BIOLINK.support_graphs, name=\"support graphs\", curie=BIOLINK.curie('support_graphs'),\n", - " model_uri=DIST.support_graphs, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.support_graphs, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.resource_id = Slot(uri=BIOLINK.resource_id, name=\"resource id\", curie=BIOLINK.curie('resource_id'),\n", " model_uri=DIST.resource_id, domain=RetrievalSource, range=Optional[Union[str, URIorCURIE]])\n", @@ -14110,22 +16497,25 @@ " model_uri=DIST.resource_role, domain=RetrievalSource, range=Optional[Union[str, \"ResourceRoleEnum\"]])\n", "\n", "slots.retrieval_source_ids = Slot(uri=BIOLINK.retrieval_source_ids, name=\"retrieval source ids\", curie=BIOLINK.curie('retrieval_source_ids'),\n", - " model_uri=DIST.retrieval_source_ids, domain=None, range=Optional[Union[Union[str, RetrievalSourceId], List[Union[str, RetrievalSourceId]]]])\n", + " model_uri=DIST.retrieval_source_ids, domain=None, range=Optional[Union[Union[str, RetrievalSourceId], list[Union[str, RetrievalSourceId]]]])\n", "\n", "slots.full_name = Slot(uri=BIOLINK.full_name, name=\"full name\", curie=BIOLINK.curie('full_name'),\n", " model_uri=DIST.full_name, domain=NamedThing, range=Optional[Union[str, LabelType]])\n", "\n", "slots.upstream_resource_ids = Slot(uri=BIOLINK.upstream_resource_ids, name=\"upstream resource ids\", curie=BIOLINK.curie('upstream_resource_ids'),\n", - " model_uri=DIST.upstream_resource_ids, domain=RetrievalSource, range=Optional[Union[str, URIorCURIE]])\n", + " model_uri=DIST.upstream_resource_ids, domain=RetrievalSource, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", + "\n", + "slots.source_record_urls = Slot(uri=BIOLINK.source_record_urls, name=\"source record urls\", curie=BIOLINK.curie('source_record_urls'),\n", + " model_uri=DIST.source_record_urls, domain=RetrievalSource, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", "\n", "slots.description = Slot(uri=DCT.description, name=\"description\", curie=DCT.curie('description'),\n", " model_uri=DIST.description, domain=None, range=Optional[Union[str, NarrativeText]])\n", "\n", "slots.systematic_synonym = Slot(uri=GOP.systematic_synonym, name=\"systematic synonym\", curie=GOP.curie('systematic_synonym'),\n", - " model_uri=DIST.systematic_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], List[Union[str, LabelType]]]])\n", + " model_uri=DIST.systematic_synonym, domain=NamedThing, range=Optional[Union[Union[str, LabelType], list[Union[str, LabelType]]]])\n", "\n", "slots.affiliation = Slot(uri=BIOLINK.affiliation, name=\"affiliation\", curie=BIOLINK.curie('affiliation'),\n", - " model_uri=DIST.affiliation, domain=Agent, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])\n", + " model_uri=DIST.affiliation, domain=Agent, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", "\n", "slots.address = Slot(uri=BIOLINK.address, name=\"address\", curie=BIOLINK.curie('address'),\n", " model_uri=DIST.address, domain=NamedThing, range=Optional[str])\n", @@ -14215,7 +16605,7 @@ " model_uri=DIST.iso_abbreviation, domain=Publication, range=Optional[str])\n", "\n", "slots.authors = Slot(uri=BIOLINK.authors, name=\"authors\", curie=BIOLINK.curie('authors'),\n", - " model_uri=DIST.authors, domain=Publication, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]])\n", + " model_uri=DIST.authors, domain=Publication, range=Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]])\n", "\n", "slots.volume = Slot(uri=BIOLINK.volume, name=\"volume\", curie=BIOLINK.curie('volume'),\n", " model_uri=DIST.volume, domain=Publication, range=Optional[str])\n", @@ -14227,25 +16617,100 @@ " model_uri=DIST.issue, domain=Publication, range=Optional[str])\n", "\n", "slots.pages = Slot(uri=BIOLINK.pages, name=\"pages\", curie=BIOLINK.curie('pages'),\n", - " model_uri=DIST.pages, domain=Publication, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.pages, domain=Publication, range=Optional[Union[str, list[str]]])\n", "\n", "slots.summary = Slot(uri=BIOLINK.summary, name=\"summary\", curie=BIOLINK.curie('summary'),\n", " model_uri=DIST.summary, domain=Publication, range=Optional[str])\n", "\n", "slots.keywords = Slot(uri=BIOLINK.keywords, name=\"keywords\", curie=BIOLINK.curie('keywords'),\n", - " model_uri=DIST.keywords, domain=Publication, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.keywords, domain=Publication, range=Optional[Union[str, list[str]]])\n", "\n", "slots.mesh_terms = Slot(uri=BIOLINK.mesh_terms, name=\"mesh terms\", curie=BIOLINK.curie('mesh_terms'),\n", - " model_uri=DIST.mesh_terms, domain=Publication, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])\n", + " model_uri=DIST.mesh_terms, domain=Publication, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", + "\n", + "slots.exposure_type = Slot(uri=BIOLINK.exposure_type, name=\"exposure type\", curie=BIOLINK.curie('exposure_type'),\n", + " model_uri=DIST.exposure_type, domain=ExposureEvent, range=Optional[str])\n", + "\n", + "slots.exposure_vehicle = Slot(uri=BIOLINK.exposure_vehicle, name=\"exposure vehicle\", curie=BIOLINK.curie('exposure_vehicle'),\n", + " model_uri=DIST.exposure_vehicle, domain=ExposureEvent, range=Optional[str])\n", + "\n", + "slots.exposure_route = Slot(uri=BIOLINK.exposure_route, name=\"exposure route\", curie=BIOLINK.curie('exposure_route'),\n", + " model_uri=DIST.exposure_route, domain=ExposureEvent, range=Optional[str])\n", + "\n", + "slots.exposure_start_age = Slot(uri=BIOLINK.exposure_start_age, name=\"exposure start age\", curie=BIOLINK.curie('exposure_start_age'),\n", + " model_uri=DIST.exposure_start_age, domain=ExposureEvent, range=Optional[int])\n", + "\n", + "slots.exposure_end_age = Slot(uri=BIOLINK.exposure_end_age, name=\"exposure end age\", curie=BIOLINK.curie('exposure_end_age'),\n", + " model_uri=DIST.exposure_end_age, domain=ExposureEvent, range=Optional[int])\n", + "\n", + "slots.exposure_duration = Slot(uri=BIOLINK.exposure_duration, name=\"exposure duration\", curie=BIOLINK.curie('exposure_duration'),\n", + " model_uri=DIST.exposure_duration, domain=ExposureEvent, range=Optional[Union[str, XSDTime]])\n", + "\n", + "slots.exposure_magnitude = Slot(uri=BIOLINK.exposure_magnitude, name=\"exposure magnitude\", curie=BIOLINK.curie('exposure_magnitude'),\n", + " model_uri=DIST.exposure_magnitude, domain=ExposureEvent, range=Optional[str])\n", + "\n", + "slots.exposure_additional_condition = Slot(uri=BIOLINK.exposure_additional_condition, name=\"exposure additional condition\", curie=BIOLINK.curie('exposure_additional_condition'),\n", + " model_uri=DIST.exposure_additional_condition, domain=ExposureEvent, range=Optional[str])\n", + "\n", + "slots.elevate_to_prediction = Slot(uri=BIOLINK.elevate_to_prediction, name=\"elevate to prediction\", curie=BIOLINK.curie('elevate_to_prediction'),\n", + " model_uri=DIST.elevate_to_prediction, domain=NamedThing, range=Optional[Union[bool, Bool]])\n", + "\n", + "slots.clinical_trial_phase = Slot(uri=BIOLINK.clinical_trial_phase, name=\"clinical trial phase\", curie=BIOLINK.curie('clinical_trial_phase'),\n", + " model_uri=DIST.clinical_trial_phase, domain=NamedThing, range=Optional[Union[str, \"ResearchPhaseEnum\"]])\n", + "\n", + "slots.clinical_trial_primary_purpose = Slot(uri=BIOLINK.clinical_trial_primary_purpose, name=\"clinical trial primary purpose\", curie=BIOLINK.curie('clinical_trial_primary_purpose'),\n", + " model_uri=DIST.clinical_trial_primary_purpose, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_intervention_model = Slot(uri=BIOLINK.clinical_trial_intervention_model, name=\"clinical trial intervention model\", curie=BIOLINK.curie('clinical_trial_intervention_model'),\n", + " model_uri=DIST.clinical_trial_intervention_model, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_time_perspective = Slot(uri=BIOLINK.clinical_trial_time_perspective, name=\"clinical trial time perspective\", curie=BIOLINK.curie('clinical_trial_time_perspective'),\n", + " model_uri=DIST.clinical_trial_time_perspective, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_overall_status = Slot(uri=BIOLINK.clinical_trial_overall_status, name=\"clinical trial overall status\", curie=BIOLINK.curie('clinical_trial_overall_status'),\n", + " model_uri=DIST.clinical_trial_overall_status, domain=ClinicalTrial, range=Optional[Union[str, \"ClinicalTrialStatusEnum\"]])\n", + "\n", + "slots.clinical_trial_intervention_boxed_warning = Slot(uri=BIOLINK.clinical_trial_intervention_boxed_warning, name=\"clinical trial intervention boxed warning\", curie=BIOLINK.curie('clinical_trial_intervention_boxed_warning'),\n", + " model_uri=DIST.clinical_trial_intervention_boxed_warning, domain=Association, range=Optional[Union[bool, Bool]])\n", + "\n", + "slots.clinical_trial_tested_intervention = Slot(uri=BIOLINK.clinical_trial_tested_intervention, name=\"clinical trial tested intervention\", curie=BIOLINK.curie('clinical_trial_tested_intervention'),\n", + " model_uri=DIST.clinical_trial_tested_intervention, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_brief_title = Slot(uri=BIOLINK.clinical_trial_brief_title, name=\"clinical trial brief title\", curie=BIOLINK.curie('clinical_trial_brief_title'),\n", + " model_uri=DIST.clinical_trial_brief_title, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_enrollment_type = Slot(uri=BIOLINK.clinical_trial_enrollment_type, name=\"clinical trial enrollment type\", curie=BIOLINK.curie('clinical_trial_enrollment_type'),\n", + " model_uri=DIST.clinical_trial_enrollment_type, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_start_date = Slot(uri=BIOLINK.clinical_trial_start_date, name=\"clinical trial start date\", curie=BIOLINK.curie('clinical_trial_start_date'),\n", + " model_uri=DIST.clinical_trial_start_date, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_enrollment = Slot(uri=BIOLINK.clinical_trial_enrollment, name=\"clinical trial enrollment\", curie=BIOLINK.curie('clinical_trial_enrollment'),\n", + " model_uri=DIST.clinical_trial_enrollment, domain=ClinicalTrial, range=Optional[int])\n", + "\n", + "slots.clinical_trial_age_stage = Slot(uri=BIOLINK.clinical_trial_age_stage, name=\"clinical trial age stage\", curie=BIOLINK.curie('clinical_trial_age_stage'),\n", + " model_uri=DIST.clinical_trial_age_stage, domain=ClinicalTrial, range=Optional[Union[Union[str, \"ClinicalTrialAgeStageEnum\"], list[Union[str, \"ClinicalTrialAgeStageEnum\"]]]])\n", + "\n", + "slots.clinical_trial_age_range = Slot(uri=BIOLINK.clinical_trial_age_range, name=\"clinical trial age range\", curie=BIOLINK.curie('clinical_trial_age_range'),\n", + " model_uri=DIST.clinical_trial_age_range, domain=ClinicalTrial, range=Optional[str])\n", + "\n", + "slots.clinical_trial_interventions = Slot(uri=BIOLINK.clinical_trial_interventions, name=\"clinical trial interventions\", curie=BIOLINK.curie('clinical_trial_interventions'),\n", + " model_uri=DIST.clinical_trial_interventions, domain=ClinicalTrial, range=Optional[Union[Union[str, ClinicalInterventionId], list[Union[str, ClinicalInterventionId]]]])\n", + "\n", + "slots.clinical_trial_conditions = Slot(uri=BIOLINK.clinical_trial_conditions, name=\"clinical trial conditions\", curie=BIOLINK.curie('clinical_trial_conditions'),\n", + " model_uri=DIST.clinical_trial_conditions, domain=ClinicalTrial, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.has_biological_sequence = Slot(uri=BIOLINK.has_biological_sequence, name=\"has biological sequence\", curie=BIOLINK.curie('has_biological_sequence'),\n", " model_uri=DIST.has_biological_sequence, domain=NamedThing, range=Optional[Union[str, BiologicalSequence]])\n", "\n", "slots.has_gene_or_gene_product = Slot(uri=BIOLINK.has_gene_or_gene_product, name=\"has gene or gene product\", curie=BIOLINK.curie('has_gene_or_gene_product'),\n", - " model_uri=DIST.has_gene_or_gene_product, domain=NamedThing, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.has_gene_or_gene_product, domain=NamedThing, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.has_gene = Slot(uri=BIOLINK.has_gene, name=\"has gene\", curie=BIOLINK.curie('has_gene'),\n", - " model_uri=DIST.has_gene, domain=NamedThing, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.has_gene, domain=NamedThing, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", + "\n", + "slots.inheritance = Slot(uri=BIOLINK.inheritance, name=\"inheritance\", curie=BIOLINK.curie('inheritance'),\n", + " model_uri=DIST.inheritance, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[str, GeneticInheritanceId]])\n", "\n", "slots.has_zygosity = Slot(uri=BIOLINK.has_zygosity, name=\"has zygosity\", curie=BIOLINK.curie('has_zygosity'),\n", " model_uri=DIST.has_zygosity, domain=NucleicAcidEntity, range=Optional[Union[str, ZygosityId]])\n", @@ -14257,25 +16722,31 @@ " model_uri=DIST.is_metabolite, domain=MolecularEntity, range=Optional[Union[bool, Bool]])\n", "\n", "slots.has_constituent = Slot(uri=BIOLINK.has_constituent, name=\"has constituent\", curie=BIOLINK.curie('has_constituent'),\n", - " model_uri=DIST.has_constituent, domain=NamedThing, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]])\n", + " model_uri=DIST.has_constituent, domain=NamedThing, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]])\n", "\n", "slots.has_drug = Slot(uri=BIOLINK.has_drug, name=\"has drug\", curie=BIOLINK.curie('has_drug'),\n", - " model_uri=DIST.has_drug, domain=NamedThing, range=Optional[Union[Union[str, DrugId], List[Union[str, DrugId]]]])\n", + " model_uri=DIST.has_drug, domain=NamedThing, range=Optional[Union[Union[str, DrugId], list[Union[str, DrugId]]]])\n", "\n", "slots.has_device = Slot(uri=BIOLINK.has_device, name=\"has device\", curie=BIOLINK.curie('has_device'),\n", - " model_uri=DIST.has_device, domain=NamedThing, range=Optional[Union[Union[str, DeviceId], List[Union[str, DeviceId]]]])\n", + " model_uri=DIST.has_device, domain=NamedThing, range=Optional[Union[Union[str, DeviceId], list[Union[str, DeviceId]]]])\n", "\n", "slots.has_procedure = Slot(uri=BIOLINK.has_procedure, name=\"has procedure\", curie=BIOLINK.curie('has_procedure'),\n", - " model_uri=DIST.has_procedure, domain=NamedThing, range=Optional[Union[Union[str, ProcedureId], List[Union[str, ProcedureId]]]])\n", + " model_uri=DIST.has_procedure, domain=NamedThing, range=Optional[Union[Union[str, ProcedureId], list[Union[str, ProcedureId]]]])\n", "\n", "slots.has_receptor = Slot(uri=BIOLINK.has_receptor, name=\"has receptor\", curie=BIOLINK.curie('has_receptor'),\n", - " model_uri=DIST.has_receptor, domain=None, range=Optional[Union[str, OrganismalEntityId]])\n", + " model_uri=DIST.has_receptor, domain=ExposureEvent, range=Optional[Union[str, OrganismalEntityId]])\n", "\n", "slots.has_stressor = Slot(uri=BIOLINK.has_stressor, name=\"has stressor\", curie=BIOLINK.curie('has_stressor'),\n", - " model_uri=DIST.has_stressor, domain=None, range=Optional[str])\n", + " model_uri=DIST.has_stressor, domain=ExposureEvent, range=Optional[str])\n", "\n", "slots.has_route = Slot(uri=BIOLINK.has_route, name=\"has route\", curie=BIOLINK.curie('has_route'),\n", - " model_uri=DIST.has_route, domain=None, range=Optional[str])\n", + " model_uri=DIST.has_route, domain=ExposureEvent, range=Optional[str])\n", + "\n", + "slots.response_context_qualifier = Slot(uri=BIOLINK.response_context_qualifier, name=\"response context qualifier\", curie=BIOLINK.curie('response_context_qualifier'),\n", + " model_uri=DIST.response_context_qualifier, domain=Association, range=Optional[Union[str, \"ResponseEnum\"]])\n", + "\n", + "slots.response_target_context_qualifier = Slot(uri=BIOLINK.response_target_context_qualifier, name=\"response target context qualifier\", curie=BIOLINK.curie('response_target_context_qualifier'),\n", + " model_uri=DIST.response_target_context_qualifier, domain=Association, range=Optional[Union[str, \"ResponseTargetEnum\"]])\n", "\n", "slots.population_context_qualifier = Slot(uri=BIOLINK.population_context_qualifier, name=\"population context qualifier\", curie=BIOLINK.curie('population_context_qualifier'),\n", " model_uri=DIST.population_context_qualifier, domain=Association, range=Optional[Union[str, PopulationOfIndividualOrganismsId]])\n", @@ -14293,19 +16764,31 @@ " model_uri=DIST.trade_name, domain=ChemicalEntity, range=Optional[str])\n", "\n", "slots.available_from = Slot(uri=BIOLINK.available_from, name=\"available from\", curie=BIOLINK.curie('available_from'),\n", - " model_uri=DIST.available_from, domain=NamedThing, range=Optional[Union[Union[str, \"DrugAvailabilityEnum\"], List[Union[str, \"DrugAvailabilityEnum\"]]]])\n", + " model_uri=DIST.available_from, domain=NamedThing, range=Optional[Union[Union[str, \"DrugAvailabilityEnum\"], list[Union[str, \"DrugAvailabilityEnum\"]]]])\n", "\n", "slots.is_toxic = Slot(uri=BIOLINK.is_toxic, name=\"is toxic\", curie=BIOLINK.curie('is_toxic'),\n", " model_uri=DIST.is_toxic, domain=NamedThing, range=Optional[Union[bool, Bool]])\n", "\n", "slots.has_chemical_role = Slot(uri=BIOLINK.has_chemical_role, name=\"has chemical role\", curie=BIOLINK.curie('has_chemical_role'),\n", - " model_uri=DIST.has_chemical_role, domain=NamedThing, range=Optional[Union[Union[str, ChemicalRoleId], List[Union[str, ChemicalRoleId]]]])\n", + " model_uri=DIST.has_chemical_role, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalRoleId], list[Union[str, ChemicalRoleId]]]])\n", + "\n", + "slots.is_chemical_role_of = Slot(uri=BIOLINK.is_chemical_role_of, name=\"is chemical role of\", curie=BIOLINK.curie('is_chemical_role_of'),\n", + " model_uri=DIST.is_chemical_role_of, domain=ChemicalRole, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.max_tolerated_dose = Slot(uri=BIOLINK.max_tolerated_dose, name=\"max tolerated dose\", curie=BIOLINK.curie('max_tolerated_dose'),\n", " model_uri=DIST.max_tolerated_dose, domain=NamedThing, range=Optional[str])\n", "\n", "slots.animal_model_available_from = Slot(uri=BIOLINK.animal_model_available_from, name=\"animal model available from\", curie=BIOLINK.curie('animal_model_available_from'),\n", - " model_uri=DIST.animal_model_available_from, domain=NamedThing, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.animal_model_available_from, domain=NamedThing, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + "\n", + "slots.affinity = Slot(uri=BIOLINK.affinity, name=\"affinity\", curie=BIOLINK.curie('affinity'),\n", + " model_uri=DIST.affinity, domain=NamedThing, range=Optional[float])\n", + "\n", + "slots.affinity_parameter = Slot(uri=BIOLINK.affinity_parameter, name=\"affinity parameter\", curie=BIOLINK.curie('affinity_parameter'),\n", + " model_uri=DIST.affinity_parameter, domain=NamedThing, range=Optional[Union[str, \"AffinityParameterEnum\"]])\n", + "\n", + "slots.has_affinity = Slot(uri=BIOLINK.has_affinity, name=\"has affinity\", curie=BIOLINK.curie('has_affinity'),\n", + " model_uri=DIST.has_affinity, domain=Association, range=Optional[Union[dict[Union[str, AffinityMeasurementId], Union[dict, AffinityMeasurement]], list[Union[dict, AffinityMeasurement]]]])\n", "\n", "slots.FDA_adverse_event_level = Slot(uri=BIOLINK.FDA_adverse_event_level, name=\"FDA adverse event level\", curie=BIOLINK.curie('FDA_adverse_event_level'),\n", " model_uri=DIST.FDA_adverse_event_level, domain=Association, range=Optional[Union[str, \"FDAIDAAdverseEventEnum\"]])\n", @@ -14313,11 +16796,14 @@ "slots.highest_FDA_approval_status = Slot(uri=BIOLINK.highest_FDA_approval_status, name=\"highest FDA approval status\", curie=BIOLINK.curie('highest_FDA_approval_status'),\n", " model_uri=DIST.highest_FDA_approval_status, domain=None, range=Optional[Union[str, \"ApprovalStatusEnum\"]])\n", "\n", + "slots.FDA_regulatory_approvals = Slot(uri=BIOLINK.FDA_regulatory_approvals, name=\"FDA regulatory approvals\", curie=BIOLINK.curie('FDA_regulatory_approvals'),\n", + " model_uri=DIST.FDA_regulatory_approvals, domain=None, range=Optional[Union[str, list[str]]])\n", + "\n", "slots.drug_regulatory_status_world_wide = Slot(uri=BIOLINK.drug_regulatory_status_world_wide, name=\"drug regulatory status world wide\", curie=BIOLINK.curie('drug_regulatory_status_world_wide'),\n", " model_uri=DIST.drug_regulatory_status_world_wide, domain=None, range=Optional[Union[str, \"ApprovalStatusEnum\"]])\n", "\n", "slots.routes_of_delivery = Slot(uri=BIOLINK.routes_of_delivery, name=\"routes of delivery\", curie=BIOLINK.curie('routes_of_delivery'),\n", - " model_uri=DIST.routes_of_delivery, domain=None, range=Optional[Union[Union[str, \"DrugDeliveryEnum\"], List[Union[str, \"DrugDeliveryEnum\"]]]])\n", + " model_uri=DIST.routes_of_delivery, domain=None, range=Optional[Union[Union[str, \"DrugDeliveryEnum\"], list[Union[str, \"DrugDeliveryEnum\"]]]])\n", "\n", "slots.form_or_variant_qualifier = Slot(uri=BIOLINK.form_or_variant_qualifier, name=\"form or variant qualifier\", curie=BIOLINK.curie('form_or_variant_qualifier'),\n", " model_uri=DIST.form_or_variant_qualifier, domain=Association, range=Optional[str])\n", @@ -14326,7 +16812,7 @@ " model_uri=DIST.specialization_qualifier, domain=Association, range=Optional[str])\n", "\n", "slots.aspect_qualifier = Slot(uri=BIOLINK.aspect_qualifier, name=\"aspect qualifier\", curie=BIOLINK.curie('aspect_qualifier'),\n", - " model_uri=DIST.aspect_qualifier, domain=Association, range=Optional[str])\n", + " model_uri=DIST.aspect_qualifier, domain=Association, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", "slots.derivative_qualifier = Slot(uri=BIOLINK.derivative_qualifier, name=\"derivative qualifier\", curie=BIOLINK.curie('derivative_qualifier'),\n", " model_uri=DIST.derivative_qualifier, domain=Association, range=Optional[str])\n", @@ -14337,6 +16823,9 @@ "slots.context_qualifier = Slot(uri=BIOLINK.context_qualifier, name=\"context qualifier\", curie=BIOLINK.curie('context_qualifier'),\n", " model_uri=DIST.context_qualifier, domain=Association, range=Optional[str])\n", "\n", + "slots.process_qualifier = Slot(uri=BIOLINK.process_qualifier, name=\"process qualifier\", curie=BIOLINK.curie('process_qualifier'),\n", + " model_uri=DIST.process_qualifier, domain=Association, range=Optional[str])\n", + "\n", "slots.direction_qualifier = Slot(uri=BIOLINK.direction_qualifier, name=\"direction qualifier\", curie=BIOLINK.curie('direction_qualifier'),\n", " model_uri=DIST.direction_qualifier, domain=Association, range=Optional[str])\n", "\n", @@ -14344,19 +16833,19 @@ " model_uri=DIST.mapped_predicate, domain=None, range=Optional[str])\n", "\n", "slots.predicate_mappings = Slot(uri=BIOLINK.predicate_mappings, name=\"predicate mappings\", curie=BIOLINK.curie('predicate_mappings'),\n", - " model_uri=DIST.predicate_mappings, domain=None, range=Optional[Union[Union[dict, PredicateMapping], List[Union[dict, PredicateMapping]]]])\n", + " model_uri=DIST.predicate_mappings, domain=None, range=Optional[Union[Union[dict, PredicateMapping], list[Union[dict, PredicateMapping]]]])\n", "\n", "slots.exact_matches = Slot(uri=BIOLINK.exact_matches, name=\"exact matches\", curie=BIOLINK.curie('exact_matches'),\n", - " model_uri=DIST.exact_matches, domain=None, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.exact_matches, domain=None, range=Optional[Union[str, list[str]]])\n", "\n", "slots.narrow_matches = Slot(uri=BIOLINK.narrow_matches, name=\"narrow matches\", curie=BIOLINK.curie('narrow_matches'),\n", - " model_uri=DIST.narrow_matches, domain=None, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.narrow_matches, domain=None, range=Optional[Union[str, list[str]]])\n", "\n", "slots.broad_matches = Slot(uri=BIOLINK.broad_matches, name=\"broad matches\", curie=BIOLINK.curie('broad_matches'),\n", - " model_uri=DIST.broad_matches, domain=None, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.broad_matches, domain=None, range=Optional[Union[str, list[str]]])\n", "\n", "slots.subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", - " model_uri=DIST.subject_aspect_qualifier, domain=Association, range=Optional[str])\n", + " model_uri=DIST.subject_aspect_qualifier, domain=Association, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", "slots.subject_specialization_qualifier = Slot(uri=BIOLINK.subject_specialization_qualifier, name=\"subject specialization qualifier\", curie=BIOLINK.curie('subject_specialization_qualifier'),\n", " model_uri=DIST.subject_specialization_qualifier, domain=Association, range=Optional[Union[str, URIorCURIE]])\n", @@ -14370,6 +16859,12 @@ "slots.subject_derivative_qualifier = Slot(uri=BIOLINK.subject_derivative_qualifier, name=\"subject derivative qualifier\", curie=BIOLINK.curie('subject_derivative_qualifier'),\n", " model_uri=DIST.subject_derivative_qualifier, domain=Association, range=Optional[str])\n", "\n", + "slots.subject_activity_qualifier = Slot(uri=BIOLINK.subject_activity_qualifier, name=\"subject activity qualifier\", curie=BIOLINK.curie('subject_activity_qualifier'),\n", + " model_uri=DIST.subject_activity_qualifier, domain=Association, range=Optional[str])\n", + "\n", + "slots.subject_process_qualifier = Slot(uri=BIOLINK.subject_process_qualifier, name=\"subject process qualifier\", curie=BIOLINK.curie('subject_process_qualifier'),\n", + " model_uri=DIST.subject_process_qualifier, domain=Association, range=Optional[str])\n", + "\n", "slots.subject_context_qualifier = Slot(uri=BIOLINK.subject_context_qualifier, name=\"subject context qualifier\", curie=BIOLINK.curie('subject_context_qualifier'),\n", " model_uri=DIST.subject_context_qualifier, domain=Association, range=Optional[str])\n", "\n", @@ -14377,7 +16872,7 @@ " model_uri=DIST.subject_direction_qualifier, domain=Association, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", "\n", "slots.object_aspect_qualifier = Slot(uri=BIOLINK.object_aspect_qualifier, name=\"object aspect qualifier\", curie=BIOLINK.curie('object_aspect_qualifier'),\n", - " model_uri=DIST.object_aspect_qualifier, domain=Association, range=Optional[str])\n", + " model_uri=DIST.object_aspect_qualifier, domain=Association, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", "slots.object_specialization_qualifier = Slot(uri=BIOLINK.object_specialization_qualifier, name=\"object specialization qualifier\", curie=BIOLINK.curie('object_specialization_qualifier'),\n", " model_uri=DIST.object_specialization_qualifier, domain=Association, range=Optional[Union[str, URIorCURIE]])\n", @@ -14391,6 +16886,12 @@ "slots.object_derivative_qualifier = Slot(uri=BIOLINK.object_derivative_qualifier, name=\"object derivative qualifier\", curie=BIOLINK.curie('object_derivative_qualifier'),\n", " model_uri=DIST.object_derivative_qualifier, domain=Association, range=Optional[str])\n", "\n", + "slots.object_activity_qualifier = Slot(uri=BIOLINK.object_activity_qualifier, name=\"object activity qualifier\", curie=BIOLINK.curie('object_activity_qualifier'),\n", + " model_uri=DIST.object_activity_qualifier, domain=Association, range=Optional[str])\n", + "\n", + "slots.object_process_qualifier = Slot(uri=BIOLINK.object_process_qualifier, name=\"object process qualifier\", curie=BIOLINK.curie('object_process_qualifier'),\n", + " model_uri=DIST.object_process_qualifier, domain=Association, range=Optional[str])\n", + "\n", "slots.object_context_qualifier = Slot(uri=BIOLINK.object_context_qualifier, name=\"object context qualifier\", curie=BIOLINK.curie('object_context_qualifier'),\n", " model_uri=DIST.object_context_qualifier, domain=Association, range=Optional[str])\n", "\n", @@ -14398,7 +16899,7 @@ " model_uri=DIST.object_direction_qualifier, domain=Association, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", "\n", "slots.qualified_predicate = Slot(uri=BIOLINK.qualified_predicate, name=\"qualified predicate\", curie=BIOLINK.curie('qualified_predicate'),\n", - " model_uri=DIST.qualified_predicate, domain=Association, range=Optional[str])\n", + " model_uri=DIST.qualified_predicate, domain=Association, range=Optional[Union[str, URIorCURIE]])\n", "\n", "slots.statement_qualifier = Slot(uri=BIOLINK.statement_qualifier, name=\"statement qualifier\", curie=BIOLINK.curie('statement_qualifier'),\n", " model_uri=DIST.statement_qualifier, domain=Association, range=Optional[str])\n", @@ -14407,7 +16908,7 @@ " model_uri=DIST.causal_mechanism_qualifier, domain=Association, range=Optional[Union[str, \"CausalMechanismQualifierEnum\"]])\n", "\n", "slots.anatomical_context_qualifier = Slot(uri=BIOLINK.anatomical_context_qualifier, name=\"anatomical context qualifier\", curie=BIOLINK.curie('anatomical_context_qualifier'),\n", - " model_uri=DIST.anatomical_context_qualifier, domain=Association, range=Optional[str])\n", + " model_uri=DIST.anatomical_context_qualifier, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.species_context_qualifier = Slot(uri=BIOLINK.species_context_qualifier, name=\"species context qualifier\", curie=BIOLINK.curie('species_context_qualifier'),\n", " model_uri=DIST.species_context_qualifier, domain=Association, range=Optional[Union[str, OrganismTaxonId]])\n", @@ -14416,7 +16917,7 @@ " model_uri=DIST.disease_context_qualifier, domain=Association, range=Optional[Union[str, DiseaseId]])\n", "\n", "slots.qualifiers = Slot(uri=BIOLINK.qualifiers, name=\"qualifiers\", curie=BIOLINK.curie('qualifiers'),\n", - " model_uri=DIST.qualifiers, domain=Association, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.qualifiers, domain=Association, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.frequency_qualifier = Slot(uri=BIOLINK.frequency_qualifier, name=\"frequency qualifier\", curie=BIOLINK.curie('frequency_qualifier'),\n", " model_uri=DIST.frequency_qualifier, domain=Association, range=Optional[Union[str, FrequencyValue]])\n", @@ -14440,226 +16941,235 @@ " model_uri=DIST.quantifier_qualifier, domain=Association, range=Optional[Union[str, OntologyClassId]])\n", "\n", "slots.catalyst_qualifier = Slot(uri=BIOLINK.catalyst_qualifier, name=\"catalyst qualifier\", curie=BIOLINK.curie('catalyst_qualifier'),\n", - " model_uri=DIST.catalyst_qualifier, domain=Association, range=Optional[Union[Union[dict, MacromolecularMachineMixin], List[Union[dict, MacromolecularMachineMixin]]]])\n", + " model_uri=DIST.catalyst_qualifier, domain=Association, range=Optional[Union[Union[dict, MacromolecularMachineMixin], list[Union[dict, MacromolecularMachineMixin]]]])\n", "\n", "slots.stage_qualifier = Slot(uri=BIOLINK.stage_qualifier, name=\"stage qualifier\", curie=BIOLINK.curie('stage_qualifier'),\n", " model_uri=DIST.stage_qualifier, domain=Association, range=Optional[Union[str, LifeStageId]])\n", "\n", "slots.related_to = Slot(uri=BIOLINK.related_to, name=\"related to\", curie=BIOLINK.curie('related_to'),\n", - " model_uri=DIST.related_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.related_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.related_to_at_concept_level = Slot(uri=BIOLINK.related_to_at_concept_level, name=\"related to at concept level\", curie=BIOLINK.curie('related_to_at_concept_level'),\n", - " model_uri=DIST.related_to_at_concept_level, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.related_to_at_concept_level, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.related_to_at_instance_level = Slot(uri=BIOLINK.related_to_at_instance_level, name=\"related to at instance level\", curie=BIOLINK.curie('related_to_at_instance_level'),\n", - " model_uri=DIST.related_to_at_instance_level, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.related_to_at_instance_level, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.associated_with = Slot(uri=BIOLINK.associated_with, name=\"associated with\", curie=BIOLINK.curie('associated_with'),\n", - " model_uri=DIST.associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.superclass_of = Slot(uri=BIOLINK.superclass_of, name=\"superclass of\", curie=BIOLINK.curie('superclass_of'),\n", - " model_uri=DIST.superclass_of, domain=None, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.superclass_of, domain=None, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.subclass_of = Slot(uri=BIOLINK.subclass_of, name=\"subclass of\", curie=BIOLINK.curie('subclass_of'),\n", - " model_uri=DIST.subclass_of, domain=None, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.subclass_of, domain=None, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.same_as = Slot(uri=BIOLINK.same_as, name=\"same as\", curie=BIOLINK.curie('same_as'),\n", - " model_uri=DIST.same_as, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.same_as, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.close_match = Slot(uri=BIOLINK.close_match, name=\"close match\", curie=BIOLINK.curie('close_match'),\n", - " model_uri=DIST.close_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.close_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.exact_match = Slot(uri=BIOLINK.exact_match, name=\"exact match\", curie=BIOLINK.curie('exact_match'),\n", - " model_uri=DIST.exact_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.exact_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.broad_match = Slot(uri=BIOLINK.broad_match, name=\"broad match\", curie=BIOLINK.curie('broad_match'),\n", - " model_uri=DIST.broad_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.broad_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.narrow_match = Slot(uri=BIOLINK.narrow_match, name=\"narrow match\", curie=BIOLINK.curie('narrow_match'),\n", - " model_uri=DIST.narrow_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.narrow_match, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.member_of = Slot(uri=BIOLINK.member_of, name=\"member of\", curie=BIOLINK.curie('member_of'),\n", - " model_uri=DIST.member_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.member_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_member = Slot(uri=BIOLINK.has_member, name=\"has member\", curie=BIOLINK.curie('has_member'),\n", - " model_uri=DIST.has_member, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_member, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.opposite_of = Slot(uri=BIOLINK.opposite_of, name=\"opposite of\", curie=BIOLINK.curie('opposite_of'),\n", - " model_uri=DIST.opposite_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.opposite_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.affects_likelihood_of = Slot(uri=BIOLINK.affects_likelihood_of, name=\"affects likelihood of\", curie=BIOLINK.curie('affects_likelihood_of'),\n", - " model_uri=DIST.affects_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.affects_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.likelihood_affected_by = Slot(uri=BIOLINK.likelihood_affected_by, name=\"likelihood affected by\", curie=BIOLINK.curie('likelihood_affected_by'),\n", - " model_uri=DIST.likelihood_affected_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.likelihood_affected_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.associated_with_likelihood_of = Slot(uri=BIOLINK.associated_with_likelihood_of, name=\"associated with likelihood of\", curie=BIOLINK.curie('associated_with_likelihood_of'),\n", - " model_uri=DIST.associated_with_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.associated_with_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.likelihood_associated_with = Slot(uri=BIOLINK.likelihood_associated_with, name=\"likelihood associated with\", curie=BIOLINK.curie('likelihood_associated_with'),\n", - " model_uri=DIST.likelihood_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.likelihood_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.associated_with_increased_likelihood_of = Slot(uri=BIOLINK.associated_with_increased_likelihood_of, name=\"associated with increased likelihood of\", curie=BIOLINK.curie('associated_with_increased_likelihood_of'),\n", - " model_uri=DIST.associated_with_increased_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.associated_with_increased_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.increased_likelihood_associated_with = Slot(uri=BIOLINK.increased_likelihood_associated_with, name=\"increased likelihood associated with\", curie=BIOLINK.curie('increased_likelihood_associated_with'),\n", - " model_uri=DIST.increased_likelihood_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.increased_likelihood_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.associated_with_decreased_likelihood_of = Slot(uri=BIOLINK.associated_with_decreased_likelihood_of, name=\"associated with decreased likelihood of\", curie=BIOLINK.curie('associated_with_decreased_likelihood_of'),\n", - " model_uri=DIST.associated_with_decreased_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.associated_with_decreased_likelihood_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.decreased_likelihood_associated_with = Slot(uri=BIOLINK.decreased_likelihood_associated_with, name=\"decreased likelihood associated with\", curie=BIOLINK.curie('decreased_likelihood_associated_with'),\n", - " model_uri=DIST.decreased_likelihood_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.decreased_likelihood_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.target_for = Slot(uri=BIOLINK.target_for, name=\"target for\", curie=BIOLINK.curie('target_for'),\n", - " model_uri=DIST.target_for, domain=Gene, range=Optional[Union[Union[str, DiseaseId], List[Union[str, DiseaseId]]]])\n", + " model_uri=DIST.target_for, domain=Gene, range=Optional[Union[Union[str, DiseaseId], list[Union[str, DiseaseId]]]])\n", "\n", "slots.has_target = Slot(uri=BIOLINK.has_target, name=\"has target\", curie=BIOLINK.curie('has_target'),\n", - " model_uri=DIST.has_target, domain=Disease, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.has_target, domain=Disease, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.active_in = Slot(uri=BIOLINK.active_in, name=\"active in\", curie=BIOLINK.curie('active_in'),\n", - " model_uri=DIST.active_in, domain=None, range=Optional[Union[Union[str, CellularComponentId], List[Union[str, CellularComponentId]]]])\n", + " model_uri=DIST.active_in, domain=None, range=Optional[Union[Union[str, CellularComponentId], list[Union[str, CellularComponentId]]]])\n", "\n", "slots.has_active_component = Slot(uri=BIOLINK.has_active_component, name=\"has active component\", curie=BIOLINK.curie('has_active_component'),\n", - " model_uri=DIST.has_active_component, domain=CellularComponent, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_active_component, domain=CellularComponent, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.acts_upstream_of = Slot(uri=BIOLINK.acts_upstream_of, name=\"acts upstream of\", curie=BIOLINK.curie('acts_upstream_of'),\n", - " model_uri=DIST.acts_upstream_of, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], List[Union[str, BiologicalProcessId]]]])\n", + " model_uri=DIST.acts_upstream_of, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], list[Union[str, BiologicalProcessId]]]])\n", "\n", "slots.has_upstream_actor = Slot(uri=BIOLINK.has_upstream_actor, name=\"has upstream actor\", curie=BIOLINK.curie('has_upstream_actor'),\n", - " model_uri=DIST.has_upstream_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_upstream_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.acts_upstream_of_positive_effect = Slot(uri=BIOLINK.acts_upstream_of_positive_effect, name=\"acts upstream of positive effect\", curie=BIOLINK.curie('acts_upstream_of_positive_effect'),\n", - " model_uri=DIST.acts_upstream_of_positive_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], List[Union[str, BiologicalProcessId]]]])\n", + " model_uri=DIST.acts_upstream_of_positive_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], list[Union[str, BiologicalProcessId]]]])\n", "\n", "slots.has_positive_upstream_actor = Slot(uri=BIOLINK.has_positive_upstream_actor, name=\"has positive upstream actor\", curie=BIOLINK.curie('has_positive_upstream_actor'),\n", - " model_uri=DIST.has_positive_upstream_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_positive_upstream_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.acts_upstream_of_negative_effect = Slot(uri=BIOLINK.acts_upstream_of_negative_effect, name=\"acts upstream of negative effect\", curie=BIOLINK.curie('acts_upstream_of_negative_effect'),\n", - " model_uri=DIST.acts_upstream_of_negative_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], List[Union[str, BiologicalProcessId]]]])\n", + " model_uri=DIST.acts_upstream_of_negative_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], list[Union[str, BiologicalProcessId]]]])\n", "\n", "slots.has_negative_upstream_actor = Slot(uri=BIOLINK.has_negative_upstream_actor, name=\"has negative upstream actor\", curie=BIOLINK.curie('has_negative_upstream_actor'),\n", - " model_uri=DIST.has_negative_upstream_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_negative_upstream_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.acts_upstream_of_or_within = Slot(uri=BIOLINK.acts_upstream_of_or_within, name=\"acts upstream of or within\", curie=BIOLINK.curie('acts_upstream_of_or_within'),\n", - " model_uri=DIST.acts_upstream_of_or_within, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], List[Union[str, BiologicalProcessId]]]])\n", + " model_uri=DIST.acts_upstream_of_or_within, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], list[Union[str, BiologicalProcessId]]]])\n", "\n", "slots.has_upstream_or_within_actor = Slot(uri=BIOLINK.has_upstream_or_within_actor, name=\"has upstream or within actor\", curie=BIOLINK.curie('has_upstream_or_within_actor'),\n", - " model_uri=DIST.has_upstream_or_within_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_upstream_or_within_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.acts_upstream_of_or_within_positive_effect = Slot(uri=BIOLINK.acts_upstream_of_or_within_positive_effect, name=\"acts upstream of or within positive effect\", curie=BIOLINK.curie('acts_upstream_of_or_within_positive_effect'),\n", - " model_uri=DIST.acts_upstream_of_or_within_positive_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], List[Union[str, BiologicalProcessId]]]])\n", + " model_uri=DIST.acts_upstream_of_or_within_positive_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], list[Union[str, BiologicalProcessId]]]])\n", "\n", "slots.has_positive_upstream_or_within_actor = Slot(uri=BIOLINK.has_positive_upstream_or_within_actor, name=\"has positive upstream or within actor\", curie=BIOLINK.curie('has_positive_upstream_or_within_actor'),\n", - " model_uri=DIST.has_positive_upstream_or_within_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_positive_upstream_or_within_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.acts_upstream_of_or_within_negative_effect = Slot(uri=BIOLINK.acts_upstream_of_or_within_negative_effect, name=\"acts upstream of or within negative effect\", curie=BIOLINK.curie('acts_upstream_of_or_within_negative_effect'),\n", - " model_uri=DIST.acts_upstream_of_or_within_negative_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], List[Union[str, BiologicalProcessId]]]])\n", + " model_uri=DIST.acts_upstream_of_or_within_negative_effect, domain=None, range=Optional[Union[Union[str, BiologicalProcessId], list[Union[str, BiologicalProcessId]]]])\n", "\n", "slots.has_negative_upstream_or_within_actor = Slot(uri=BIOLINK.has_negative_upstream_or_within_actor, name=\"has negative upstream or within actor\", curie=BIOLINK.curie('has_negative_upstream_or_within_actor'),\n", - " model_uri=DIST.has_negative_upstream_or_within_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_negative_upstream_or_within_actor, domain=BiologicalProcess, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.mentions = Slot(uri=BIOLINK.mentions, name=\"mentions\", curie=BIOLINK.curie('mentions'),\n", - " model_uri=DIST.mentions, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.mentions, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.mentioned_by = Slot(uri=BIOLINK.mentioned_by, name=\"mentioned by\", curie=BIOLINK.curie('mentioned_by'),\n", - " model_uri=DIST.mentioned_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.mentioned_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.contributor = Slot(uri=BIOLINK.contributor, name=\"contributor\", curie=BIOLINK.curie('contributor'),\n", - " model_uri=DIST.contributor, domain=Agent, range=Optional[Union[Union[str, InformationContentEntityId], List[Union[str, InformationContentEntityId]]]])\n", + " model_uri=DIST.contributor, domain=Agent, range=Optional[Union[Union[str, InformationContentEntityId], list[Union[str, InformationContentEntityId]]]])\n", "\n", "slots.has_contributor = Slot(uri=BIOLINK.has_contributor, name=\"has contributor\", curie=BIOLINK.curie('has_contributor'),\n", - " model_uri=DIST.has_contributor, domain=InformationContentEntity, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]])\n", + " model_uri=DIST.has_contributor, domain=InformationContentEntity, range=Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]])\n", "\n", "slots.provider = Slot(uri=BIOLINK.provider, name=\"provider\", curie=BIOLINK.curie('provider'),\n", - " model_uri=DIST.provider, domain=Agent, range=Optional[Union[Union[str, InformationContentEntityId], List[Union[str, InformationContentEntityId]]]])\n", + " model_uri=DIST.provider, domain=Agent, range=Optional[Union[Union[str, InformationContentEntityId], list[Union[str, InformationContentEntityId]]]])\n", "\n", "slots.has_provider = Slot(uri=BIOLINK.has_provider, name=\"has provider\", curie=BIOLINK.curie('has_provider'),\n", - " model_uri=DIST.has_provider, domain=InformationContentEntity, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]])\n", + " model_uri=DIST.has_provider, domain=InformationContentEntity, range=Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]])\n", "\n", "slots.publisher = Slot(uri=BIOLINK.publisher, name=\"publisher\", curie=BIOLINK.curie('publisher'),\n", - " model_uri=DIST.publisher, domain=Agent, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]])\n", + " model_uri=DIST.publisher, domain=Agent, range=Optional[Union[Union[str, PublicationId], list[Union[str, PublicationId]]]])\n", "\n", "slots.has_publisher = Slot(uri=BIOLINK.has_publisher, name=\"has publisher\", curie=BIOLINK.curie('has_publisher'),\n", - " model_uri=DIST.has_publisher, domain=Publication, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]])\n", + " model_uri=DIST.has_publisher, domain=Publication, range=Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]])\n", "\n", "slots.editor = Slot(uri=BIOLINK.editor, name=\"editor\", curie=BIOLINK.curie('editor'),\n", - " model_uri=DIST.editor, domain=Agent, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]])\n", + " model_uri=DIST.editor, domain=Agent, range=Optional[Union[Union[str, PublicationId], list[Union[str, PublicationId]]]])\n", "\n", "slots.has_editor = Slot(uri=BIOLINK.has_editor, name=\"has editor\", curie=BIOLINK.curie('has_editor'),\n", - " model_uri=DIST.has_editor, domain=Publication, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]])\n", + " model_uri=DIST.has_editor, domain=Publication, range=Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]])\n", "\n", "slots.author = Slot(uri=BIOLINK.author, name=\"author\", curie=BIOLINK.curie('author'),\n", - " model_uri=DIST.author, domain=Agent, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]])\n", + " model_uri=DIST.author, domain=Agent, range=Optional[Union[Union[str, PublicationId], list[Union[str, PublicationId]]]])\n", "\n", "slots.has_author = Slot(uri=BIOLINK.has_author, name=\"has author\", curie=BIOLINK.curie('has_author'),\n", - " model_uri=DIST.has_author, domain=Publication, range=Optional[Union[Union[str, AgentId], List[Union[str, AgentId]]]])\n", + " model_uri=DIST.has_author, domain=Publication, range=Optional[Union[Union[str, AgentId], list[Union[str, AgentId]]]])\n", "\n", - "slots.assesses = Slot(uri=BIOLINK.assesses, name=\"assesses\", curie=BIOLINK.curie('assesses'),\n", - " model_uri=DIST.assesses, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + "slots.was_tested_for_effect_on = Slot(uri=BIOLINK.was_tested_for_effect_on, name=\"was tested for effect on\", curie=BIOLINK.curie('was_tested_for_effect_on'),\n", + " model_uri=DIST.was_tested_for_effect_on, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", - "slots.is_assessed_by = Slot(uri=BIOLINK.is_assessed_by, name=\"is assessed by\", curie=BIOLINK.curie('is_assessed_by'),\n", - " model_uri=DIST.is_assessed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + "slots.was_tested_for_effect_of = Slot(uri=BIOLINK.was_tested_for_effect_of, name=\"was tested for effect of\", curie=BIOLINK.curie('was_tested_for_effect_of'),\n", + " model_uri=DIST.was_tested_for_effect_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.interacts_with = Slot(uri=BIOLINK.interacts_with, name=\"interacts with\", curie=BIOLINK.curie('interacts_with'),\n", - " model_uri=DIST.interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.physically_interacts_with = Slot(uri=BIOLINK.physically_interacts_with, name=\"physically interacts with\", curie=BIOLINK.curie('physically_interacts_with'),\n", - " model_uri=DIST.physically_interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.physically_interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.directly_physically_interacts_with = Slot(uri=BIOLINK.directly_physically_interacts_with, name=\"directly physically interacts with\", curie=BIOLINK.curie('directly_physically_interacts_with'),\n", - " model_uri=DIST.directly_physically_interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.directly_physically_interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.binds = Slot(uri=BIOLINK.binds, name=\"binds\", curie=BIOLINK.curie('binds'),\n", - " model_uri=DIST.binds, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.binds, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.indirectly_physically_interacts_with = Slot(uri=BIOLINK.indirectly_physically_interacts_with, name=\"indirectly physically interacts with\", curie=BIOLINK.curie('indirectly_physically_interacts_with'),\n", - " model_uri=DIST.indirectly_physically_interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.indirectly_physically_interacts_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.genetically_interacts_with = Slot(uri=BIOLINK.genetically_interacts_with, name=\"genetically interacts with\", curie=BIOLINK.curie('genetically_interacts_with'),\n", - " model_uri=DIST.genetically_interacts_with, domain=Gene, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.genetically_interacts_with, domain=Gene, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", + "\n", + "slots.pharmacologically_interacts_with = Slot(uri=BIOLINK.pharmacologically_interacts_with, name=\"pharmacologically interacts with\", curie=BIOLINK.curie('pharmacologically_interacts_with'),\n", + " model_uri=DIST.pharmacologically_interacts_with, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.gene_fusion_with = Slot(uri=BIOLINK.gene_fusion_with, name=\"gene_fusion_with\", curie=BIOLINK.curie('gene_fusion_with'),\n", - " model_uri=DIST.gene_fusion_with, domain=Gene, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.gene_fusion_with, domain=Gene, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.genetic_neighborhood_of = Slot(uri=BIOLINK.genetic_neighborhood_of, name=\"genetic_neighborhood_of\", curie=BIOLINK.curie('genetic_neighborhood_of'),\n", - " model_uri=DIST.genetic_neighborhood_of, domain=Gene, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.genetic_neighborhood_of, domain=Gene, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.affects = Slot(uri=BIOLINK.affects, name=\"affects\", curie=BIOLINK.curie('affects'),\n", - " model_uri=DIST.affects, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.affects, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.affected_by = Slot(uri=BIOLINK.affected_by, name=\"affected by\", curie=BIOLINK.curie('affected_by'),\n", - " model_uri=DIST.affected_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.affected_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", + "\n", + "slots.associated_with_response_to = Slot(uri=BIOLINK.associated_with_response_to, name=\"associated with response to\", curie=BIOLINK.curie('associated_with_response_to'),\n", + " model_uri=DIST.associated_with_response_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", + "\n", + "slots.response_associated_with = Slot(uri=BIOLINK.response_associated_with, name=\"response associated with\", curie=BIOLINK.curie('response_associated_with'),\n", + " model_uri=DIST.response_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.associated_with_sensitivity_to = Slot(uri=BIOLINK.associated_with_sensitivity_to, name=\"associated with sensitivity to\", curie=BIOLINK.curie('associated_with_sensitivity_to'),\n", - " model_uri=DIST.associated_with_sensitivity_to, domain=NamedThing, range=Optional[Union[Union[str, ChemicalEntityId], List[Union[str, ChemicalEntityId]]]])\n", + " model_uri=DIST.associated_with_sensitivity_to, domain=NamedThing, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.sensitivity_associated_with = Slot(uri=BIOLINK.sensitivity_associated_with, name=\"sensitivity associated with\", curie=BIOLINK.curie('sensitivity_associated_with'),\n", - " model_uri=DIST.sensitivity_associated_with, domain=ChemicalEntity, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.sensitivity_associated_with, domain=ChemicalEntity, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.associated_with_resistance_to = Slot(uri=BIOLINK.associated_with_resistance_to, name=\"associated with resistance to\", curie=BIOLINK.curie('associated_with_resistance_to'),\n", - " model_uri=DIST.associated_with_resistance_to, domain=NamedThing, range=Optional[Union[Union[str, ChemicalEntityId], List[Union[str, ChemicalEntityId]]]])\n", + " model_uri=DIST.associated_with_resistance_to, domain=NamedThing, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.resistance_associated_with = Slot(uri=BIOLINK.resistance_associated_with, name=\"resistance associated with\", curie=BIOLINK.curie('resistance_associated_with'),\n", - " model_uri=DIST.resistance_associated_with, domain=ChemicalEntity, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.resistance_associated_with, domain=ChemicalEntity, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.diagnoses = Slot(uri=BIOLINK.diagnoses, name=\"diagnoses\", curie=BIOLINK.curie('diagnoses'),\n", - " model_uri=DIST.diagnoses, domain=DiagnosticAid, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.diagnoses, domain=DiagnosticAid, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.is_diagnosed_by = Slot(uri=BIOLINK.is_diagnosed_by, name=\"is diagnosed by\", curie=BIOLINK.curie('is_diagnosed_by'),\n", - " model_uri=DIST.is_diagnosed_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[str, DiagnosticAidId], List[Union[str, DiagnosticAidId]]]])\n", + " model_uri=DIST.is_diagnosed_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[str, DiagnosticAidId], list[Union[str, DiagnosticAidId]]]])\n", "\n", "slots.increases_amount_or_activity_of = Slot(uri=BIOLINK.increases_amount_or_activity_of, name=\"increases amount or activity of\", curie=BIOLINK.curie('increases_amount_or_activity_of'),\n", - " model_uri=DIST.increases_amount_or_activity_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.increases_amount_or_activity_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.amount_or_activity_increased_by = Slot(uri=BIOLINK.amount_or_activity_increased_by, name=\"amount or activity increased by\", curie=BIOLINK.curie('amount_or_activity_increased_by'),\n", - " model_uri=DIST.amount_or_activity_increased_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.amount_or_activity_increased_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.decreases_amount_or_activity_of = Slot(uri=BIOLINK.decreases_amount_or_activity_of, name=\"decreases amount or activity of\", curie=BIOLINK.curie('decreases_amount_or_activity_of'),\n", - " model_uri=DIST.decreases_amount_or_activity_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.decreases_amount_or_activity_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.amount_or_activity_decreased_by = Slot(uri=BIOLINK.amount_or_activity_decreased_by, name=\"amount or activity decreased by\", curie=BIOLINK.curie('amount_or_activity_decreased_by'),\n", - " model_uri=DIST.amount_or_activity_decreased_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.amount_or_activity_decreased_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.chemical_role_mixin = Slot(uri=BIOLINK.chemical_role_mixin, name=\"chemical role mixin\", curie=BIOLINK.curie('chemical_role_mixin'),\n", " model_uri=DIST.chemical_role_mixin, domain=None, range=Optional[str])\n", @@ -14667,521 +17177,524 @@ "slots.biological_role_mixin = Slot(uri=BIOLINK.biological_role_mixin, name=\"biological role mixin\", curie=BIOLINK.curie('biological_role_mixin'),\n", " model_uri=DIST.biological_role_mixin, domain=None, range=Optional[str])\n", "\n", - "slots.affects_response_to = Slot(uri=BIOLINK.affects_response_to, name=\"affects response to\", curie=BIOLINK.curie('affects_response_to'),\n", - " model_uri=DIST.affects_response_to, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + "slots.affects_sensitivity_to = Slot(uri=BIOLINK.affects_sensitivity_to, name=\"affects sensitivity to\", curie=BIOLINK.curie('affects_sensitivity_to'),\n", + " model_uri=DIST.affects_sensitivity_to, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", - "slots.response_affected_by = Slot(uri=BIOLINK.response_affected_by, name=\"response affected by\", curie=BIOLINK.curie('response_affected_by'),\n", - " model_uri=DIST.response_affected_by, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + "slots.sensitivity_affected_by = Slot(uri=BIOLINK.sensitivity_affected_by, name=\"sensitivity affected by\", curie=BIOLINK.curie('sensitivity_affected_by'),\n", + " model_uri=DIST.sensitivity_affected_by, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", - "slots.increases_response_to = Slot(uri=BIOLINK.increases_response_to, name=\"increases response to\", curie=BIOLINK.curie('increases_response_to'),\n", - " model_uri=DIST.increases_response_to, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + "slots.increases_sensitivity_to = Slot(uri=BIOLINK.increases_sensitivity_to, name=\"increases sensitivity to\", curie=BIOLINK.curie('increases_sensitivity_to'),\n", + " model_uri=DIST.increases_sensitivity_to, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", - "slots.response_increased_by = Slot(uri=BIOLINK.response_increased_by, name=\"response increased by\", curie=BIOLINK.curie('response_increased_by'),\n", - " model_uri=DIST.response_increased_by, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + "slots.sensitivity_increased_by = Slot(uri=BIOLINK.sensitivity_increased_by, name=\"sensitivity increased by\", curie=BIOLINK.curie('sensitivity_increased_by'),\n", + " model_uri=DIST.sensitivity_increased_by, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", - "slots.decreases_response_to = Slot(uri=BIOLINK.decreases_response_to, name=\"decreases response to\", curie=BIOLINK.curie('decreases_response_to'),\n", - " model_uri=DIST.decreases_response_to, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + "slots.decreases_sensitivity_to = Slot(uri=BIOLINK.decreases_sensitivity_to, name=\"decreases sensitivity to\", curie=BIOLINK.curie('decreases_sensitivity_to'),\n", + " model_uri=DIST.decreases_sensitivity_to, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", - "slots.response_decreased_by = Slot(uri=BIOLINK.response_decreased_by, name=\"response decreased by\", curie=BIOLINK.curie('response_decreased_by'),\n", - " model_uri=DIST.response_decreased_by, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + "slots.sensitivity_decreased_by = Slot(uri=BIOLINK.sensitivity_decreased_by, name=\"sensitivity decreased by\", curie=BIOLINK.curie('sensitivity_decreased_by'),\n", + " model_uri=DIST.sensitivity_decreased_by, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", "slots.regulates = Slot(uri=BIOLINK.regulates, name=\"regulates\", curie=BIOLINK.curie('regulates'),\n", - " model_uri=DIST.regulates, domain=None, range=Optional[Union[Union[dict, \"PhysicalEssenceOrOccurrent\"], List[Union[dict, \"PhysicalEssenceOrOccurrent\"]]]])\n", + " model_uri=DIST.regulates, domain=None, range=Optional[Union[Union[dict, \"PhysicalEssenceOrOccurrent\"], list[Union[dict, \"PhysicalEssenceOrOccurrent\"]]]])\n", "\n", "slots.regulated_by = Slot(uri=BIOLINK.regulated_by, name=\"regulated by\", curie=BIOLINK.curie('regulated_by'),\n", - " model_uri=DIST.regulated_by, domain=None, range=Optional[Union[Union[dict, \"PhysicalEssenceOrOccurrent\"], List[Union[dict, \"PhysicalEssenceOrOccurrent\"]]]])\n", + " model_uri=DIST.regulated_by, domain=None, range=Optional[Union[Union[dict, \"PhysicalEssenceOrOccurrent\"], list[Union[dict, \"PhysicalEssenceOrOccurrent\"]]]])\n", "\n", "slots.disrupts = Slot(uri=BIOLINK.disrupts, name=\"disrupts\", curie=BIOLINK.curie('disrupts'),\n", - " model_uri=DIST.disrupts, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.disrupts, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.disrupted_by = Slot(uri=BIOLINK.disrupted_by, name=\"disrupted by\", curie=BIOLINK.curie('disrupted_by'),\n", - " model_uri=DIST.disrupted_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.disrupted_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.gene_product_of = Slot(uri=BIOLINK.gene_product_of, name=\"gene product of\", curie=BIOLINK.curie('gene_product_of'),\n", - " model_uri=DIST.gene_product_of, domain=None, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.gene_product_of, domain=None, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.has_gene_product = Slot(uri=BIOLINK.has_gene_product, name=\"has gene product\", curie=BIOLINK.curie('has_gene_product'),\n", - " model_uri=DIST.has_gene_product, domain=Gene, range=Optional[Union[Union[dict, \"GeneProductMixin\"], List[Union[dict, \"GeneProductMixin\"]]]])\n", + " model_uri=DIST.has_gene_product, domain=Gene, range=Optional[Union[Union[dict, \"GeneProductMixin\"], list[Union[dict, \"GeneProductMixin\"]]]])\n", "\n", "slots.transcribed_to = Slot(uri=BIOLINK.transcribed_to, name=\"transcribed to\", curie=BIOLINK.curie('transcribed_to'),\n", - " model_uri=DIST.transcribed_to, domain=Gene, range=Optional[Union[Union[str, TranscriptId], List[Union[str, TranscriptId]]]])\n", + " model_uri=DIST.transcribed_to, domain=Gene, range=Optional[Union[Union[str, TranscriptId], list[Union[str, TranscriptId]]]])\n", "\n", "slots.transcribed_from = Slot(uri=BIOLINK.transcribed_from, name=\"transcribed from\", curie=BIOLINK.curie('transcribed_from'),\n", - " model_uri=DIST.transcribed_from, domain=Transcript, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.transcribed_from, domain=Transcript, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.translates_to = Slot(uri=BIOLINK.translates_to, name=\"translates to\", curie=BIOLINK.curie('translates_to'),\n", - " model_uri=DIST.translates_to, domain=Transcript, range=Optional[Union[Union[str, ProteinId], List[Union[str, ProteinId]]]])\n", + " model_uri=DIST.translates_to, domain=Transcript, range=Optional[Union[Union[str, ProteinId], list[Union[str, ProteinId]]]])\n", "\n", "slots.translation_of = Slot(uri=BIOLINK.translation_of, name=\"translation of\", curie=BIOLINK.curie('translation_of'),\n", - " model_uri=DIST.translation_of, domain=Protein, range=Optional[Union[Union[str, TranscriptId], List[Union[str, TranscriptId]]]])\n", + " model_uri=DIST.translation_of, domain=Protein, range=Optional[Union[Union[str, TranscriptId], list[Union[str, TranscriptId]]]])\n", "\n", "slots.homologous_to = Slot(uri=BIOLINK.homologous_to, name=\"homologous to\", curie=BIOLINK.curie('homologous_to'),\n", - " model_uri=DIST.homologous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.homologous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.paralogous_to = Slot(uri=BIOLINK.paralogous_to, name=\"paralogous to\", curie=BIOLINK.curie('paralogous_to'),\n", - " model_uri=DIST.paralogous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.paralogous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.orthologous_to = Slot(uri=BIOLINK.orthologous_to, name=\"orthologous to\", curie=BIOLINK.curie('orthologous_to'),\n", - " model_uri=DIST.orthologous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.orthologous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.xenologous_to = Slot(uri=BIOLINK.xenologous_to, name=\"xenologous to\", curie=BIOLINK.curie('xenologous_to'),\n", - " model_uri=DIST.xenologous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.xenologous_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.coexists_with = Slot(uri=BIOLINK.coexists_with, name=\"coexists with\", curie=BIOLINK.curie('coexists_with'),\n", - " model_uri=DIST.coexists_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.coexists_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.in_pathway_with = Slot(uri=BIOLINK.in_pathway_with, name=\"in pathway with\", curie=BIOLINK.curie('in_pathway_with'),\n", - " model_uri=DIST.in_pathway_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.in_pathway_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.in_complex_with = Slot(uri=BIOLINK.in_complex_with, name=\"in complex with\", curie=BIOLINK.curie('in_complex_with'),\n", - " model_uri=DIST.in_complex_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.in_complex_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.in_cell_population_with = Slot(uri=BIOLINK.in_cell_population_with, name=\"in cell population with\", curie=BIOLINK.curie('in_cell_population_with'),\n", - " model_uri=DIST.in_cell_population_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.in_cell_population_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.colocalizes_with = Slot(uri=BIOLINK.colocalizes_with, name=\"colocalizes with\", curie=BIOLINK.curie('colocalizes_with'),\n", - " model_uri=DIST.colocalizes_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.colocalizes_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.genetic_association = Slot(uri=BIOLINK.genetic_association, name=\"genetic association\", curie=BIOLINK.curie('genetic_association'),\n", - " model_uri=DIST.genetic_association, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.genetic_association, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.genetically_associated_with = Slot(uri=BIOLINK.genetically_associated_with, name=\"genetically associated with\", curie=BIOLINK.curie('genetically_associated_with'),\n", - " model_uri=DIST.genetically_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.genetically_associated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.gene_associated_with_condition = Slot(uri=BIOLINK.gene_associated_with_condition, name=\"gene associated with condition\", curie=BIOLINK.curie('gene_associated_with_condition'),\n", - " model_uri=DIST.gene_associated_with_condition, domain=Gene, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.gene_associated_with_condition, domain=Gene, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.condition_associated_with_gene = Slot(uri=BIOLINK.condition_associated_with_gene, name=\"condition associated with gene\", curie=BIOLINK.curie('condition_associated_with_gene'),\n", - " model_uri=DIST.condition_associated_with_gene, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.condition_associated_with_gene, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.contributes_to = Slot(uri=BIOLINK.contributes_to, name=\"contributes to\", curie=BIOLINK.curie('contributes_to'),\n", - " model_uri=DIST.contributes_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.contributes_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.contribution_from = Slot(uri=BIOLINK.contribution_from, name=\"contribution from\", curie=BIOLINK.curie('contribution_from'),\n", - " model_uri=DIST.contribution_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.contribution_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.causes = Slot(uri=BIOLINK.causes, name=\"causes\", curie=BIOLINK.curie('causes'),\n", - " model_uri=DIST.causes, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.causes, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.caused_by = Slot(uri=BIOLINK.caused_by, name=\"caused by\", curie=BIOLINK.curie('caused_by'),\n", - " model_uri=DIST.caused_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.caused_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.ameliorates_condition = Slot(uri=BIOLINK.ameliorates_condition, name=\"ameliorates condition\", curie=BIOLINK.curie('ameliorates_condition'),\n", - " model_uri=DIST.ameliorates_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.ameliorates_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.condition_ameliorated_by = Slot(uri=BIOLINK.condition_ameliorated_by, name=\"condition ameliorated by\", curie=BIOLINK.curie('condition_ameliorated_by'),\n", - " model_uri=DIST.condition_ameliorated_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.condition_ameliorated_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.preventative_for_condition = Slot(uri=BIOLINK.preventative_for_condition, name=\"preventative for condition\", curie=BIOLINK.curie('preventative_for_condition'),\n", - " model_uri=DIST.preventative_for_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.preventative_for_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.condition_prevented_by = Slot(uri=BIOLINK.condition_prevented_by, name=\"condition prevented by\", curie=BIOLINK.curie('condition_prevented_by'),\n", - " model_uri=DIST.condition_prevented_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.condition_prevented_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.promotes_condition = Slot(uri=BIOLINK.promotes_condition, name=\"promotes condition\", curie=BIOLINK.curie('promotes_condition'),\n", - " model_uri=DIST.promotes_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.promotes_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.condition_promoted_by = Slot(uri=BIOLINK.condition_promoted_by, name=\"condition promoted by\", curie=BIOLINK.curie('condition_promoted_by'),\n", - " model_uri=DIST.condition_promoted_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.condition_promoted_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.predisposes_to_condition = Slot(uri=BIOLINK.predisposes_to_condition, name=\"predisposes to condition\", curie=BIOLINK.curie('predisposes_to_condition'),\n", - " model_uri=DIST.predisposes_to_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.predisposes_to_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.condition_predisposed_by = Slot(uri=BIOLINK.condition_predisposed_by, name=\"condition predisposed by\", curie=BIOLINK.curie('condition_predisposed_by'),\n", - " model_uri=DIST.condition_predisposed_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.condition_predisposed_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.exacerbates_condition = Slot(uri=BIOLINK.exacerbates_condition, name=\"exacerbates condition\", curie=BIOLINK.curie('exacerbates_condition'),\n", - " model_uri=DIST.exacerbates_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.exacerbates_condition, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.condition_exacerbated_by = Slot(uri=BIOLINK.condition_exacerbated_by, name=\"condition exacerbated by\", curie=BIOLINK.curie('condition_exacerbated_by'),\n", - " model_uri=DIST.condition_exacerbated_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.condition_exacerbated_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.treats = Slot(uri=BIOLINK.treats, name=\"treats\", curie=BIOLINK.curie('treats'),\n", - " model_uri=DIST.treats, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.treats, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.treated_by = Slot(uri=BIOLINK.treated_by, name=\"treated by\", curie=BIOLINK.curie('treated_by'),\n", - " model_uri=DIST.treated_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.treated_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.studied_to_treat = Slot(uri=BIOLINK.studied_to_treat, name=\"studied to treat\", curie=BIOLINK.curie('studied_to_treat'),\n", - " model_uri=DIST.studied_to_treat, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.studied_to_treat, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.in_clinical_trials_for = Slot(uri=BIOLINK.in_clinical_trials_for, name=\"in clinical trials for\", curie=BIOLINK.curie('in_clinical_trials_for'),\n", - " model_uri=DIST.in_clinical_trials_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.in_clinical_trials_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.tested_by_clinical_trials_of = Slot(uri=BIOLINK.tested_by_clinical_trials_of, name=\"tested by clinical trials of\", curie=BIOLINK.curie('tested_by_clinical_trials_of'),\n", - " model_uri=DIST.tested_by_clinical_trials_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.tested_by_clinical_trials_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.treated_in_studies_by = Slot(uri=BIOLINK.treated_in_studies_by, name=\"treated in studies by\", curie=BIOLINK.curie('treated_in_studies_by'),\n", - " model_uri=DIST.treated_in_studies_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.treated_in_studies_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.tested_by_preclinical_trials_of = Slot(uri=BIOLINK.tested_by_preclinical_trials_of, name=\"tested by preclinical trials of\", curie=BIOLINK.curie('tested_by_preclinical_trials_of'),\n", - " model_uri=DIST.tested_by_preclinical_trials_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.tested_by_preclinical_trials_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.in_preclinical_trials_for = Slot(uri=BIOLINK.in_preclinical_trials_for, name=\"in preclinical trials for\", curie=BIOLINK.curie('in_preclinical_trials_for'),\n", - " model_uri=DIST.in_preclinical_trials_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.in_preclinical_trials_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.beneficial_in_models_for = Slot(uri=BIOLINK.beneficial_in_models_for, name=\"beneficial in models for\", curie=BIOLINK.curie('beneficial_in_models_for'),\n", - " model_uri=DIST.beneficial_in_models_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.beneficial_in_models_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.models_demonstrating_benefits_for = Slot(uri=BIOLINK.models_demonstrating_benefits_for, name=\"models demonstrating benefits for\", curie=BIOLINK.curie('models_demonstrating_benefits_for'),\n", - " model_uri=DIST.models_demonstrating_benefits_for, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.models_demonstrating_benefits_for, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.applied_to_treat = Slot(uri=BIOLINK.applied_to_treat, name=\"applied to treat\", curie=BIOLINK.curie('applied_to_treat'),\n", - " model_uri=DIST.applied_to_treat, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.applied_to_treat, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.treatment_applications_from = Slot(uri=BIOLINK.treatment_applications_from, name=\"treatment applications from\", curie=BIOLINK.curie('treatment_applications_from'),\n", - " model_uri=DIST.treatment_applications_from, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.treatment_applications_from, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.treats_or_applied_or_studied_to_treat = Slot(uri=BIOLINK.treats_or_applied_or_studied_to_treat, name=\"treats or applied or studied to treat\", curie=BIOLINK.curie('treats_or_applied_or_studied_to_treat'),\n", - " model_uri=DIST.treats_or_applied_or_studied_to_treat, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.treats_or_applied_or_studied_to_treat, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.subject_of_treatment_application_or_study_for_treatment_by = Slot(uri=BIOLINK.subject_of_treatment_application_or_study_for_treatment_by, name=\"subject of treatment application or study for treatment by\", curie=BIOLINK.curie('subject_of_treatment_application_or_study_for_treatment_by'),\n", - " model_uri=DIST.subject_of_treatment_application_or_study_for_treatment_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.subject_of_treatment_application_or_study_for_treatment_by, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.correlated_with = Slot(uri=BIOLINK.correlated_with, name=\"correlated with\", curie=BIOLINK.curie('correlated_with'),\n", - " model_uri=DIST.correlated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.correlated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.positively_correlated_with = Slot(uri=BIOLINK.positively_correlated_with, name=\"positively correlated with\", curie=BIOLINK.curie('positively_correlated_with'),\n", - " model_uri=DIST.positively_correlated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.positively_correlated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.negatively_correlated_with = Slot(uri=BIOLINK.negatively_correlated_with, name=\"negatively correlated with\", curie=BIOLINK.curie('negatively_correlated_with'),\n", - " model_uri=DIST.negatively_correlated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.negatively_correlated_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.occurs_together_in_literature_with = Slot(uri=BIOLINK.occurs_together_in_literature_with, name=\"occurs together in literature with\", curie=BIOLINK.curie('occurs_together_in_literature_with'),\n", - " model_uri=DIST.occurs_together_in_literature_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.occurs_together_in_literature_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.coexpressed_with = Slot(uri=BIOLINK.coexpressed_with, name=\"coexpressed with\", curie=BIOLINK.curie('coexpressed_with'),\n", - " model_uri=DIST.coexpressed_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.coexpressed_with, domain=None, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.has_biomarker = Slot(uri=BIOLINK.has_biomarker, name=\"has biomarker\", curie=BIOLINK.curie('has_biomarker'),\n", - " model_uri=DIST.has_biomarker, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_biomarker, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", "slots.biomarker_for = Slot(uri=BIOLINK.biomarker_for, name=\"biomarker for\", curie=BIOLINK.curie('biomarker_for'),\n", - " model_uri=DIST.biomarker_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.biomarker_for, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.expressed_in = Slot(uri=BIOLINK.expressed_in, name=\"expressed in\", curie=BIOLINK.curie('expressed_in'),\n", - " model_uri=DIST.expressed_in, domain=None, range=Optional[Union[Union[str, AnatomicalEntityId], List[Union[str, AnatomicalEntityId]]]])\n", + " model_uri=DIST.expressed_in, domain=None, range=Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]])\n", "\n", "slots.expresses = Slot(uri=BIOLINK.expresses, name=\"expresses\", curie=BIOLINK.curie('expresses'),\n", - " model_uri=DIST.expresses, domain=AnatomicalEntity, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], List[Union[dict, \"GeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.expresses, domain=AnatomicalEntity, range=Optional[Union[Union[dict, \"GeneOrGeneProduct\"], list[Union[dict, \"GeneOrGeneProduct\"]]]])\n", "\n", "slots.has_phenotype = Slot(uri=BIOLINK.has_phenotype, name=\"has phenotype\", curie=BIOLINK.curie('has_phenotype'),\n", - " model_uri=DIST.has_phenotype, domain=BiologicalEntity, range=Optional[Union[Union[str, PhenotypicFeatureId], List[Union[str, PhenotypicFeatureId]]]])\n", + " model_uri=DIST.has_phenotype, domain=BiologicalEntity, range=Optional[Union[Union[str, PhenotypicFeatureId], list[Union[str, PhenotypicFeatureId]]]])\n", "\n", "slots.phenotype_of = Slot(uri=BIOLINK.phenotype_of, name=\"phenotype of\", curie=BIOLINK.curie('phenotype_of'),\n", - " model_uri=DIST.phenotype_of, domain=PhenotypicFeature, range=Optional[Union[Union[str, BiologicalEntityId], List[Union[str, BiologicalEntityId]]]])\n", + " model_uri=DIST.phenotype_of, domain=PhenotypicFeature, range=Optional[Union[Union[str, BiologicalEntityId], list[Union[str, BiologicalEntityId]]]])\n", "\n", "slots.occurs_in = Slot(uri=BIOLINK.occurs_in, name=\"occurs in\", curie=BIOLINK.curie('occurs_in'),\n", - " model_uri=DIST.occurs_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.occurs_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.contains_process = Slot(uri=BIOLINK.contains_process, name=\"contains process\", curie=BIOLINK.curie('contains_process'),\n", - " model_uri=DIST.contains_process, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.contains_process, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.located_in = Slot(uri=BIOLINK.located_in, name=\"located in\", curie=BIOLINK.curie('located_in'),\n", - " model_uri=DIST.located_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.located_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.location_of = Slot(uri=BIOLINK.location_of, name=\"location of\", curie=BIOLINK.curie('location_of'),\n", - " model_uri=DIST.location_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.location_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.disease_has_location = Slot(uri=BIOLINK.disease_has_location, name=\"disease has location\", curie=BIOLINK.curie('disease_has_location'),\n", - " model_uri=DIST.disease_has_location, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.disease_has_location, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.location_of_disease = Slot(uri=BIOLINK.location_of_disease, name=\"location of disease\", curie=BIOLINK.curie('location_of_disease'),\n", - " model_uri=DIST.location_of_disease, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.location_of_disease, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.similar_to = Slot(uri=BIOLINK.similar_to, name=\"similar to\", curie=BIOLINK.curie('similar_to'),\n", - " model_uri=DIST.similar_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.similar_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.chemically_similar_to = Slot(uri=BIOLINK.chemically_similar_to, name=\"chemically similar to\", curie=BIOLINK.curie('chemically_similar_to'),\n", - " model_uri=DIST.chemically_similar_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.chemically_similar_to, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_sequence_location = Slot(uri=BIOLINK.has_sequence_location, name=\"has sequence location\", curie=BIOLINK.curie('has_sequence_location'),\n", - " model_uri=DIST.has_sequence_location, domain=NucleicAcidEntity, range=Optional[Union[Union[str, NucleicAcidEntityId], List[Union[str, NucleicAcidEntityId]]]])\n", + " model_uri=DIST.has_sequence_location, domain=NucleicAcidEntity, range=Optional[Union[Union[str, NucleicAcidEntityId], list[Union[str, NucleicAcidEntityId]]]])\n", "\n", "slots.sequence_location_of = Slot(uri=BIOLINK.sequence_location_of, name=\"sequence location of\", curie=BIOLINK.curie('sequence_location_of'),\n", - " model_uri=DIST.sequence_location_of, domain=NucleicAcidEntity, range=Optional[Union[Union[str, NucleicAcidEntityId], List[Union[str, NucleicAcidEntityId]]]])\n", + " model_uri=DIST.sequence_location_of, domain=NucleicAcidEntity, range=Optional[Union[Union[str, NucleicAcidEntityId], list[Union[str, NucleicAcidEntityId]]]])\n", "\n", "slots.model_of = Slot(uri=BIOLINK.model_of, name=\"model of\", curie=BIOLINK.curie('model_of'),\n", - " model_uri=DIST.model_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.model_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.models = Slot(uri=BIOLINK.models, name=\"models\", curie=BIOLINK.curie('models'),\n", - " model_uri=DIST.models, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.models, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.overlaps = Slot(uri=BIOLINK.overlaps, name=\"overlaps\", curie=BIOLINK.curie('overlaps'),\n", - " model_uri=DIST.overlaps, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.overlaps, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_part = Slot(uri=BIOLINK.has_part, name=\"has part\", curie=BIOLINK.curie('has_part'),\n", - " model_uri=DIST.has_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_plasma_membrane_part = Slot(uri=BIOLINK.has_plasma_membrane_part, name=\"has plasma membrane part\", curie=BIOLINK.curie('has_plasma_membrane_part'),\n", - " model_uri=DIST.has_plasma_membrane_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_plasma_membrane_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.composed_primarily_of = Slot(uri=BIOLINK.composed_primarily_of, name=\"composed primarily of\", curie=BIOLINK.curie('composed_primarily_of'),\n", - " model_uri=DIST.composed_primarily_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.composed_primarily_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.primarily_composed_of = Slot(uri=BIOLINK.primarily_composed_of, name=\"primarily composed of\", curie=BIOLINK.curie('primarily_composed_of'),\n", - " model_uri=DIST.primarily_composed_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.primarily_composed_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.plasma_membrane_part_of = Slot(uri=BIOLINK.plasma_membrane_part_of, name=\"plasma membrane part of\", curie=BIOLINK.curie('plasma_membrane_part_of'),\n", - " model_uri=DIST.plasma_membrane_part_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.plasma_membrane_part_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.part_of = Slot(uri=BIOLINK.part_of, name=\"part of\", curie=BIOLINK.curie('part_of'),\n", - " model_uri=DIST.part_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.part_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_input = Slot(uri=BIOLINK.has_input, name=\"has input\", curie=BIOLINK.curie('has_input'),\n", - " model_uri=DIST.has_input, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_input, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.is_input_of = Slot(uri=BIOLINK.is_input_of, name=\"is input of\", curie=BIOLINK.curie('is_input_of'),\n", - " model_uri=DIST.is_input_of, domain=NamedThing, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], List[Union[str, BiologicalProcessOrActivityId]]]])\n", + " model_uri=DIST.is_input_of, domain=NamedThing, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], list[Union[str, BiologicalProcessOrActivityId]]]])\n", "\n", "slots.has_output = Slot(uri=BIOLINK.has_output, name=\"has output\", curie=BIOLINK.curie('has_output'),\n", - " model_uri=DIST.has_output, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_output, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.is_output_of = Slot(uri=BIOLINK.is_output_of, name=\"is output of\", curie=BIOLINK.curie('is_output_of'),\n", - " model_uri=DIST.is_output_of, domain=NamedThing, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], List[Union[str, BiologicalProcessOrActivityId]]]])\n", + " model_uri=DIST.is_output_of, domain=NamedThing, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], list[Union[str, BiologicalProcessOrActivityId]]]])\n", "\n", "slots.has_participant = Slot(uri=BIOLINK.has_participant, name=\"has participant\", curie=BIOLINK.curie('has_participant'),\n", - " model_uri=DIST.has_participant, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[dict, Occurrent], List[Union[dict, Occurrent]]]])\n", + " model_uri=DIST.has_participant, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[dict, Occurrent], list[Union[dict, Occurrent]]]])\n", "\n", "slots.catalyzes = Slot(uri=BIOLINK.catalyzes, name=\"catalyzes\", curie=BIOLINK.curie('catalyzes'),\n", - " model_uri=DIST.catalyzes, domain=None, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], List[Union[str, BiologicalProcessOrActivityId]]]])\n", + " model_uri=DIST.catalyzes, domain=None, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], list[Union[str, BiologicalProcessOrActivityId]]]])\n", "\n", "slots.has_catalyst = Slot(uri=BIOLINK.has_catalyst, name=\"has catalyst\", curie=BIOLINK.curie('has_catalyst'),\n", - " model_uri=DIST.has_catalyst, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[dict, Occurrent], List[Union[dict, Occurrent]]]])\n", + " model_uri=DIST.has_catalyst, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[dict, Occurrent], list[Union[dict, Occurrent]]]])\n", "\n", "slots.has_substrate = Slot(uri=BIOLINK.has_substrate, name=\"has substrate\", curie=BIOLINK.curie('has_substrate'),\n", - " model_uri=DIST.has_substrate, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.has_substrate, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", "slots.is_substrate_of = Slot(uri=BIOLINK.is_substrate_of, name=\"is substrate of\", curie=BIOLINK.curie('is_substrate_of'),\n", - " model_uri=DIST.is_substrate_of, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], List[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", + " model_uri=DIST.is_substrate_of, domain=None, range=Optional[Union[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"], list[Union[dict, \"ChemicalEntityOrGeneOrGeneProduct\"]]]])\n", "\n", "slots.participates_in = Slot(uri=BIOLINK.participates_in, name=\"participates in\", curie=BIOLINK.curie('participates_in'),\n", - " model_uri=DIST.participates_in, domain=None, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], List[Union[str, BiologicalProcessOrActivityId]]]])\n", + " model_uri=DIST.participates_in, domain=None, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], list[Union[str, BiologicalProcessOrActivityId]]]])\n", "\n", "slots.actively_involved_in = Slot(uri=BIOLINK.actively_involved_in, name=\"actively involved in\", curie=BIOLINK.curie('actively_involved_in'),\n", - " model_uri=DIST.actively_involved_in, domain=NamedThing, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], List[Union[str, BiologicalProcessOrActivityId]]]])\n", + " model_uri=DIST.actively_involved_in, domain=NamedThing, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], list[Union[str, BiologicalProcessOrActivityId]]]])\n", "\n", "slots.actively_involves = Slot(uri=BIOLINK.actively_involves, name=\"actively involves\", curie=BIOLINK.curie('actively_involves'),\n", - " model_uri=DIST.actively_involves, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.actively_involves, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.capable_of = Slot(uri=BIOLINK.capable_of, name=\"capable of\", curie=BIOLINK.curie('capable_of'),\n", - " model_uri=DIST.capable_of, domain=NamedThing, range=Optional[Union[Union[dict, \"Occurrent\"], List[Union[dict, \"Occurrent\"]]]])\n", + " model_uri=DIST.capable_of, domain=NamedThing, range=Optional[Union[Union[dict, \"Occurrent\"], list[Union[dict, \"Occurrent\"]]]])\n", "\n", "slots.can_be_carried_out_by = Slot(uri=BIOLINK.can_be_carried_out_by, name=\"can be carried out by\", curie=BIOLINK.curie('can_be_carried_out_by'),\n", - " model_uri=DIST.can_be_carried_out_by, domain=None, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.can_be_carried_out_by, domain=None, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.enables = Slot(uri=BIOLINK.enables, name=\"enables\", curie=BIOLINK.curie('enables'),\n", - " model_uri=DIST.enables, domain=PhysicalEntity, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], List[Union[str, BiologicalProcessOrActivityId]]]])\n", + " model_uri=DIST.enables, domain=PhysicalEntity, range=Optional[Union[Union[str, BiologicalProcessOrActivityId], list[Union[str, BiologicalProcessOrActivityId]]]])\n", "\n", "slots.enabled_by = Slot(uri=BIOLINK.enabled_by, name=\"enabled by\", curie=BIOLINK.curie('enabled_by'),\n", - " model_uri=DIST.enabled_by, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, PhysicalEntityId], List[Union[str, PhysicalEntityId]]]])\n", + " model_uri=DIST.enabled_by, domain=BiologicalProcessOrActivity, range=Optional[Union[Union[str, PhysicalEntityId], list[Union[str, PhysicalEntityId]]]])\n", "\n", "slots.derives_into = Slot(uri=BIOLINK.derives_into, name=\"derives into\", curie=BIOLINK.curie('derives_into'),\n", - " model_uri=DIST.derives_into, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.derives_into, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.derives_from = Slot(uri=BIOLINK.derives_from, name=\"derives from\", curie=BIOLINK.curie('derives_from'),\n", - " model_uri=DIST.derives_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.derives_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.is_metabolite_of = Slot(uri=BIOLINK.is_metabolite_of, name=\"is metabolite of\", curie=BIOLINK.curie('is_metabolite_of'),\n", - " model_uri=DIST.is_metabolite_of, domain=MolecularEntity, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]])\n", + " model_uri=DIST.is_metabolite_of, domain=MolecularEntity, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]])\n", "\n", "slots.has_metabolite = Slot(uri=BIOLINK.has_metabolite, name=\"has metabolite\", curie=BIOLINK.curie('has_metabolite'),\n", - " model_uri=DIST.has_metabolite, domain=MolecularEntity, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]])\n", + " model_uri=DIST.has_metabolite, domain=MolecularEntity, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]])\n", "\n", "slots.food_component_of = Slot(uri=BIOLINK.food_component_of, name=\"food component of\", curie=BIOLINK.curie('food_component_of'),\n", - " model_uri=DIST.food_component_of, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], List[Union[str, ChemicalEntityId]]]])\n", + " model_uri=DIST.food_component_of, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.has_food_component = Slot(uri=BIOLINK.has_food_component, name=\"has food component\", curie=BIOLINK.curie('has_food_component'),\n", - " model_uri=DIST.has_food_component, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], List[Union[str, ChemicalEntityId]]]])\n", + " model_uri=DIST.has_food_component, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.nutrient_of = Slot(uri=BIOLINK.nutrient_of, name=\"nutrient of\", curie=BIOLINK.curie('nutrient_of'),\n", - " model_uri=DIST.nutrient_of, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], List[Union[str, ChemicalEntityId]]]])\n", + " model_uri=DIST.nutrient_of, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.has_nutrient = Slot(uri=BIOLINK.has_nutrient, name=\"has nutrient\", curie=BIOLINK.curie('has_nutrient'),\n", - " model_uri=DIST.has_nutrient, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], List[Union[str, ChemicalEntityId]]]])\n", + " model_uri=DIST.has_nutrient, domain=ChemicalEntity, range=Optional[Union[Union[str, ChemicalEntityId], list[Union[str, ChemicalEntityId]]]])\n", "\n", "slots.is_active_ingredient_of = Slot(uri=BIOLINK.is_active_ingredient_of, name=\"is active ingredient of\", curie=BIOLINK.curie('is_active_ingredient_of'),\n", - " model_uri=DIST.is_active_ingredient_of, domain=MolecularEntity, range=Optional[Union[Union[str, DrugId], List[Union[str, DrugId]]]], mappings = [RO[\"0002249\"]])\n", + " model_uri=DIST.is_active_ingredient_of, domain=MolecularEntity, range=Optional[Union[Union[str, DrugId], list[Union[str, DrugId]]]], mappings = [RO[\"0002249\"]])\n", "\n", "slots.has_active_ingredient = Slot(uri=BIOLINK.has_active_ingredient, name=\"has active ingredient\", curie=BIOLINK.curie('has_active_ingredient'),\n", - " model_uri=DIST.has_active_ingredient, domain=Drug, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]], mappings = [RO[\"0002248\"]])\n", + " model_uri=DIST.has_active_ingredient, domain=Drug, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]], mappings = [RO[\"0002248\"]])\n", "\n", "slots.is_excipient_of = Slot(uri=BIOLINK.is_excipient_of, name=\"is excipient of\", curie=BIOLINK.curie('is_excipient_of'),\n", - " model_uri=DIST.is_excipient_of, domain=MolecularEntity, range=Optional[Union[Union[str, DrugId], List[Union[str, DrugId]]]], mappings = [WIKIDATA[\"Q902638\"]])\n", + " model_uri=DIST.is_excipient_of, domain=MolecularEntity, range=Optional[Union[Union[str, DrugId], list[Union[str, DrugId]]]], mappings = [WIKIDATA[\"Q902638\"]])\n", "\n", "slots.has_excipient = Slot(uri=BIOLINK.has_excipient, name=\"has excipient\", curie=BIOLINK.curie('has_excipient'),\n", - " model_uri=DIST.has_excipient, domain=Drug, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]], mappings = [WIKIDATA[\"Q902638\"]])\n", + " model_uri=DIST.has_excipient, domain=Drug, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]], mappings = [WIKIDATA[\"Q902638\"]])\n", "\n", "slots.manifestation_of = Slot(uri=BIOLINK.manifestation_of, name=\"manifestation of\", curie=BIOLINK.curie('manifestation_of'),\n", - " model_uri=DIST.manifestation_of, domain=NamedThing, range=Optional[Union[Union[str, DiseaseId], List[Union[str, DiseaseId]]]])\n", + " model_uri=DIST.manifestation_of, domain=NamedThing, range=Optional[Union[Union[str, DiseaseId], list[Union[str, DiseaseId]]]])\n", "\n", "slots.has_manifestation = Slot(uri=BIOLINK.has_manifestation, name=\"has manifestation\", curie=BIOLINK.curie('has_manifestation'),\n", - " model_uri=DIST.has_manifestation, domain=Disease, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_manifestation, domain=Disease, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.mode_of_inheritance_of = Slot(uri=BIOLINK.mode_of_inheritance_of, name=\"mode of inheritance of\", curie=BIOLINK.curie('mode_of_inheritance_of'),\n", - " model_uri=DIST.mode_of_inheritance_of, domain=GeneticInheritance, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.mode_of_inheritance_of, domain=GeneticInheritance, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.has_mode_of_inheritance = Slot(uri=BIOLINK.has_mode_of_inheritance, name=\"has mode of inheritance\", curie=BIOLINK.curie('has_mode_of_inheritance'),\n", - " model_uri=DIST.has_mode_of_inheritance, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[str, GeneticInheritanceId], List[Union[str, GeneticInheritanceId]]]])\n", + " model_uri=DIST.has_mode_of_inheritance, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[str, GeneticInheritanceId], list[Union[str, GeneticInheritanceId]]]])\n", "\n", "slots.produces = Slot(uri=BIOLINK.produces, name=\"produces\", curie=BIOLINK.curie('produces'),\n", - " model_uri=DIST.produces, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.produces, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.produced_by = Slot(uri=BIOLINK.produced_by, name=\"produced by\", curie=BIOLINK.curie('produced_by'),\n", - " model_uri=DIST.produced_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.produced_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.consumes = Slot(uri=BIOLINK.consumes, name=\"consumes\", curie=BIOLINK.curie('consumes'),\n", - " model_uri=DIST.consumes, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.consumes, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.consumed_by = Slot(uri=BIOLINK.consumed_by, name=\"consumed by\", curie=BIOLINK.curie('consumed_by'),\n", - " model_uri=DIST.consumed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.consumed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.temporally_related_to = Slot(uri=BIOLINK.temporally_related_to, name=\"temporally related to\", curie=BIOLINK.curie('temporally_related_to'),\n", - " model_uri=DIST.temporally_related_to, domain=None, range=Optional[Union[Union[dict, \"Occurrent\"], List[Union[dict, \"Occurrent\"]]]])\n", + " model_uri=DIST.temporally_related_to, domain=None, range=Optional[Union[Union[dict, \"Occurrent\"], list[Union[dict, \"Occurrent\"]]]])\n", "\n", "slots.precedes = Slot(uri=BIOLINK.precedes, name=\"precedes\", curie=BIOLINK.curie('precedes'),\n", - " model_uri=DIST.precedes, domain=None, range=Optional[Union[Union[dict, \"Occurrent\"], List[Union[dict, \"Occurrent\"]]]])\n", + " model_uri=DIST.precedes, domain=None, range=Optional[Union[Union[dict, \"Occurrent\"], list[Union[dict, \"Occurrent\"]]]])\n", "\n", "slots.preceded_by = Slot(uri=BIOLINK.preceded_by, name=\"preceded by\", curie=BIOLINK.curie('preceded_by'),\n", - " model_uri=DIST.preceded_by, domain=None, range=Optional[Union[Union[dict, \"Occurrent\"], List[Union[dict, \"Occurrent\"]]]])\n", + " model_uri=DIST.preceded_by, domain=None, range=Optional[Union[Union[dict, \"Occurrent\"], list[Union[dict, \"Occurrent\"]]]])\n", "\n", "slots.has_variant_part = Slot(uri=BIOLINK.has_variant_part, name=\"has variant part\", curie=BIOLINK.curie('has_variant_part'),\n", - " model_uri=DIST.has_variant_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_variant_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.variant_part_of = Slot(uri=BIOLINK.variant_part_of, name=\"variant part of\", curie=BIOLINK.curie('variant_part_of'),\n", - " model_uri=DIST.variant_part_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.variant_part_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.related_condition = Slot(uri=BIOLINK.related_condition, name=\"related condition\", curie=BIOLINK.curie('related_condition'),\n", - " model_uri=DIST.related_condition, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.related_condition, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.is_sequence_variant_of = Slot(uri=BIOLINK.is_sequence_variant_of, name=\"is sequence variant of\", curie=BIOLINK.curie('is_sequence_variant_of'),\n", - " model_uri=DIST.is_sequence_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_sequence_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_sequence_variant = Slot(uri=BIOLINK.has_sequence_variant, name=\"has sequence variant\", curie=BIOLINK.curie('has_sequence_variant'),\n", - " model_uri=DIST.has_sequence_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_sequence_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_missense_variant_of = Slot(uri=BIOLINK.is_missense_variant_of, name=\"is missense variant of\", curie=BIOLINK.curie('is_missense_variant_of'),\n", - " model_uri=DIST.is_missense_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_missense_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_missense_variant = Slot(uri=BIOLINK.has_missense_variant, name=\"has missense variant\", curie=BIOLINK.curie('has_missense_variant'),\n", - " model_uri=DIST.has_missense_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_missense_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_synonymous_variant_of = Slot(uri=BIOLINK.is_synonymous_variant_of, name=\"is synonymous variant of\", curie=BIOLINK.curie('is_synonymous_variant_of'),\n", - " model_uri=DIST.is_synonymous_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_synonymous_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_synonymous_variant = Slot(uri=BIOLINK.has_synonymous_variant, name=\"has synonymous variant\", curie=BIOLINK.curie('has_synonymous_variant'),\n", - " model_uri=DIST.has_synonymous_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_synonymous_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_nonsense_variant_of = Slot(uri=BIOLINK.is_nonsense_variant_of, name=\"is nonsense variant of\", curie=BIOLINK.curie('is_nonsense_variant_of'),\n", - " model_uri=DIST.is_nonsense_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_nonsense_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_nonsense_variant = Slot(uri=BIOLINK.has_nonsense_variant, name=\"has nonsense variant\", curie=BIOLINK.curie('has_nonsense_variant'),\n", - " model_uri=DIST.has_nonsense_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_nonsense_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_frameshift_variant_of = Slot(uri=BIOLINK.is_frameshift_variant_of, name=\"is frameshift variant of\", curie=BIOLINK.curie('is_frameshift_variant_of'),\n", - " model_uri=DIST.is_frameshift_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_frameshift_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_frameshift_variant = Slot(uri=BIOLINK.has_frameshift_variant, name=\"has frameshift variant\", curie=BIOLINK.curie('has_frameshift_variant'),\n", - " model_uri=DIST.has_frameshift_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_frameshift_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_splice_site_variant_of = Slot(uri=BIOLINK.is_splice_site_variant_of, name=\"is splice site variant of\", curie=BIOLINK.curie('is_splice_site_variant_of'),\n", - " model_uri=DIST.is_splice_site_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_splice_site_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_splice_site_variant = Slot(uri=BIOLINK.has_splice_site_variant, name=\"has splice site variant\", curie=BIOLINK.curie('has_splice_site_variant'),\n", - " model_uri=DIST.has_splice_site_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_splice_site_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_nearby_variant_of = Slot(uri=BIOLINK.is_nearby_variant_of, name=\"is nearby variant of\", curie=BIOLINK.curie('is_nearby_variant_of'),\n", - " model_uri=DIST.is_nearby_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_nearby_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_nearby_variant = Slot(uri=BIOLINK.has_nearby_variant, name=\"has nearby variant\", curie=BIOLINK.curie('has_nearby_variant'),\n", - " model_uri=DIST.has_nearby_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_nearby_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.is_non_coding_variant_of = Slot(uri=BIOLINK.is_non_coding_variant_of, name=\"is non coding variant of\", curie=BIOLINK.curie('is_non_coding_variant_of'),\n", - " model_uri=DIST.is_non_coding_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], List[Union[dict, GenomicEntity]]]])\n", + " model_uri=DIST.is_non_coding_variant_of, domain=SequenceVariant, range=Optional[Union[Union[dict, GenomicEntity], list[Union[dict, GenomicEntity]]]])\n", "\n", "slots.has_non_coding_variant = Slot(uri=BIOLINK.has_non_coding_variant, name=\"has non coding variant\", curie=BIOLINK.curie('has_non_coding_variant'),\n", - " model_uri=DIST.has_non_coding_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], List[Union[str, SequenceVariantId]]]])\n", + " model_uri=DIST.has_non_coding_variant, domain=None, range=Optional[Union[Union[str, SequenceVariantId], list[Union[str, SequenceVariantId]]]])\n", "\n", "slots.disease_has_basis_in = Slot(uri=BIOLINK.disease_has_basis_in, name=\"disease has basis in\", curie=BIOLINK.curie('disease_has_basis_in'),\n", - " model_uri=DIST.disease_has_basis_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.disease_has_basis_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.occurs_in_disease = Slot(uri=BIOLINK.occurs_in_disease, name=\"occurs in disease\", curie=BIOLINK.curie('occurs_in_disease'),\n", - " model_uri=DIST.occurs_in_disease, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.occurs_in_disease, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_adverse_event = Slot(uri=BIOLINK.has_adverse_event, name=\"has adverse event\", curie=BIOLINK.curie('has_adverse_event'),\n", - " model_uri=DIST.has_adverse_event, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.has_adverse_event, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.adverse_event_of = Slot(uri=BIOLINK.adverse_event_of, name=\"adverse event of\", curie=BIOLINK.curie('adverse_event_of'),\n", - " model_uri=DIST.adverse_event_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.adverse_event_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.has_side_effect = Slot(uri=BIOLINK.has_side_effect, name=\"has side effect\", curie=BIOLINK.curie('has_side_effect'),\n", - " model_uri=DIST.has_side_effect, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], List[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", + " model_uri=DIST.has_side_effect, domain=None, range=Optional[Union[Union[str, DiseaseOrPhenotypicFeatureId], list[Union[str, DiseaseOrPhenotypicFeatureId]]]])\n", "\n", "slots.is_side_effect_of = Slot(uri=BIOLINK.is_side_effect_of, name=\"is side effect of\", curie=BIOLINK.curie('is_side_effect_of'),\n", - " model_uri=DIST.is_side_effect_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.is_side_effect_of, domain=DiseaseOrPhenotypicFeature, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.contraindicated_in = Slot(uri=BIOLINK.contraindicated_in, name=\"contraindicated in\", curie=BIOLINK.curie('contraindicated_in'),\n", - " model_uri=DIST.contraindicated_in, domain=None, range=Optional[Union[Union[str, BiologicalEntityId], List[Union[str, BiologicalEntityId]]]])\n", + " model_uri=DIST.contraindicated_in, domain=None, range=Optional[Union[Union[str, BiologicalEntityId], list[Union[str, BiologicalEntityId]]]])\n", "\n", "slots.chemical_entity_or_drug_or_treatment = Slot(uri=BIOLINK.chemical_entity_or_drug_or_treatment, name=\"chemical entity or drug or treatment\", curie=BIOLINK.curie('chemical_entity_or_drug_or_treatment'),\n", " model_uri=DIST.chemical_entity_or_drug_or_treatment, domain=None, range=Optional[str])\n", "\n", "slots.has_contraindication = Slot(uri=BIOLINK.has_contraindication, name=\"has contraindication\", curie=BIOLINK.curie('has_contraindication'),\n", - " model_uri=DIST.has_contraindication, domain=BiologicalEntity, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], List[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", + " model_uri=DIST.has_contraindication, domain=BiologicalEntity, range=Optional[Union[Union[dict, ChemicalOrDrugOrTreatment], list[Union[dict, ChemicalOrDrugOrTreatment]]]])\n", "\n", "slots.has_not_completed = Slot(uri=BIOLINK.has_not_completed, name=\"has not completed\", curie=BIOLINK.curie('has_not_completed'),\n", - " model_uri=DIST.has_not_completed, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_not_completed, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.not_completed_by = Slot(uri=BIOLINK.not_completed_by, name=\"not completed by\", curie=BIOLINK.curie('not_completed_by'),\n", - " model_uri=DIST.not_completed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.not_completed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_completed = Slot(uri=BIOLINK.has_completed, name=\"has completed\", curie=BIOLINK.curie('has_completed'),\n", - " model_uri=DIST.has_completed, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_completed, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.completed_by = Slot(uri=BIOLINK.completed_by, name=\"completed by\", curie=BIOLINK.curie('completed_by'),\n", - " model_uri=DIST.completed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.completed_by, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.in_linkage_disequilibrium_with = Slot(uri=BIOLINK.in_linkage_disequilibrium_with, name=\"in linkage disequilibrium with\", curie=BIOLINK.curie('in_linkage_disequilibrium_with'),\n", - " model_uri=DIST.in_linkage_disequilibrium_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.in_linkage_disequilibrium_with, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_increased_amount = Slot(uri=BIOLINK.has_increased_amount, name=\"has increased amount\", curie=BIOLINK.curie('has_increased_amount'),\n", - " model_uri=DIST.has_increased_amount, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_increased_amount, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.increased_amount_of = Slot(uri=BIOLINK.increased_amount_of, name=\"increased amount of\", curie=BIOLINK.curie('increased_amount_of'),\n", - " model_uri=DIST.increased_amount_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.increased_amount_of, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.has_decreased_amount = Slot(uri=BIOLINK.has_decreased_amount, name=\"has decreased amount\", curie=BIOLINK.curie('has_decreased_amount'),\n", - " model_uri=DIST.has_decreased_amount, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.has_decreased_amount, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.decreased_amount_in = Slot(uri=BIOLINK.decreased_amount_in, name=\"decreased amount in\", curie=BIOLINK.curie('decreased_amount_in'),\n", - " model_uri=DIST.decreased_amount_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.decreased_amount_in, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.lacks_part = Slot(uri=BIOLINK.lacks_part, name=\"lacks part\", curie=BIOLINK.curie('lacks_part'),\n", - " model_uri=DIST.lacks_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.lacks_part, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.missing_from = Slot(uri=BIOLINK.missing_from, name=\"missing from\", curie=BIOLINK.curie('missing_from'),\n", - " model_uri=DIST.missing_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.missing_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.develops_from = Slot(uri=BIOLINK.develops_from, name=\"develops from\", curie=BIOLINK.curie('develops_from'),\n", - " model_uri=DIST.develops_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.develops_from, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.develops_into = Slot(uri=BIOLINK.develops_into, name=\"develops into\", curie=BIOLINK.curie('develops_into'),\n", - " model_uri=DIST.develops_into, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.develops_into, domain=NamedThing, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", + "\n", + "slots.taxon = Slot(uri=BIOLINK.taxon, name=\"taxon\", curie=BIOLINK.curie('taxon'),\n", + " model_uri=DIST.taxon, domain=NamedThing, range=Optional[Union[str, URIorCURIE]])\n", "\n", "slots.in_taxon = Slot(uri=BIOLINK.in_taxon, name=\"in taxon\", curie=BIOLINK.curie('in_taxon'),\n", - " model_uri=DIST.in_taxon, domain=None, range=Optional[Union[Union[str, OrganismTaxonId], List[Union[str, OrganismTaxonId]]]])\n", + " model_uri=DIST.in_taxon, domain=None, range=Optional[Union[Union[str, OrganismTaxonId], list[Union[str, OrganismTaxonId]]]])\n", "\n", "slots.in_taxon_label = Slot(uri=BIOLINK.in_taxon_label, name=\"in taxon label\", curie=BIOLINK.curie('in_taxon_label'),\n", " model_uri=DIST.in_taxon_label, domain=None, range=Optional[Union[str, LabelType]])\n", "\n", "slots.taxon_of = Slot(uri=BIOLINK.taxon_of, name=\"taxon of\", curie=BIOLINK.curie('taxon_of'),\n", - " model_uri=DIST.taxon_of, domain=OrganismTaxon, range=Optional[Union[Union[dict, \"ThingWithTaxon\"], List[Union[dict, \"ThingWithTaxon\"]]]])\n", + " model_uri=DIST.taxon_of, domain=OrganismTaxon, range=Optional[Union[Union[dict, \"ThingWithTaxon\"], list[Union[dict, \"ThingWithTaxon\"]]]])\n", "\n", "slots.has_molecular_consequence = Slot(uri=BIOLINK.has_molecular_consequence, name=\"has molecular consequence\", curie=BIOLINK.curie('has_molecular_consequence'),\n", - " model_uri=DIST.has_molecular_consequence, domain=NamedThing, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.has_molecular_consequence, domain=NamedThing, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.is_molecular_consequence_of = Slot(uri=BIOLINK.is_molecular_consequence_of, name=\"is molecular consequence of\", curie=BIOLINK.curie('is_molecular_consequence_of'),\n", - " model_uri=DIST.is_molecular_consequence_of, domain=None, range=Optional[Union[Union[str, NamedThingId], List[Union[str, NamedThingId]]]])\n", + " model_uri=DIST.is_molecular_consequence_of, domain=None, range=Optional[Union[Union[str, NamedThingId], list[Union[str, NamedThingId]]]])\n", "\n", "slots.association_slot = Slot(uri=BIOLINK.association_slot, name=\"association slot\", curie=BIOLINK.curie('association_slot'),\n", " model_uri=DIST.association_slot, domain=Association, range=Optional[str])\n", @@ -15198,11 +17711,17 @@ "slots.original_predicate = Slot(uri=BIOLINK.original_predicate, name=\"original predicate\", curie=BIOLINK.curie('original_predicate'),\n", " model_uri=DIST.original_predicate, domain=Association, range=Optional[Union[str, URIorCURIE]])\n", "\n", + "slots.subject_feature_name = Slot(uri=BIOLINK.subject_feature_name, name=\"subject feature name\", curie=BIOLINK.curie('subject_feature_name'),\n", + " model_uri=DIST.subject_feature_name, domain=Association, range=Optional[str])\n", + "\n", + "slots.object_feature_name = Slot(uri=BIOLINK.object_feature_name, name=\"object feature name\", curie=BIOLINK.curie('object_feature_name'),\n", + " model_uri=DIST.object_feature_name, domain=Association, range=Optional[str])\n", + "\n", "slots.subject_closure = Slot(uri=BIOLINK.subject_closure, name=\"subject closure\", curie=BIOLINK.curie('subject_closure'),\n", - " model_uri=DIST.subject_closure, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.subject_closure, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.object_closure = Slot(uri=BIOLINK.object_closure, name=\"object closure\", curie=BIOLINK.curie('object_closure'),\n", - " model_uri=DIST.object_closure, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.object_closure, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.subject_category = Slot(uri=BIOLINK.subject_category, name=\"subject category\", curie=BIOLINK.curie('subject_category'),\n", " model_uri=DIST.subject_category, domain=Association, range=Optional[Union[str, OntologyClassId]])\n", @@ -15211,16 +17730,16 @@ " model_uri=DIST.object_category, domain=Association, range=Optional[Union[str, OntologyClassId]])\n", "\n", "slots.subject_category_closure = Slot(uri=BIOLINK.subject_category_closure, name=\"subject category closure\", curie=BIOLINK.curie('subject_category_closure'),\n", - " model_uri=DIST.subject_category_closure, domain=Association, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.subject_category_closure, domain=Association, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.object_category_closure = Slot(uri=BIOLINK.object_category_closure, name=\"object category closure\", curie=BIOLINK.curie('object_category_closure'),\n", - " model_uri=DIST.object_category_closure, domain=Association, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.object_category_closure, domain=Association, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.subject_label_closure = Slot(uri=BIOLINK.subject_label_closure, name=\"subject label closure\", curie=BIOLINK.curie('subject_label_closure'),\n", - " model_uri=DIST.subject_label_closure, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.subject_label_closure, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.object_label_closure = Slot(uri=BIOLINK.object_label_closure, name=\"object label closure\", curie=BIOLINK.curie('object_label_closure'),\n", - " model_uri=DIST.object_label_closure, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.object_label_closure, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.subject_namespace = Slot(uri=BIOLINK.subject_namespace, name=\"subject namespace\", curie=BIOLINK.curie('subject_namespace'),\n", " model_uri=DIST.subject_namespace, domain=Association, range=Optional[str])\n", @@ -15235,7 +17754,7 @@ " model_uri=DIST.object, domain=Association, range=Union[str, NamedThingId])\n", "\n", "slots.predicate = Slot(uri=RDF.predicate, name=\"predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.predicate, domain=Association, range=Union[str, PredicateType])\n", + " model_uri=DIST.predicate, domain=Association, range=Union[str, URIorCURIE])\n", "\n", "slots.logical_interpretation = Slot(uri=BIOLINK.logical_interpretation, name=\"logical interpretation\", curie=BIOLINK.curie('logical_interpretation'),\n", " model_uri=DIST.logical_interpretation, domain=Association, range=Optional[Union[str, \"LogicalInterpretationEnum\"]])\n", @@ -15249,17 +17768,23 @@ "slots.has_confidence_level = Slot(uri=BIOLINK.has_confidence_level, name=\"has confidence level\", curie=BIOLINK.curie('has_confidence_level'),\n", " model_uri=DIST.has_confidence_level, domain=Association, range=Optional[str])\n", "\n", + "slots.has_confidence_score = Slot(uri=BIOLINK.has_confidence_score, name=\"has confidence score\", curie=BIOLINK.curie('has_confidence_score'),\n", + " model_uri=DIST.has_confidence_score, domain=Association, range=Optional[float])\n", + "\n", + "slots.has_evidence_of_type = Slot(uri=BIOLINK.has_evidence_of_type, name=\"has evidence of type\", curie=BIOLINK.curie('has_evidence_of_type'),\n", + " model_uri=DIST.has_evidence_of_type, domain=Association, range=Optional[Union[Union[str, EvidenceTypeId], list[Union[str, EvidenceTypeId]]]])\n", + "\n", "slots.has_evidence = Slot(uri=BIOLINK.has_evidence, name=\"has evidence\", curie=BIOLINK.curie('has_evidence'),\n", - " model_uri=DIST.has_evidence, domain=Association, range=Optional[Union[Union[str, EvidenceTypeId], List[Union[str, EvidenceTypeId]]]])\n", + " model_uri=DIST.has_evidence, domain=Association, range=Optional[Union[Union[str, InformationContentEntityId], list[Union[str, InformationContentEntityId]]]])\n", "\n", - "slots.has_supporting_study_result = Slot(uri=BIOLINK.has_supporting_study_result, name=\"has supporting study result\", curie=BIOLINK.curie('has_supporting_study_result'),\n", - " model_uri=DIST.has_supporting_study_result, domain=Association, range=Optional[str])\n", + "slots.has_study_results = Slot(uri=BIOLINK.has_study_results, name=\"has study results\", curie=BIOLINK.curie('has_study_results'),\n", + " model_uri=DIST.has_study_results, domain=Study, range=Optional[Union[dict[Union[str, StudyResultId], Union[dict, StudyResult]], list[Union[dict, StudyResult]]]])\n", "\n", "slots.log_odds_ratio = Slot(uri=BIOLINK.log_odds_ratio, name=\"log odds ratio\", curie=BIOLINK.curie('log_odds_ratio'),\n", " model_uri=DIST.log_odds_ratio, domain=Association, range=Optional[float])\n", "\n", "slots.log_odds_ratio_95_ci = Slot(uri=BIOLINK.log_odds_ratio_95_ci, name=\"log odds ratio 95 ci\", curie=BIOLINK.curie('log_odds_ratio_95_ci'),\n", - " model_uri=DIST.log_odds_ratio_95_ci, domain=Association, range=Optional[float])\n", + " model_uri=DIST.log_odds_ratio_95_ci, domain=Association, range=Optional[Union[float, list[float]]])\n", "\n", "slots.total_sample_size = Slot(uri=BIOLINK.total_sample_size, name=\"total sample size\", curie=BIOLINK.curie('total_sample_size'),\n", " model_uri=DIST.total_sample_size, domain=Association, range=Optional[int])\n", @@ -15271,23 +17796,38 @@ " model_uri=DIST.knowledge_source, domain=Association, range=Optional[str])\n", "\n", "slots.provided_by = Slot(uri=BIOLINK.provided_by, name=\"provided by\", curie=BIOLINK.curie('provided_by'),\n", - " model_uri=DIST.provided_by, domain=NamedThing, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.provided_by, domain=NamedThing, range=Optional[Union[str, list[str]]])\n", "\n", "slots.primary_knowledge_source = Slot(uri=BIOLINK.primary_knowledge_source, name=\"primary knowledge source\", curie=BIOLINK.curie('primary_knowledge_source'),\n", " model_uri=DIST.primary_knowledge_source, domain=Association, range=Optional[str])\n", "\n", "slots.aggregator_knowledge_source = Slot(uri=BIOLINK.aggregator_knowledge_source, name=\"aggregator knowledge source\", curie=BIOLINK.curie('aggregator_knowledge_source'),\n", - " model_uri=DIST.aggregator_knowledge_source, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.aggregator_knowledge_source, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.supporting_data_source = Slot(uri=BIOLINK.supporting_data_source, name=\"supporting data source\", curie=BIOLINK.curie('supporting_data_source'),\n", - " model_uri=DIST.supporting_data_source, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.supporting_data_source, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.supporting_data_set = Slot(uri=BIOLINK.supporting_data_set, name=\"supporting data set\", curie=BIOLINK.curie('supporting_data_set'),\n", - " model_uri=DIST.supporting_data_set, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.supporting_data_set, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.chi_squared_statistic = Slot(uri=BIOLINK.chi_squared_statistic, name=\"chi squared statistic\", curie=BIOLINK.curie('chi_squared_statistic'),\n", " model_uri=DIST.chi_squared_statistic, domain=Association, range=Optional[float])\n", "\n", + "slots.chi_squared_dof = Slot(uri=BIOLINK.chi_squared_dof, name=\"chi squared dof\", curie=BIOLINK.curie('chi_squared_dof'),\n", + " model_uri=DIST.chi_squared_dof, domain=Association, range=Optional[int])\n", + "\n", + "slots.chi_squared_p = Slot(uri=BIOLINK.chi_squared_p, name=\"chi squared p\", curie=BIOLINK.curie('chi_squared_p'),\n", + " model_uri=DIST.chi_squared_p, domain=Association, range=Optional[float])\n", + "\n", + "slots.fisher_exact_odds_ratio = Slot(uri=BIOLINK.fisher_exact_odds_ratio, name=\"fisher exact odds ratio\", curie=BIOLINK.curie('fisher_exact_odds_ratio'),\n", + " model_uri=DIST.fisher_exact_odds_ratio, domain=Association, range=Optional[float])\n", + "\n", + "slots.fisher_exact_p = Slot(uri=BIOLINK.fisher_exact_p, name=\"fisher exact p\", curie=BIOLINK.curie('fisher_exact_p'),\n", + " model_uri=DIST.fisher_exact_p, domain=Association, range=Optional[float])\n", + "\n", + "slots.z_score = Slot(uri=BIOLINK.z_score, name=\"z score\", curie=BIOLINK.curie('z_score'),\n", + " model_uri=DIST.z_score, domain=Association, range=Optional[float])\n", + "\n", "slots.p_value = Slot(uri=BIOLINK.p_value, name=\"p value\", curie=BIOLINK.curie('p_value'),\n", " model_uri=DIST.p_value, domain=Association, range=Optional[float])\n", "\n", @@ -15328,19 +17868,19 @@ " model_uri=DIST.bonferonni_adjusted_p_value, domain=Association, range=Optional[float])\n", "\n", "slots.supporting_text = Slot(uri=BIOLINK.supporting_text, name=\"supporting text\", curie=BIOLINK.curie('supporting_text'),\n", - " model_uri=DIST.supporting_text, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.supporting_text, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.supporting_documents = Slot(uri=BIOLINK.supporting_documents, name=\"supporting documents\", curie=BIOLINK.curie('supporting_documents'),\n", - " model_uri=DIST.supporting_documents, domain=Association, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])\n", + " model_uri=DIST.supporting_documents, domain=Association, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", "\n", "slots.subject_location_in_text = Slot(uri=BIOLINK.subject_location_in_text, name=\"subject location in text\", curie=BIOLINK.curie('subject_location_in_text'),\n", - " model_uri=DIST.subject_location_in_text, domain=Association, range=Optional[Union[int, List[int]]])\n", + " model_uri=DIST.subject_location_in_text, domain=Association, range=Optional[Union[int, list[int]]])\n", "\n", "slots.object_location_in_text = Slot(uri=BIOLINK.object_location_in_text, name=\"object location in text\", curie=BIOLINK.curie('object_location_in_text'),\n", - " model_uri=DIST.object_location_in_text, domain=Association, range=Optional[Union[int, List[int]]])\n", + " model_uri=DIST.object_location_in_text, domain=Association, range=Optional[Union[int, list[int]]])\n", "\n", "slots.extraction_confidence_score = Slot(uri=BIOLINK.extraction_confidence_score, name=\"extraction confidence score\", curie=BIOLINK.curie('extraction_confidence_score'),\n", - " model_uri=DIST.extraction_confidence_score, domain=Association, range=Optional[int])\n", + " model_uri=DIST.extraction_confidence_score, domain=Association, range=Optional[float])\n", "\n", "slots.supporting_document_type = Slot(uri=BIOLINK.supporting_document_type, name=\"supporting document type\", curie=BIOLINK.curie('supporting_document_type'),\n", " model_uri=DIST.supporting_document_type, domain=Association, range=Optional[str])\n", @@ -15366,8 +17906,15 @@ "slots.phenotypic_state = Slot(uri=BIOLINK.phenotypic_state, name=\"phenotypic state\", curie=BIOLINK.curie('phenotypic_state'),\n", " model_uri=DIST.phenotypic_state, domain=Association, range=Optional[Union[str, DiseaseOrPhenotypicFeatureId]])\n", "\n", + "slots.allelic_requirement = Slot(uri=BIOLINK.allelic_requirement, name=\"allelic requirement\", curie=BIOLINK.curie('allelic_requirement'),\n", + " model_uri=DIST.allelic_requirement, domain=Association, range=Optional[str],\n", + " pattern=re.compile(r'^HP:\\d{7}$'))\n", + "\n", "slots.publications = Slot(uri=BIOLINK.publications, name=\"publications\", curie=BIOLINK.curie('publications'),\n", - " model_uri=DIST.publications, domain=Association, range=Optional[Union[Union[str, PublicationId], List[Union[str, PublicationId]]]])\n", + " model_uri=DIST.publications, domain=Association, range=Optional[Union[Union[str, PublicationId], list[Union[str, PublicationId]]]])\n", + "\n", + "slots.sources = Slot(uri=BIOLINK.sources, name=\"sources\", curie=BIOLINK.curie('sources'),\n", + " model_uri=DIST.sources, domain=Association, range=Optional[Union[Union[str, RetrievalSourceId], list[Union[str, RetrievalSourceId]]]])\n", "\n", "slots.associated_environmental_context = Slot(uri=BIOLINK.associated_environmental_context, name=\"associated environmental context\", curie=BIOLINK.curie('associated_environmental_context'),\n", " model_uri=DIST.associated_environmental_context, domain=Association, range=Optional[str])\n", @@ -15405,14 +17952,17 @@ "slots.max_research_phase = Slot(uri=BIOLINK.max_research_phase, name=\"max research phase\", curie=BIOLINK.curie('max_research_phase'),\n", " model_uri=DIST.max_research_phase, domain=Association, range=Optional[Union[str, \"ResearchPhaseEnum\"]])\n", "\n", + "slots.number_of_cases = Slot(uri=BIOLINK.number_of_cases, name=\"number of cases\", curie=BIOLINK.curie('number_of_cases'),\n", + " model_uri=DIST.number_of_cases, domain=NamedThing, range=Optional[int])\n", + "\n", "slots.has_supporting_studies = Slot(uri=BIOLINK.has_supporting_studies, name=\"has supporting studies\", curie=BIOLINK.curie('has_supporting_studies'),\n", - " model_uri=DIST.has_supporting_studies, domain=Association, range=Optional[Union[Union[str, StudyId], List[Union[str, StudyId]]]])\n", + " model_uri=DIST.has_supporting_studies, domain=Association, range=Optional[Union[Union[str, StudyId], list[Union[str, StudyId]]]])\n", "\n", "slots.supporting_study_metadata = Slot(uri=BIOLINK.supporting_study_metadata, name=\"supporting study metadata\", curie=BIOLINK.curie('supporting_study_metadata'),\n", " model_uri=DIST.supporting_study_metadata, domain=Association, range=Optional[str])\n", "\n", - "slots.supporting_study_method_type = Slot(uri=BIOLINK.supporting_study_method_type, name=\"supporting study method type\", curie=BIOLINK.curie('supporting_study_method_type'),\n", - " model_uri=DIST.supporting_study_method_type, domain=Association, range=Optional[Union[str, URIorCURIE]])\n", + "slots.supporting_study_method_types = Slot(uri=BIOLINK.supporting_study_method_types, name=\"supporting study method types\", curie=BIOLINK.curie('supporting_study_method_types'),\n", + " model_uri=DIST.supporting_study_method_types, domain=Association, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", "\n", "slots.supporting_study_method_description = Slot(uri=BIOLINK.supporting_study_method_description, name=\"supporting study method description\", curie=BIOLINK.curie('supporting_study_method_description'),\n", " model_uri=DIST.supporting_study_method_description, domain=Association, range=Optional[Union[str, URIorCURIE]])\n", @@ -15435,11 +17985,95 @@ "slots.agent_type = Slot(uri=BIOLINK.agent_type, name=\"agent type\", curie=BIOLINK.curie('agent_type'),\n", " model_uri=DIST.agent_type, domain=Association, range=Union[str, \"AgentTypeEnum\"])\n", "\n", + "slots.has_biological_sex = Slot(uri=BIOLINK.has_biological_sex, name=\"has biological sex\", curie=BIOLINK.curie('has_biological_sex'),\n", + " model_uri=DIST.has_biological_sex, domain=None, range=Optional[Union[str, BiologicalSexId]])\n", + "\n", + "slots.druggable_gene_category = Slot(uri=BIOLINK.druggable_gene_category, name=\"druggable gene category\", curie=BIOLINK.curie('druggable_gene_category'),\n", + " model_uri=DIST.druggable_gene_category, domain=None, range=Optional[Union[str, \"DruggableGeneCategoryEnum\"]])\n", + "\n", + "slots.information_content = Slot(uri=BIOLINK.information_content, name=\"information content\", curie=BIOLINK.curie('information_content'),\n", + " model_uri=DIST.information_content, domain=None, range=Optional[float])\n", + "\n", + "slots.equivalent_identifiers = Slot(uri=BIOLINK.equivalent_identifiers, name=\"equivalent identifiers\", curie=BIOLINK.curie('equivalent_identifiers'),\n", + " model_uri=DIST.equivalent_identifiers, domain=None, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", + "\n", + "slots.chembl_drug_warning = Slot(uri=BIOLINK.chembl_drug_warning, name=\"chembl drug warning\", curie=BIOLINK.curie('chembl_drug_warning'),\n", + " model_uri=DIST.chembl_drug_warning, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_prodrug = Slot(uri=BIOLINK.chembl_prodrug, name=\"chembl prodrug\", curie=BIOLINK.curie('chembl_prodrug'),\n", + " model_uri=DIST.chembl_prodrug, domain=None, range=Optional[Union[bool, Bool]])\n", + "\n", + "slots.chembl_chirality = Slot(uri=BIOLINK.chembl_chirality, name=\"chembl chirality\", curie=BIOLINK.curie('chembl_chirality'),\n", + " model_uri=DIST.chembl_chirality, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_black_box_warning = Slot(uri=BIOLINK.chembl_black_box_warning, name=\"chembl black box warning\", curie=BIOLINK.curie('chembl_black_box_warning'),\n", + " model_uri=DIST.chembl_black_box_warning, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_natural_product = Slot(uri=BIOLINK.chembl_natural_product, name=\"chembl natural product\", curie=BIOLINK.curie('chembl_natural_product'),\n", + " model_uri=DIST.chembl_natural_product, domain=None, range=Optional[Union[bool, Bool]])\n", + "\n", + "slots.chembl_availability_type = Slot(uri=BIOLINK.chembl_availability_type, name=\"chembl availability type\", curie=BIOLINK.curie('chembl_availability_type'),\n", + " model_uri=DIST.chembl_availability_type, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_binding_site_name = Slot(uri=BIOLINK.chembl_binding_site_name, name=\"chembl binding site name\", curie=BIOLINK.curie('chembl_binding_site_name'),\n", + " model_uri=DIST.chembl_binding_site_name, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_binding_site_comment = Slot(uri=BIOLINK.chembl_binding_site_comment, name=\"chembl binding site comment\", curie=BIOLINK.curie('chembl_binding_site_comment'),\n", + " model_uri=DIST.chembl_binding_site_comment, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_mechanism_of_action_description = Slot(uri=BIOLINK.chembl_mechanism_of_action_description, name=\"chembl mechanism of action description\", curie=BIOLINK.curie('chembl_mechanism_of_action_description'),\n", + " model_uri=DIST.chembl_mechanism_of_action_description, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_mechanism_of_action_comment = Slot(uri=BIOLINK.chembl_mechanism_of_action_comment, name=\"chembl mechanism of action comment\", curie=BIOLINK.curie('chembl_mechanism_of_action_comment'),\n", + " model_uri=DIST.chembl_mechanism_of_action_comment, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_mutation = Slot(uri=BIOLINK.chembl_mutation, name=\"chembl mutation\", curie=BIOLINK.curie('chembl_mutation'),\n", + " model_uri=DIST.chembl_mutation, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_mutation_accession = Slot(uri=BIOLINK.chembl_mutation_accession, name=\"chembl mutation accession\", curie=BIOLINK.curie('chembl_mutation_accession'),\n", + " model_uri=DIST.chembl_mutation_accession, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_selectivity_comment = Slot(uri=BIOLINK.chembl_selectivity_comment, name=\"chembl selectivity comment\", curie=BIOLINK.curie('chembl_selectivity_comment'),\n", + " model_uri=DIST.chembl_selectivity_comment, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_assay_description = Slot(uri=BIOLINK.chembl_assay_description, name=\"chembl assay description\", curie=BIOLINK.curie('chembl_assay_description'),\n", + " model_uri=DIST.chembl_assay_description, domain=None, range=Optional[str])\n", + "\n", + "slots.chembl_confidence_score = Slot(uri=BIOLINK.chembl_confidence_score, name=\"chembl confidence score\", curie=BIOLINK.curie('chembl_confidence_score'),\n", + " model_uri=DIST.chembl_confidence_score, domain=None, range=Optional[int])\n", + "\n", + "slots.dgidb_relative_drug_specificity_score = Slot(uri=BIOLINK.dgidb_relative_drug_specificity_score, name=\"dgidb relative drug specificity score\", curie=BIOLINK.curie('dgidb_relative_drug_specificity_score'),\n", + " model_uri=DIST.dgidb_relative_drug_specificity_score, domain=None, range=Optional[float])\n", + "\n", + "slots.dgidb_relative_gene_specificity_score = Slot(uri=BIOLINK.dgidb_relative_gene_specificity_score, name=\"dgidb relative gene specificity score\", curie=BIOLINK.curie('dgidb_relative_gene_specificity_score'),\n", + " model_uri=DIST.dgidb_relative_gene_specificity_score, domain=None, range=Optional[float])\n", + "\n", + "slots.intact_confidence_value = Slot(uri=BIOLINK.intact_confidence_value, name=\"intact confidence value\", curie=BIOLINK.curie('intact_confidence_value'),\n", + " model_uri=DIST.intact_confidence_value, domain=None, range=Optional[str])\n", + "\n", + "slots.dgidb_interaction_score = Slot(uri=BIOLINK.dgidb_interaction_score, name=\"dgidb interaction score\", curie=BIOLINK.curie('dgidb_interaction_score'),\n", + " model_uri=DIST.dgidb_interaction_score, domain=None, range=Optional[float])\n", + "\n", + "slots.dgidb_evidence_score = Slot(uri=BIOLINK.dgidb_evidence_score, name=\"dgidb evidence score\", curie=BIOLINK.curie('dgidb_evidence_score'),\n", + " model_uri=DIST.dgidb_evidence_score, domain=None, range=Optional[int])\n", + "\n", + "slots.diseases_confidence_score = Slot(uri=BIOLINK.diseases_confidence_score, name=\"diseases confidence score\", curie=BIOLINK.curie('diseases_confidence_score'),\n", + " model_uri=DIST.diseases_confidence_score, domain=None, range=Optional[float])\n", + "\n", + "slots.drug_rep_hub_disease_area = Slot(uri=BIOLINK.drug_rep_hub_disease_area, name=\"drug_rep_hub disease area\", curie=BIOLINK.curie('drug_rep_hub_disease_area'),\n", + " model_uri=DIST.drug_rep_hub_disease_area, domain=None, range=Optional[str])\n", + "\n", + "slots.gene2phenotype_confidence_category = Slot(uri=BIOLINK.gene2phenotype_confidence_category, name=\"gene2phenotype confidence category\", curie=BIOLINK.curie('gene2phenotype_confidence_category'),\n", + " model_uri=DIST.gene2phenotype_confidence_category, domain=None, range=Optional[str])\n", + "\n", + "slots.signor_confidence_score = Slot(uri=BIOLINK.signor_confidence_score, name=\"signor confidence score\", curie=BIOLINK.curie('signor_confidence_score'),\n", + " model_uri=DIST.signor_confidence_score, domain=None, range=Optional[float])\n", + "\n", "slots.attribute_name = Slot(uri=RDFS.label, name=\"attribute_name\", curie=RDFS.curie('label'),\n", " model_uri=DIST.attribute_name, domain=Attribute, range=Optional[Union[str, LabelType]])\n", "\n", "slots.named_thing_category = Slot(uri=BIOLINK.category, name=\"named thing_category\", curie=BIOLINK.curie('category'),\n", - " model_uri=DIST.named_thing_category, domain=NamedThing, range=Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]])\n", + " model_uri=DIST.named_thing_category, domain=NamedThing, range=Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]])\n", "\n", "slots.organism_taxon_has_taxonomic_rank = Slot(uri=BIOLINK.has_taxonomic_rank, name=\"organism taxon_has taxonomic rank\", curie=BIOLINK.curie('has_taxonomic_rank'),\n", " model_uri=DIST.organism_taxon_has_taxonomic_rank, domain=OrganismTaxon, range=Optional[Union[str, TaxonomicRankId]], mappings = [WIKIDATA[\"P105\"]])\n", @@ -15457,16 +18091,16 @@ " model_uri=DIST.publication_name, domain=Publication, range=Optional[Union[str, LabelType]])\n", "\n", "slots.publication_publication_type = Slot(uri=DCT.type, name=\"publication_publication type\", curie=DCT.curie('type'),\n", - " model_uri=DIST.publication_publication_type, domain=Publication, range=Union[str, List[str]])\n", + " model_uri=DIST.publication_publication_type, domain=Publication, range=Union[str, list[str]])\n", "\n", "slots.publication_pages = Slot(uri=BIOLINK.pages, name=\"publication_pages\", curie=BIOLINK.curie('pages'),\n", - " model_uri=DIST.publication_pages, domain=Publication, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.publication_pages, domain=Publication, range=Optional[Union[str, list[str]]])\n", "\n", "slots.book_id = Slot(uri=BIOLINK.id, name=\"book_id\", curie=BIOLINK.curie('id'),\n", " model_uri=DIST.book_id, domain=Book, range=Union[str, BookId])\n", "\n", "slots.book_type = Slot(uri=RDF.type, name=\"book_type\", curie=RDF.curie('type'),\n", - " model_uri=DIST.book_type, domain=Book, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.book_type, domain=Book, range=Optional[Union[str, list[str]]])\n", "\n", "slots.book_chapter_published_in = Slot(uri=BIOLINK.published_in, name=\"book chapter_published in\", curie=BIOLINK.curie('published_in'),\n", " model_uri=DIST.book_chapter_published_in, domain=BookChapter, range=Union[str, URIorCURIE])\n", @@ -15475,7 +18109,7 @@ " model_uri=DIST.serial_id, domain=Serial, range=Union[str, SerialId])\n", "\n", "slots.serial_type = Slot(uri=RDF.type, name=\"serial_type\", curie=RDF.curie('type'),\n", - " model_uri=DIST.serial_type, domain=Serial, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.serial_type, domain=Serial, range=Optional[Union[str, list[str]]])\n", "\n", "slots.article_published_in = Slot(uri=BIOLINK.published_in, name=\"article_published in\", curie=BIOLINK.curie('published_in'),\n", " model_uri=DIST.article_published_in, domain=Article, range=Union[str, URIorCURIE])\n", @@ -15490,25 +18124,28 @@ " model_uri=DIST.retrieval_source_resource_role, domain=RetrievalSource, range=Union[str, \"ResourceRoleEnum\"])\n", "\n", "slots.retrieval_source_upstream_resource_ids = Slot(uri=BIOLINK.upstream_resource_ids, name=\"retrieval source_upstream resource ids\", curie=BIOLINK.curie('upstream_resource_ids'),\n", - " model_uri=DIST.retrieval_source_upstream_resource_ids, domain=RetrievalSource, range=Optional[Union[str, URIorCURIE]])\n", + " model_uri=DIST.retrieval_source_upstream_resource_ids, domain=RetrievalSource, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", + "\n", + "slots.retrieval_source_source_record_urls = Slot(uri=BIOLINK.source_record_urls, name=\"retrieval source_source record urls\", curie=BIOLINK.curie('source_record_urls'),\n", + " model_uri=DIST.retrieval_source_source_record_urls, domain=RetrievalSource, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", "\n", "slots.molecular_activity_has_input = Slot(uri=BIOLINK.has_input, name=\"molecular activity_has input\", curie=BIOLINK.curie('has_input'),\n", - " model_uri=DIST.molecular_activity_has_input, domain=MolecularActivity, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]])\n", + " model_uri=DIST.molecular_activity_has_input, domain=MolecularActivity, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]])\n", "\n", "slots.molecular_activity_has_output = Slot(uri=BIOLINK.has_output, name=\"molecular activity_has output\", curie=BIOLINK.curie('has_output'),\n", - " model_uri=DIST.molecular_activity_has_output, domain=MolecularActivity, range=Optional[Union[Union[str, MolecularEntityId], List[Union[str, MolecularEntityId]]]])\n", + " model_uri=DIST.molecular_activity_has_output, domain=MolecularActivity, range=Optional[Union[Union[str, MolecularEntityId], list[Union[str, MolecularEntityId]]]])\n", "\n", "slots.molecular_activity_enabled_by = Slot(uri=BIOLINK.enabled_by, name=\"molecular activity_enabled by\", curie=BIOLINK.curie('enabled_by'),\n", - " model_uri=DIST.molecular_activity_enabled_by, domain=MolecularActivity, range=Optional[Union[Union[dict, \"MacromolecularMachineMixin\"], List[Union[dict, \"MacromolecularMachineMixin\"]]]])\n", + " model_uri=DIST.molecular_activity_enabled_by, domain=MolecularActivity, range=Optional[Union[Union[dict, \"MacromolecularMachineMixin\"], list[Union[dict, \"MacromolecularMachineMixin\"]]]])\n", "\n", "slots.organismal_entity_has_attribute = Slot(uri=BIOLINK.has_attribute, name=\"organismal entity_has attribute\", curie=BIOLINK.curie('has_attribute'),\n", - " model_uri=DIST.organismal_entity_has_attribute, domain=OrganismalEntity, range=Optional[Union[Union[str, AttributeId], List[Union[str, AttributeId]]]])\n", + " model_uri=DIST.organismal_entity_has_attribute, domain=OrganismalEntity, range=Optional[Union[Union[str, AttributeId], list[Union[str, AttributeId]]]])\n", "\n", "slots.macromolecular_machine_mixin_name = Slot(uri=RDFS.label, name=\"macromolecular machine mixin_name\", curie=RDFS.curie('label'),\n", " model_uri=DIST.macromolecular_machine_mixin_name, domain=None, range=Optional[Union[str, SymbolType]])\n", "\n", "slots.sequence_variant_has_gene = Slot(uri=BIOLINK.has_gene, name=\"sequence variant_has gene\", curie=BIOLINK.curie('has_gene'),\n", - " model_uri=DIST.sequence_variant_has_gene, domain=SequenceVariant, range=Optional[Union[Union[str, GeneId], List[Union[str, GeneId]]]])\n", + " model_uri=DIST.sequence_variant_has_gene, domain=SequenceVariant, range=Optional[Union[Union[str, GeneId], list[Union[str, GeneId]]]])\n", "\n", "slots.sequence_variant_has_biological_sequence = Slot(uri=BIOLINK.has_biological_sequence, name=\"sequence variant_has biological sequence\", curie=BIOLINK.curie('has_biological_sequence'),\n", " model_uri=DIST.sequence_variant_has_biological_sequence, domain=SequenceVariant, range=Optional[Union[str, BiologicalSequence]])\n", @@ -15520,16 +18157,34 @@ " model_uri=DIST.clinical_measurement_has_attribute_type, domain=ClinicalMeasurement, range=Union[str, OntologyClassId])\n", "\n", "slots.clinical_finding_has_attribute = Slot(uri=BIOLINK.has_attribute, name=\"clinical finding_has attribute\", curie=BIOLINK.curie('has_attribute'),\n", - " model_uri=DIST.clinical_finding_has_attribute, domain=ClinicalFinding, range=Optional[Union[Union[str, ClinicalAttributeId], List[Union[str, ClinicalAttributeId]]]])\n", + " model_uri=DIST.clinical_finding_has_attribute, domain=ClinicalFinding, range=Optional[Union[Union[str, ClinicalAttributeId], list[Union[str, ClinicalAttributeId]]]])\n", + "\n", + "slots.exposure_event_id = Slot(uri=BIOLINK.id, name=\"exposure event_id\", curie=BIOLINK.curie('id'),\n", + " model_uri=DIST.exposure_event_id, domain=ExposureEvent, range=Union[str, ExposureEventId])\n", "\n", "slots.socioeconomic_exposure_has_attribute = Slot(uri=BIOLINK.has_attribute, name=\"socioeconomic exposure_has attribute\", curie=BIOLINK.curie('has_attribute'),\n", - " model_uri=DIST.socioeconomic_exposure_has_attribute, domain=SocioeconomicExposure, range=Union[Union[str, SocioeconomicAttributeId], List[Union[str, SocioeconomicAttributeId]]])\n", + " model_uri=DIST.socioeconomic_exposure_has_attribute, domain=SocioeconomicExposure, range=Union[Union[str, SocioeconomicAttributeId], list[Union[str, SocioeconomicAttributeId]]])\n", "\n", "slots.association_type = Slot(uri=RDF.type, name=\"association_type\", curie=RDF.curie('type'),\n", - " model_uri=DIST.association_type, domain=Association, range=Optional[Union[str, List[str]]])\n", + " model_uri=DIST.association_type, domain=Association, range=Optional[Union[str, list[str]]])\n", "\n", "slots.association_category = Slot(uri=BIOLINK.category, name=\"association_category\", curie=BIOLINK.curie('category'),\n", - " model_uri=DIST.association_category, domain=Association, range=Optional[Union[Union[str, URIorCURIE], List[Union[str, URIorCURIE]]]])\n", + " model_uri=DIST.association_category, domain=Association, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]])\n", + "\n", + "slots.association_sources = Slot(uri=BIOLINK.sources, name=\"association_sources\", curie=BIOLINK.curie('sources'),\n", + " model_uri=DIST.association_sources, domain=Association, range=Optional[Union[dict[Union[str, RetrievalSourceId], Union[dict, RetrievalSource]], list[Union[dict, RetrievalSource]]]])\n", + "\n", + "slots.association_has_supporting_studies = Slot(uri=BIOLINK.has_supporting_studies, name=\"association_has supporting studies\", curie=BIOLINK.curie('has_supporting_studies'),\n", + " model_uri=DIST.association_has_supporting_studies, domain=Association, range=Optional[Union[dict[Union[str, StudyId], Union[dict, Study]], list[Union[dict, Study]]]])\n", + "\n", + "slots.disease_associated_with_response_to_chemical_entity_association_subject = Slot(uri=RDF.subject, name=\"disease associated with response to chemical entity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.disease_associated_with_response_to_chemical_entity_association_subject, domain=DiseaseAssociatedWithResponseToChemicalEntityAssociation, range=Union[str, DiseaseId])\n", + "\n", + "slots.disease_associated_with_response_to_chemical_entity_association_object = Slot(uri=RDF.object, name=\"disease associated with response to chemical entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.disease_associated_with_response_to_chemical_entity_association_object, domain=DiseaseAssociatedWithResponseToChemicalEntityAssociation, range=Union[str, ChemicalEntityId])\n", + "\n", + "slots.disease_associated_with_response_to_chemical_entity_association_predicate = Slot(uri=RDF.predicate, name=\"disease associated with response to chemical entity association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.disease_associated_with_response_to_chemical_entity_association_predicate, domain=DiseaseAssociatedWithResponseToChemicalEntityAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.chemical_entity_assesses_named_thing_association_subject = Slot(uri=RDF.subject, name=\"chemical entity assesses named thing association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.chemical_entity_assesses_named_thing_association_subject, domain=ChemicalEntityAssessesNamedThingAssociation, range=Union[str, ChemicalEntityId])\n", @@ -15538,22 +18193,22 @@ " model_uri=DIST.chemical_entity_assesses_named_thing_association_object, domain=ChemicalEntityAssessesNamedThingAssociation, range=Union[str, NamedThingId])\n", "\n", "slots.chemical_entity_assesses_named_thing_association_predicate = Slot(uri=RDF.predicate, name=\"chemical entity assesses named thing association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_entity_assesses_named_thing_association_predicate, domain=ChemicalEntityAssessesNamedThingAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.chemical_entity_assesses_named_thing_association_predicate, domain=ChemicalEntityAssessesNamedThingAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.contributor_association_subject = Slot(uri=RDF.subject, name=\"contributor association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.contributor_association_subject, domain=ContributorAssociation, range=Union[str, InformationContentEntityId])\n", "\n", "slots.contributor_association_predicate = Slot(uri=RDF.predicate, name=\"contributor association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.contributor_association_predicate, domain=ContributorAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.contributor_association_predicate, domain=ContributorAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.contributor_association_object = Slot(uri=RDF.object, name=\"contributor association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.contributor_association_object, domain=ContributorAssociation, range=Union[str, AgentId])\n", "\n", "slots.contributor_association_qualifiers = Slot(uri=BIOLINK.qualifiers, name=\"contributor association_qualifiers\", curie=BIOLINK.curie('qualifiers'),\n", - " model_uri=DIST.contributor_association_qualifiers, domain=ContributorAssociation, range=Optional[Union[Union[str, OntologyClassId], List[Union[str, OntologyClassId]]]])\n", + " model_uri=DIST.contributor_association_qualifiers, domain=ContributorAssociation, range=Optional[Union[Union[str, OntologyClassId], list[Union[str, OntologyClassId]]]])\n", "\n", "slots.genotype_to_genotype_part_association_predicate = Slot(uri=RDF.predicate, name=\"genotype to genotype part association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.genotype_to_genotype_part_association_predicate, domain=GenotypeToGenotypePartAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.genotype_to_genotype_part_association_predicate, domain=GenotypeToGenotypePartAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.genotype_to_genotype_part_association_subject = Slot(uri=RDF.subject, name=\"genotype to genotype part association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.genotype_to_genotype_part_association_subject, domain=GenotypeToGenotypePartAssociation, range=Union[str, GenotypeId])\n", @@ -15562,7 +18217,7 @@ " model_uri=DIST.genotype_to_genotype_part_association_object, domain=GenotypeToGenotypePartAssociation, range=Union[str, GenotypeId])\n", "\n", "slots.genotype_to_gene_association_predicate = Slot(uri=RDF.predicate, name=\"genotype to gene association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.genotype_to_gene_association_predicate, domain=GenotypeToGeneAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.genotype_to_gene_association_predicate, domain=GenotypeToGeneAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.genotype_to_gene_association_subject = Slot(uri=RDF.subject, name=\"genotype to gene association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.genotype_to_gene_association_subject, domain=GenotypeToGeneAssociation, range=Union[str, GenotypeId])\n", @@ -15571,7 +18226,7 @@ " model_uri=DIST.genotype_to_gene_association_object, domain=GenotypeToGeneAssociation, range=Union[str, GeneId])\n", "\n", "slots.genotype_to_variant_association_predicate = Slot(uri=RDF.predicate, name=\"genotype to variant association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.genotype_to_variant_association_predicate, domain=GenotypeToVariantAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.genotype_to_variant_association_predicate, domain=GenotypeToVariantAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.genotype_to_variant_association_subject = Slot(uri=RDF.subject, name=\"genotype to variant association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.genotype_to_variant_association_subject, domain=GenotypeToVariantAssociation, range=Union[str, GenotypeId])\n", @@ -15582,14 +18237,32 @@ "slots.gene_to_gene_association_subject = Slot(uri=RDF.subject, name=\"gene to gene association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_to_gene_association_subject, domain=GeneToGeneAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", + "slots.gene_to_gene_association_subject_activity_qualifier = Slot(uri=BIOLINK.subject_activity_qualifier, name=\"gene to gene association_subject activity qualifier\", curie=BIOLINK.curie('subject_activity_qualifier'),\n", + " model_uri=DIST.gene_to_gene_association_subject_activity_qualifier, domain=GeneToGeneAssociation, range=Optional[Union[str, MolecularActivityId]])\n", + "\n", + "slots.gene_to_gene_association_subject_process_qualifier = Slot(uri=BIOLINK.subject_process_qualifier, name=\"gene to gene association_subject process qualifier\", curie=BIOLINK.curie('subject_process_qualifier'),\n", + " model_uri=DIST.gene_to_gene_association_subject_process_qualifier, domain=GeneToGeneAssociation, range=Optional[Union[str, BiologicalProcessId]])\n", + "\n", + "slots.gene_to_gene_association_subject_context_qualifier = Slot(uri=BIOLINK.subject_context_qualifier, name=\"gene to gene association_subject context qualifier\", curie=BIOLINK.curie('subject_context_qualifier'),\n", + " model_uri=DIST.gene_to_gene_association_subject_context_qualifier, domain=GeneToGeneAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + "\n", "slots.gene_to_gene_association_object = Slot(uri=RDF.object, name=\"gene to gene association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.gene_to_gene_association_object, domain=GeneToGeneAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", + "slots.gene_to_gene_association_object_activity_qualifier = Slot(uri=BIOLINK.object_activity_qualifier, name=\"gene to gene association_object activity qualifier\", curie=BIOLINK.curie('object_activity_qualifier'),\n", + " model_uri=DIST.gene_to_gene_association_object_activity_qualifier, domain=GeneToGeneAssociation, range=Optional[Union[str, MolecularActivityId]])\n", + "\n", + "slots.gene_to_gene_association_object_process_qualifier = Slot(uri=BIOLINK.object_process_qualifier, name=\"gene to gene association_object process qualifier\", curie=BIOLINK.curie('object_process_qualifier'),\n", + " model_uri=DIST.gene_to_gene_association_object_process_qualifier, domain=GeneToGeneAssociation, range=Optional[Union[str, BiologicalProcessId]])\n", + "\n", + "slots.gene_to_gene_association_object_context_qualifier = Slot(uri=BIOLINK.object_context_qualifier, name=\"gene to gene association_object context qualifier\", curie=BIOLINK.curie('object_context_qualifier'),\n", + " model_uri=DIST.gene_to_gene_association_object_context_qualifier, domain=GeneToGeneAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + "\n", "slots.gene_to_gene_homology_association_subject = Slot(uri=RDF.subject, name=\"gene to gene homology association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_to_gene_homology_association_subject, domain=GeneToGeneHomologyAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", "slots.gene_to_gene_homology_association_predicate = Slot(uri=RDF.predicate, name=\"gene to gene homology association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_to_gene_homology_association_predicate, domain=GeneToGeneHomologyAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_to_gene_homology_association_predicate, domain=GeneToGeneHomologyAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_to_gene_homology_association_object = Slot(uri=RDF.object, name=\"gene to gene homology association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.gene_to_gene_homology_association_object, domain=GeneToGeneHomologyAssociation, range=Union[dict, GeneOrGeneProduct])\n", @@ -15601,16 +18274,52 @@ " model_uri=DIST.gene_to_gene_family_association_object, domain=GeneToGeneFamilyAssociation, range=Union[str, GeneFamilyId])\n", "\n", "slots.gene_to_gene_family_association_predicate = Slot(uri=RDF.predicate, name=\"gene to gene family association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_to_gene_family_association_predicate, domain=GeneToGeneFamilyAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_to_gene_family_association_predicate, domain=GeneToGeneFamilyAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.gene_family_to_gene_or_gene_product_or_gene_family_association_subject = Slot(uri=RDF.subject, name=\"gene family to gene or gene product or gene family association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.gene_family_to_gene_or_gene_product_or_gene_family_association_subject, domain=GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation, range=Union[str, GeneFamilyId])\n", + "\n", + "slots.gene_family_to_gene_or_gene_product_or_gene_family_association_object = Slot(uri=RDF.object, name=\"gene family to gene or gene product or gene family association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.gene_family_to_gene_or_gene_product_or_gene_family_association_object, domain=GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation, range=Union[dict, GeneOrGeneProduct])\n", + "\n", + "slots.gene_family_to_gene_or_gene_product_or_gene_family_association_predicate = Slot(uri=RDF.predicate, name=\"gene family to gene or gene product or gene family association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.gene_family_to_gene_or_gene_product_or_gene_family_association_predicate, domain=GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.gene_or_gene_product_or_gene_family_to_biological_process_or_activity_association_subject = Slot(uri=RDF.subject, name=\"gene or gene product or gene family to biological process or activity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.gene_or_gene_product_or_gene_family_to_biological_process_or_activity_association_subject, domain=GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation, range=Union[dict, GeneOrGeneProductOrGeneFamily])\n", + "\n", + "slots.gene_or_gene_product_or_gene_family_to_biological_process_or_activity_association_object = Slot(uri=RDF.object, name=\"gene or gene product or gene family to biological process or activity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.gene_or_gene_product_or_gene_family_to_biological_process_or_activity_association_object, domain=GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation, range=Union[str, BiologicalProcessOrActivityId])\n", + "\n", + "slots.gene_or_gene_product_or_gene_family_to_biological_process_or_activity_association_predicate = Slot(uri=RDF.predicate, name=\"gene or gene product or gene family to biological process or activity association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.gene_or_gene_product_or_gene_family_to_biological_process_or_activity_association_predicate, domain=GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.biological_process_or_activity_to_gene_or_gene_product_or_gene_family_association_subject = Slot(uri=RDF.subject, name=\"biological process or activity to gene or gene product or gene family association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.biological_process_or_activity_to_gene_or_gene_product_or_gene_family_association_subject, domain=BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation, range=Union[str, BiologicalProcessOrActivityId])\n", + "\n", + "slots.biological_process_or_activity_to_gene_or_gene_product_or_gene_family_association_object = Slot(uri=RDF.object, name=\"biological process or activity to gene or gene product or gene family association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.biological_process_or_activity_to_gene_or_gene_product_or_gene_family_association_object, domain=BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation, range=Union[dict, GeneOrGeneProductOrGeneFamily])\n", + "\n", + "slots.biological_process_or_activity_to_gene_or_gene_product_or_gene_family_association_predicate = Slot(uri=RDF.predicate, name=\"biological process or activity to gene or gene product or gene family association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.biological_process_or_activity_to_gene_or_gene_product_or_gene_family_association_predicate, domain=BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.biological_process_or_activity_to_biological_process_or_activity_association_subject = Slot(uri=RDF.subject, name=\"biological process or activity to biological process or activity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.biological_process_or_activity_to_biological_process_or_activity_association_subject, domain=BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation, range=Union[str, BiologicalProcessOrActivityId])\n", + "\n", + "slots.biological_process_or_activity_to_biological_process_or_activity_association_object = Slot(uri=RDF.object, name=\"biological process or activity to biological process or activity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.biological_process_or_activity_to_biological_process_or_activity_association_object, domain=BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation, range=Union[str, BiologicalProcessOrActivityId])\n", + "\n", + "slots.biological_process_or_activity_to_biological_process_or_activity_association_predicate = Slot(uri=RDF.predicate, name=\"biological process or activity to biological process or activity association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.biological_process_or_activity_to_biological_process_or_activity_association_predicate, domain=BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_expression_mixin_quantifier_qualifier = Slot(uri=BIOLINK.quantifier_qualifier, name=\"gene expression mixin_quantifier qualifier\", curie=BIOLINK.curie('quantifier_qualifier'),\n", " model_uri=DIST.gene_expression_mixin_quantifier_qualifier, domain=None, range=Optional[Union[str, OntologyClassId]])\n", "\n", "slots.gene_to_gene_coexpression_association_predicate = Slot(uri=RDF.predicate, name=\"gene to gene coexpression association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_to_gene_coexpression_association_predicate, domain=GeneToGeneCoexpressionAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_to_gene_coexpression_association_predicate, domain=GeneToGeneCoexpressionAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.pairwise_gene_to_gene_interaction_predicate = Slot(uri=RDF.predicate, name=\"pairwise gene to gene interaction_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.pairwise_gene_to_gene_interaction_predicate, domain=PairwiseGeneToGeneInteraction, range=Union[str, PredicateType])\n", + " model_uri=DIST.pairwise_gene_to_gene_interaction_predicate, domain=PairwiseGeneToGeneInteraction, range=Union[str, URIorCURIE])\n", "\n", "slots.pairwise_molecular_interaction_subject = Slot(uri=RDF.subject, name=\"pairwise molecular interaction_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.pairwise_molecular_interaction_subject, domain=PairwiseMolecularInteraction, range=Union[str, MolecularEntityId])\n", @@ -15619,7 +18328,7 @@ " model_uri=DIST.pairwise_molecular_interaction_id, domain=PairwiseMolecularInteraction, range=Union[str, PairwiseMolecularInteractionId])\n", "\n", "slots.pairwise_molecular_interaction_predicate = Slot(uri=RDF.predicate, name=\"pairwise molecular interaction_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.pairwise_molecular_interaction_predicate, domain=PairwiseMolecularInteraction, range=Union[str, PredicateType])\n", + " model_uri=DIST.pairwise_molecular_interaction_predicate, domain=PairwiseMolecularInteraction, range=Union[str, URIorCURIE])\n", "\n", "slots.pairwise_molecular_interaction_object = Slot(uri=RDF.object, name=\"pairwise molecular interaction_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.pairwise_molecular_interaction_object, domain=PairwiseMolecularInteraction, range=Union[str, MolecularEntityId])\n", @@ -15642,8 +18351,8 @@ "slots.case_to_entity_association_mixin_subject = Slot(uri=RDF.subject, name=\"case to entity association mixin_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.case_to_entity_association_mixin_subject, domain=None, range=Union[str, CaseId])\n", "\n", - "slots.chemical_to_chemical_association_object = Slot(uri=RDF.object, name=\"chemical to chemical association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.chemical_to_chemical_association_object, domain=ChemicalToChemicalAssociation, range=Union[str, ChemicalEntityId])\n", + "slots.chemical_entity_to_chemical_entity_association_object = Slot(uri=RDF.object, name=\"chemical entity to chemical entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.chemical_entity_to_chemical_entity_association_object, domain=ChemicalEntityToChemicalEntityAssociation, range=Union[str, ChemicalEntityId])\n", "\n", "slots.reaction_to_participant_association_subject = Slot(uri=RDF.subject, name=\"reaction to participant association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.reaction_to_participant_association_subject, domain=ReactionToParticipantAssociation, range=Union[str, MolecularEntityId])\n", @@ -15651,26 +18360,29 @@ "slots.reaction_to_catalyst_association_object = Slot(uri=RDF.object, name=\"reaction to catalyst association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.reaction_to_catalyst_association_object, domain=ReactionToCatalystAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", - "slots.chemical_to_chemical_derivation_association_subject = Slot(uri=RDF.subject, name=\"chemical to chemical derivation association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.chemical_to_chemical_derivation_association_subject, domain=ChemicalToChemicalDerivationAssociation, range=Union[str, ChemicalEntityId])\n", + "slots.chemical_entity_to_chemical_derivation_association_subject = Slot(uri=RDF.subject, name=\"chemical entity to chemical derivation association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.chemical_entity_to_chemical_derivation_association_subject, domain=ChemicalEntityToChemicalDerivationAssociation, range=Union[str, ChemicalEntityId])\n", "\n", - "slots.chemical_to_chemical_derivation_association_object = Slot(uri=RDF.object, name=\"chemical to chemical derivation association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.chemical_to_chemical_derivation_association_object, domain=ChemicalToChemicalDerivationAssociation, range=Union[str, ChemicalEntityId])\n", + "slots.chemical_entity_to_chemical_derivation_association_object = Slot(uri=RDF.object, name=\"chemical entity to chemical derivation association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.chemical_entity_to_chemical_derivation_association_object, domain=ChemicalEntityToChemicalDerivationAssociation, range=Union[str, ChemicalEntityId])\n", "\n", - "slots.chemical_to_chemical_derivation_association_predicate = Slot(uri=RDF.predicate, name=\"chemical to chemical derivation association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_to_chemical_derivation_association_predicate, domain=ChemicalToChemicalDerivationAssociation, range=Union[str, PredicateType])\n", + "slots.chemical_entity_to_chemical_derivation_association_predicate = Slot(uri=RDF.predicate, name=\"chemical entity to chemical derivation association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.chemical_entity_to_chemical_derivation_association_predicate, domain=ChemicalEntityToChemicalDerivationAssociation, range=Union[str, URIorCURIE])\n", "\n", - "slots.chemical_to_chemical_derivation_association_catalyst_qualifier = Slot(uri=BIOLINK.catalyst_qualifier, name=\"chemical to chemical derivation association_catalyst qualifier\", curie=BIOLINK.curie('catalyst_qualifier'),\n", - " model_uri=DIST.chemical_to_chemical_derivation_association_catalyst_qualifier, domain=ChemicalToChemicalDerivationAssociation, range=Optional[Union[Union[dict, MacromolecularMachineMixin], List[Union[dict, MacromolecularMachineMixin]]]])\n", + "slots.chemical_entity_to_chemical_derivation_association_catalyst_qualifier = Slot(uri=BIOLINK.catalyst_qualifier, name=\"chemical entity to chemical derivation association_catalyst qualifier\", curie=BIOLINK.curie('catalyst_qualifier'),\n", + " model_uri=DIST.chemical_entity_to_chemical_derivation_association_catalyst_qualifier, domain=ChemicalEntityToChemicalDerivationAssociation, range=Optional[Union[Union[dict, MacromolecularMachineMixin], list[Union[dict, MacromolecularMachineMixin]]]])\n", "\n", - "slots.chemical_to_disease_or_phenotypic_feature_association_object = Slot(uri=RDF.object, name=\"chemical to disease or phenotypic feature association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.chemical_to_disease_or_phenotypic_feature_association_object, domain=ChemicalToDiseaseOrPhenotypicFeatureAssociation, range=Union[str, DiseaseOrPhenotypicFeatureId])\n", + "slots.chemical_entity_to_disease_or_phenotypic_feature_association_object = Slot(uri=RDF.object, name=\"chemical entity to disease or phenotypic feature association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.chemical_entity_to_disease_or_phenotypic_feature_association_object, domain=ChemicalEntityToDiseaseOrPhenotypicFeatureAssociation, range=Union[str, DiseaseOrPhenotypicFeatureId])\n", "\n", "slots.chemical_or_drug_or_treatment_to_disease_or_phenotypic_feature_association_predicate = Slot(uri=RDF.predicate, name=\"chemical or drug or treatment to disease or phenotypic feature association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_or_drug_or_treatment_to_disease_or_phenotypic_feature_association_predicate, domain=ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.chemical_or_drug_or_treatment_to_disease_or_phenotypic_feature_association_predicate, domain=ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation, range=Union[str, URIorCURIE])\n", "\n", - "slots.chemical_or_drug_or_treatment_side_effect_disease_or_phenotypic_feature_association_predicate = Slot(uri=RDF.predicate, name=\"chemical or drug or treatment side effect disease or phenotypic feature association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_or_drug_or_treatment_side_effect_disease_or_phenotypic_feature_association_predicate, domain=ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation, range=Union[str, PredicateType])\n", + "slots.chemical_or_drug_or_treatment_adverse_event_association_predicate = Slot(uri=RDF.predicate, name=\"chemical or drug or treatment adverse event association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.chemical_or_drug_or_treatment_adverse_event_association_predicate, domain=ChemicalOrDrugOrTreatmentAdverseEventAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.chemical_or_drug_or_treatment_side_effect_association_predicate = Slot(uri=RDF.predicate, name=\"chemical or drug or treatment side effect association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.chemical_or_drug_or_treatment_side_effect_association_predicate, domain=ChemicalOrDrugOrTreatmentSideEffectAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_to_pathway_association_subject = Slot(uri=RDF.subject, name=\"gene to pathway association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_to_pathway_association_subject, domain=GeneToPathwayAssociation, range=Union[dict, GeneOrGeneProduct])\n", @@ -15685,25 +18397,34 @@ " model_uri=DIST.molecular_activity_to_pathway_association_object, domain=MolecularActivityToPathwayAssociation, range=Union[str, PathwayId])\n", "\n", "slots.molecular_activity_to_pathway_association_predicate = Slot(uri=RDF.predicate, name=\"molecular activity to pathway association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.molecular_activity_to_pathway_association_predicate, domain=MolecularActivityToPathwayAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.molecular_activity_to_pathway_association_predicate, domain=MolecularActivityToPathwayAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.chemical_entity_to_pathway_association_subject = Slot(uri=RDF.subject, name=\"chemical entity to pathway association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.chemical_entity_to_pathway_association_subject, domain=ChemicalEntityToPathwayAssociation, range=Union[str, ChemicalEntityId])\n", + "\n", + "slots.chemical_entity_to_pathway_association_object = Slot(uri=RDF.object, name=\"chemical entity to pathway association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.chemical_entity_to_pathway_association_object, domain=ChemicalEntityToPathwayAssociation, range=Union[str, PathwayId])\n", + "\n", + "slots.chemical_entity_to_biological_process_association_subject = Slot(uri=RDF.subject, name=\"chemical entity to biological process association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.chemical_entity_to_biological_process_association_subject, domain=ChemicalEntityToBiologicalProcessAssociation, range=Union[str, ChemicalEntityId])\n", "\n", - "slots.chemical_to_pathway_association_subject = Slot(uri=RDF.subject, name=\"chemical to pathway association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.chemical_to_pathway_association_subject, domain=ChemicalToPathwayAssociation, range=Union[str, ChemicalEntityId])\n", + "slots.chemical_entity_to_biological_process_association_object = Slot(uri=RDF.object, name=\"chemical entity to biological process association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.chemical_entity_to_biological_process_association_object, domain=ChemicalEntityToBiologicalProcessAssociation, range=Union[str, BiologicalProcessId])\n", "\n", - "slots.chemical_to_pathway_association_object = Slot(uri=RDF.object, name=\"chemical to pathway association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.chemical_to_pathway_association_object, domain=ChemicalToPathwayAssociation, range=Union[str, PathwayId])\n", + "slots.chemical_entity_to_biological_process_association_predicate = Slot(uri=RDF.predicate, name=\"chemical entity to biological process association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.chemical_entity_to_biological_process_association_predicate, domain=ChemicalEntityToBiologicalProcessAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.named_thing_associated_with_likelihood_of_named_thing_association_predicate = Slot(uri=RDF.predicate, name=\"named thing associated with likelihood of named thing association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_predicate, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_predicate, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.named_thing_associated_with_likelihood_of_named_thing_association_subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"named thing associated with likelihood of named thing association_subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", - " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_subject_aspect_qualifier, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Optional[str])\n", + " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_subject_aspect_qualifier, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", "slots.named_thing_associated_with_likelihood_of_named_thing_association_subject_context_qualifier = Slot(uri=BIOLINK.subject_context_qualifier, name=\"named thing associated with likelihood of named thing association_subject context qualifier\", curie=BIOLINK.curie('subject_context_qualifier'),\n", " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_subject_context_qualifier, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Optional[Union[str, OntologyClassId]])\n", "\n", "slots.named_thing_associated_with_likelihood_of_named_thing_association_object_aspect_qualifier = Slot(uri=BIOLINK.object_aspect_qualifier, name=\"named thing associated with likelihood of named thing association_object aspect qualifier\", curie=BIOLINK.curie('object_aspect_qualifier'),\n", - " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_object_aspect_qualifier, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Optional[str])\n", + " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_object_aspect_qualifier, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", "slots.named_thing_associated_with_likelihood_of_named_thing_association_object_context_qualifier = Slot(uri=BIOLINK.object_context_qualifier, name=\"named thing associated with likelihood of named thing association_object context qualifier\", curie=BIOLINK.curie('object_context_qualifier'),\n", " model_uri=DIST.named_thing_associated_with_likelihood_of_named_thing_association_object_context_qualifier, domain=NamedThingAssociatedWithLikelihoodOfNamedThingAssociation, range=Optional[Union[str, OntologyClassId]])\n", @@ -15715,7 +18436,7 @@ " model_uri=DIST.chemical_gene_interaction_association_object, domain=ChemicalGeneInteractionAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", "slots.chemical_gene_interaction_association_predicate = Slot(uri=RDF.predicate, name=\"chemical gene interaction association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_gene_interaction_association_predicate, domain=ChemicalGeneInteractionAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.chemical_gene_interaction_association_predicate, domain=ChemicalGeneInteractionAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.chemical_gene_interaction_association_subject_form_or_variant_qualifier = Slot(uri=BIOLINK.subject_form_or_variant_qualifier, name=\"chemical gene interaction association_subject form or variant qualifier\", curie=BIOLINK.curie('subject_form_or_variant_qualifier'),\n", " model_uri=DIST.chemical_gene_interaction_association_subject_form_or_variant_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", @@ -15729,6 +18450,12 @@ "slots.chemical_gene_interaction_association_subject_context_qualifier = Slot(uri=BIOLINK.subject_context_qualifier, name=\"chemical gene interaction association_subject context qualifier\", curie=BIOLINK.curie('subject_context_qualifier'),\n", " model_uri=DIST.chemical_gene_interaction_association_subject_context_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", "\n", + "slots.chemical_gene_interaction_association_object_direction_qualifier = Slot(uri=BIOLINK.object_direction_qualifier, name=\"chemical gene interaction association_object direction qualifier\", curie=BIOLINK.curie('object_direction_qualifier'),\n", + " model_uri=DIST.chemical_gene_interaction_association_object_direction_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", + "\n", + "slots.chemical_gene_interaction_association_object_aspect_qualifier = Slot(uri=BIOLINK.object_aspect_qualifier, name=\"chemical gene interaction association_object aspect qualifier\", curie=BIOLINK.curie('object_aspect_qualifier'),\n", + " model_uri=DIST.chemical_gene_interaction_association_object_aspect_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", + "\n", "slots.chemical_gene_interaction_association_object_form_or_variant_qualifier = Slot(uri=BIOLINK.object_form_or_variant_qualifier, name=\"chemical gene interaction association_object form or variant qualifier\", curie=BIOLINK.curie('object_form_or_variant_qualifier'),\n", " model_uri=DIST.chemical_gene_interaction_association_object_form_or_variant_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", "\n", @@ -15739,16 +18466,28 @@ " model_uri=DIST.chemical_gene_interaction_association_object_context_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", "\n", "slots.chemical_gene_interaction_association_anatomical_context_qualifier = Slot(uri=BIOLINK.anatomical_context_qualifier, name=\"chemical gene interaction association_anatomical context qualifier\", curie=BIOLINK.curie('anatomical_context_qualifier'),\n", - " model_uri=DIST.chemical_gene_interaction_association_anatomical_context_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + " model_uri=DIST.chemical_gene_interaction_association_anatomical_context_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]])\n", + "\n", + "slots.chemical_gene_interaction_association_causal_mechanism_qualifier = Slot(uri=BIOLINK.causal_mechanism_qualifier, name=\"chemical gene interaction association_causal mechanism qualifier\", curie=BIOLINK.curie('causal_mechanism_qualifier'),\n", + " model_uri=DIST.chemical_gene_interaction_association_causal_mechanism_qualifier, domain=ChemicalGeneInteractionAssociation, range=Optional[Union[str, \"CausalMechanismQualifierEnum\"]])\n", + "\n", + "slots.macromolecular_machine_has_substrate_association_subject = Slot(uri=RDF.subject, name=\"macromolecular machine has substrate association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.macromolecular_machine_has_substrate_association_subject, domain=MacromolecularMachineHasSubstrateAssociation, range=Union[dict, MacromolecularMachineMixin])\n", + "\n", + "slots.macromolecular_machine_has_substrate_association_predicate = Slot(uri=RDF.predicate, name=\"macromolecular machine has substrate association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.macromolecular_machine_has_substrate_association_predicate, domain=MacromolecularMachineHasSubstrateAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.macromolecular_machine_has_substrate_association_object = Slot(uri=RDF.object, name=\"macromolecular machine has substrate association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.macromolecular_machine_has_substrate_association_object, domain=MacromolecularMachineHasSubstrateAssociation, range=Union[dict, ChemicalEntityOrProteinOrPolypeptide])\n", "\n", "slots.gene_regulates_gene_association_subject = Slot(uri=RDF.subject, name=\"gene regulates gene association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.gene_regulates_gene_association_subject, domain=GeneRegulatesGeneAssociation, range=Union[dict, GeneOrGeneProduct])\n", + " model_uri=DIST.gene_regulates_gene_association_subject, domain=GeneRegulatesGeneAssociation, range=Union[dict, ChemicalEntityOrGeneOrGeneProduct])\n", "\n", "slots.gene_regulates_gene_association_predicate = Slot(uri=RDF.predicate, name=\"gene regulates gene association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_regulates_gene_association_predicate, domain=GeneRegulatesGeneAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_regulates_gene_association_predicate, domain=GeneRegulatesGeneAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_regulates_gene_association_object = Slot(uri=RDF.object, name=\"gene regulates gene association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.gene_regulates_gene_association_object, domain=GeneRegulatesGeneAssociation, range=Union[dict, GeneOrGeneProduct])\n", + " model_uri=DIST.gene_regulates_gene_association_object, domain=GeneRegulatesGeneAssociation, range=Union[dict, ChemicalEntityOrGeneOrGeneProduct])\n", "\n", "slots.gene_regulates_gene_association_object_aspect_qualifier = Slot(uri=BIOLINK.object_aspect_qualifier, name=\"gene regulates gene association_object aspect qualifier\", curie=BIOLINK.curie('object_aspect_qualifier'),\n", " model_uri=DIST.gene_regulates_gene_association_object_aspect_qualifier, domain=GeneRegulatesGeneAssociation, range=Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"])\n", @@ -15757,73 +18496,73 @@ " model_uri=DIST.gene_regulates_gene_association_object_direction_qualifier, domain=GeneRegulatesGeneAssociation, range=Union[str, \"DirectionQualifierEnum\"])\n", "\n", "slots.gene_regulates_gene_association_qualified_predicate = Slot(uri=BIOLINK.qualified_predicate, name=\"gene regulates gene association_qualified predicate\", curie=BIOLINK.curie('qualified_predicate'),\n", - " model_uri=DIST.gene_regulates_gene_association_qualified_predicate, domain=GeneRegulatesGeneAssociation, range=str)\n", + " model_uri=DIST.gene_regulates_gene_association_qualified_predicate, domain=GeneRegulatesGeneAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.process_regulates_process_association_subject = Slot(uri=RDF.subject, name=\"process regulates process association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.process_regulates_process_association_subject, domain=ProcessRegulatesProcessAssociation, range=Union[str, BiologicalProcessId])\n", "\n", "slots.process_regulates_process_association_predicate = Slot(uri=RDF.predicate, name=\"process regulates process association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.process_regulates_process_association_predicate, domain=ProcessRegulatesProcessAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.process_regulates_process_association_predicate, domain=ProcessRegulatesProcessAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.process_regulates_process_association_object = Slot(uri=RDF.object, name=\"process regulates process association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.process_regulates_process_association_object, domain=ProcessRegulatesProcessAssociation, range=Union[str, BiologicalProcessId])\n", "\n", - "slots.chemical_affects_gene_association_subject = Slot(uri=RDF.subject, name=\"chemical affects gene association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject, domain=ChemicalAffectsGeneAssociation, range=Union[str, ChemicalEntityId])\n", + "slots.chemical_affects_biological_entity_association_subject = Slot(uri=RDF.subject, name=\"chemical affects biological entity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject, domain=ChemicalAffectsBiologicalEntityAssociation, range=Union[str, ChemicalEntityId])\n", "\n", - "slots.chemical_affects_gene_association_subject_form_or_variant_qualifier = Slot(uri=BIOLINK.subject_form_or_variant_qualifier, name=\"chemical affects gene association_subject form or variant qualifier\", curie=BIOLINK.curie('subject_form_or_variant_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject_form_or_variant_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_subject_form_or_variant_qualifier = Slot(uri=BIOLINK.subject_form_or_variant_qualifier, name=\"chemical affects biological entity association_subject form or variant qualifier\", curie=BIOLINK.curie('subject_form_or_variant_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject_form_or_variant_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_subject_part_qualifier = Slot(uri=BIOLINK.subject_part_qualifier, name=\"chemical affects gene association_subject part qualifier\", curie=BIOLINK.curie('subject_part_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject_part_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_subject_part_qualifier = Slot(uri=BIOLINK.subject_part_qualifier, name=\"chemical affects biological entity association_subject part qualifier\", curie=BIOLINK.curie('subject_part_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject_part_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_subject_derivative_qualifier = Slot(uri=BIOLINK.subject_derivative_qualifier, name=\"chemical affects gene association_subject derivative qualifier\", curie=BIOLINK.curie('subject_derivative_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject_derivative_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"ChemicalEntityDerivativeEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_subject_derivative_qualifier = Slot(uri=BIOLINK.subject_derivative_qualifier, name=\"chemical affects biological entity association_subject derivative qualifier\", curie=BIOLINK.curie('subject_derivative_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject_derivative_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"ChemicalEntityDerivativeEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"chemical affects gene association_subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject_aspect_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"chemical affects biological entity association_subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject_aspect_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_subject_context_qualifier = Slot(uri=BIOLINK.subject_context_qualifier, name=\"chemical affects gene association_subject context qualifier\", curie=BIOLINK.curie('subject_context_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject_context_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + "slots.chemical_affects_biological_entity_association_subject_context_qualifier = Slot(uri=BIOLINK.subject_context_qualifier, name=\"chemical affects biological entity association_subject context qualifier\", curie=BIOLINK.curie('subject_context_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject_context_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", "\n", - "slots.chemical_affects_gene_association_subject_direction_qualifier = Slot(uri=BIOLINK.subject_direction_qualifier, name=\"chemical affects gene association_subject direction qualifier\", curie=BIOLINK.curie('subject_direction_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_subject_direction_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_subject_direction_qualifier = Slot(uri=BIOLINK.subject_direction_qualifier, name=\"chemical affects biological entity association_subject direction qualifier\", curie=BIOLINK.curie('subject_direction_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_subject_direction_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_predicate = Slot(uri=RDF.predicate, name=\"chemical affects gene association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_affects_gene_association_predicate, domain=ChemicalAffectsGeneAssociation, range=Union[str, PredicateType])\n", + "slots.chemical_affects_biological_entity_association_predicate = Slot(uri=RDF.predicate, name=\"chemical affects biological entity association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_predicate, domain=ChemicalAffectsBiologicalEntityAssociation, range=Union[str, URIorCURIE])\n", "\n", - "slots.chemical_affects_gene_association_qualified_predicate = Slot(uri=BIOLINK.qualified_predicate, name=\"chemical affects gene association_qualified predicate\", curie=BIOLINK.curie('qualified_predicate'),\n", - " model_uri=DIST.chemical_affects_gene_association_qualified_predicate, domain=ChemicalAffectsGeneAssociation, range=Optional[str])\n", + "slots.chemical_affects_biological_entity_association_qualified_predicate = Slot(uri=BIOLINK.qualified_predicate, name=\"chemical affects biological entity association_qualified predicate\", curie=BIOLINK.curie('qualified_predicate'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_qualified_predicate, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, URIorCURIE]])\n", "\n", - "slots.chemical_affects_gene_association_object = Slot(uri=RDF.object, name=\"chemical affects gene association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.chemical_affects_gene_association_object, domain=ChemicalAffectsGeneAssociation, range=Union[dict, GeneOrGeneProduct])\n", + "slots.chemical_affects_biological_entity_association_object = Slot(uri=RDF.object, name=\"chemical affects biological entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_object, domain=ChemicalAffectsBiologicalEntityAssociation, range=Union[str, BiologicalEntityId])\n", "\n", - "slots.chemical_affects_gene_association_object_form_or_variant_qualifier = Slot(uri=BIOLINK.object_form_or_variant_qualifier, name=\"chemical affects gene association_object form or variant qualifier\", curie=BIOLINK.curie('object_form_or_variant_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_object_form_or_variant_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_object_form_or_variant_qualifier = Slot(uri=BIOLINK.object_form_or_variant_qualifier, name=\"chemical affects biological entity association_object form or variant qualifier\", curie=BIOLINK.curie('object_form_or_variant_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_object_form_or_variant_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_object_part_qualifier = Slot(uri=BIOLINK.object_part_qualifier, name=\"chemical affects gene association_object part qualifier\", curie=BIOLINK.curie('object_part_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_object_part_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_object_part_qualifier = Slot(uri=BIOLINK.object_part_qualifier, name=\"chemical affects biological entity association_object part qualifier\", curie=BIOLINK.curie('object_part_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_object_part_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalPartQualifierEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_object_aspect_qualifier = Slot(uri=BIOLINK.object_aspect_qualifier, name=\"chemical affects gene association_object aspect qualifier\", curie=BIOLINK.curie('object_aspect_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_object_aspect_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_object_aspect_qualifier = Slot(uri=BIOLINK.object_aspect_qualifier, name=\"chemical affects biological entity association_object aspect qualifier\", curie=BIOLINK.curie('object_aspect_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_object_aspect_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_object_context_qualifier = Slot(uri=BIOLINK.object_context_qualifier, name=\"chemical affects gene association_object context qualifier\", curie=BIOLINK.curie('object_context_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_object_context_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + "slots.chemical_affects_biological_entity_association_object_context_qualifier = Slot(uri=BIOLINK.object_context_qualifier, name=\"chemical affects biological entity association_object context qualifier\", curie=BIOLINK.curie('object_context_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_object_context_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", "\n", - "slots.chemical_affects_gene_association_object_direction_qualifier = Slot(uri=BIOLINK.object_direction_qualifier, name=\"chemical affects gene association_object direction qualifier\", curie=BIOLINK.curie('object_direction_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_object_direction_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_object_direction_qualifier = Slot(uri=BIOLINK.object_direction_qualifier, name=\"chemical affects biological entity association_object direction qualifier\", curie=BIOLINK.curie('object_direction_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_object_direction_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_causal_mechanism_qualifier = Slot(uri=BIOLINK.causal_mechanism_qualifier, name=\"chemical affects gene association_causal mechanism qualifier\", curie=BIOLINK.curie('causal_mechanism_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_causal_mechanism_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, \"CausalMechanismQualifierEnum\"]])\n", + "slots.chemical_affects_biological_entity_association_causal_mechanism_qualifier = Slot(uri=BIOLINK.causal_mechanism_qualifier, name=\"chemical affects biological entity association_causal mechanism qualifier\", curie=BIOLINK.curie('causal_mechanism_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_causal_mechanism_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, \"CausalMechanismQualifierEnum\"]])\n", "\n", - "slots.chemical_affects_gene_association_anatomical_context_qualifier = Slot(uri=BIOLINK.anatomical_context_qualifier, name=\"chemical affects gene association_anatomical context qualifier\", curie=BIOLINK.curie('anatomical_context_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_anatomical_context_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + "slots.chemical_affects_biological_entity_association_anatomical_context_qualifier = Slot(uri=BIOLINK.anatomical_context_qualifier, name=\"chemical affects biological entity association_anatomical context qualifier\", curie=BIOLINK.curie('anatomical_context_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_anatomical_context_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]])\n", "\n", - "slots.chemical_affects_gene_association_species_context_qualifier = Slot(uri=BIOLINK.species_context_qualifier, name=\"chemical affects gene association_species context qualifier\", curie=BIOLINK.curie('species_context_qualifier'),\n", - " model_uri=DIST.chemical_affects_gene_association_species_context_qualifier, domain=ChemicalAffectsGeneAssociation, range=Optional[Union[str, OrganismTaxonId]])\n", + "slots.chemical_affects_biological_entity_association_species_context_qualifier = Slot(uri=BIOLINK.species_context_qualifier, name=\"chemical affects biological entity association_species context qualifier\", curie=BIOLINK.curie('species_context_qualifier'),\n", + " model_uri=DIST.chemical_affects_biological_entity_association_species_context_qualifier, domain=ChemicalAffectsBiologicalEntityAssociation, range=Optional[Union[str, OrganismTaxonId]])\n", "\n", "slots.gene_affects_chemical_association_subject = Slot(uri=RDF.subject, name=\"gene affects chemical association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.gene_affects_chemical_association_subject, domain=GeneAffectsChemicalAssociation, range=Union[dict, GeneOrGeneProduct])\n", + " model_uri=DIST.gene_affects_chemical_association_subject, domain=GeneAffectsChemicalAssociation, range=Union[dict, ChemicalEntityOrGeneOrGeneProduct])\n", "\n", "slots.gene_affects_chemical_association_subject_form_or_variant_qualifier = Slot(uri=BIOLINK.subject_form_or_variant_qualifier, name=\"gene affects chemical association_subject form or variant qualifier\", curie=BIOLINK.curie('subject_form_or_variant_qualifier'),\n", " model_uri=DIST.gene_affects_chemical_association_subject_form_or_variant_qualifier, domain=GeneAffectsChemicalAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", @@ -15841,10 +18580,10 @@ " model_uri=DIST.gene_affects_chemical_association_subject_direction_qualifier, domain=GeneAffectsChemicalAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", "\n", "slots.gene_affects_chemical_association_predicate = Slot(uri=RDF.predicate, name=\"gene affects chemical association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_affects_chemical_association_predicate, domain=GeneAffectsChemicalAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_affects_chemical_association_predicate, domain=GeneAffectsChemicalAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_affects_chemical_association_qualified_predicate = Slot(uri=BIOLINK.qualified_predicate, name=\"gene affects chemical association_qualified predicate\", curie=BIOLINK.curie('qualified_predicate'),\n", - " model_uri=DIST.gene_affects_chemical_association_qualified_predicate, domain=GeneAffectsChemicalAssociation, range=Optional[str])\n", + " model_uri=DIST.gene_affects_chemical_association_qualified_predicate, domain=GeneAffectsChemicalAssociation, range=Optional[Union[str, URIorCURIE]])\n", "\n", "slots.gene_affects_chemical_association_object = Slot(uri=RDF.object, name=\"gene affects chemical association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.gene_affects_chemical_association_object, domain=GeneAffectsChemicalAssociation, range=Union[str, ChemicalEntityId])\n", @@ -15871,7 +18610,7 @@ " model_uri=DIST.gene_affects_chemical_association_causal_mechanism_qualifier, domain=GeneAffectsChemicalAssociation, range=Optional[Union[str, \"CausalMechanismQualifierEnum\"]])\n", "\n", "slots.gene_affects_chemical_association_anatomical_context_qualifier = Slot(uri=BIOLINK.anatomical_context_qualifier, name=\"gene affects chemical association_anatomical context qualifier\", curie=BIOLINK.curie('anatomical_context_qualifier'),\n", - " model_uri=DIST.gene_affects_chemical_association_anatomical_context_qualifier, domain=GeneAffectsChemicalAssociation, range=Optional[Union[str, AnatomicalEntityId]])\n", + " model_uri=DIST.gene_affects_chemical_association_anatomical_context_qualifier, domain=GeneAffectsChemicalAssociation, range=Optional[Union[Union[str, AnatomicalEntityId], list[Union[str, AnatomicalEntityId]]]])\n", "\n", "slots.gene_affects_chemical_association_species_context_qualifier = Slot(uri=BIOLINK.species_context_qualifier, name=\"gene affects chemical association_species context qualifier\", curie=BIOLINK.curie('species_context_qualifier'),\n", " model_uri=DIST.gene_affects_chemical_association_species_context_qualifier, domain=GeneAffectsChemicalAssociation, range=Optional[Union[str, OrganismTaxonId]])\n", @@ -15889,7 +18628,7 @@ " model_uri=DIST.material_sample_derivation_association_object, domain=MaterialSampleDerivationAssociation, range=Union[str, NamedThingId])\n", "\n", "slots.material_sample_derivation_association_predicate = Slot(uri=RDF.predicate, name=\"material sample derivation association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.material_sample_derivation_association_predicate, domain=MaterialSampleDerivationAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.material_sample_derivation_association_predicate, domain=MaterialSampleDerivationAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.disease_to_entity_association_mixin_subject = Slot(uri=RDF.subject, name=\"disease to entity association mixin_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.disease_to_entity_association_mixin_subject, domain=None, range=Union[str, DiseaseId])\n", @@ -15913,7 +18652,7 @@ " model_uri=DIST.information_content_entity_to_named_thing_association_object, domain=InformationContentEntityToNamedThingAssociation, range=Union[str, NamedThingId])\n", "\n", "slots.information_content_entity_to_named_thing_association_predicate = Slot(uri=RDF.predicate, name=\"information content entity to named thing association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.information_content_entity_to_named_thing_association_predicate, domain=InformationContentEntityToNamedThingAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.information_content_entity_to_named_thing_association_predicate, domain=InformationContentEntityToNamedThingAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.entity_to_disease_association_mixin_object = Slot(uri=RDF.object, name=\"entity to disease association mixin_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.entity_to_disease_association_mixin_object, domain=None, range=Union[str, DiseaseId])\n", @@ -15925,7 +18664,7 @@ " model_uri=DIST.disease_or_phenotypic_feature_to_location_association_object, domain=DiseaseOrPhenotypicFeatureToLocationAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", "slots.disease_or_phenotypic_feature_to_genetic_inheritance_association_predicate = Slot(uri=RDF.predicate, name=\"disease or phenotypic feature to genetic inheritance association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.disease_or_phenotypic_feature_to_genetic_inheritance_association_predicate, domain=DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.disease_or_phenotypic_feature_to_genetic_inheritance_association_predicate, domain=DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.disease_or_phenotypic_feature_to_genetic_inheritance_association_object = Slot(uri=RDF.object, name=\"disease or phenotypic feature to genetic inheritance association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.disease_or_phenotypic_feature_to_genetic_inheritance_association_object, domain=DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation, range=Union[str, GeneticInheritanceId])\n", @@ -15937,7 +18676,7 @@ " model_uri=DIST.genotype_to_entity_association_mixin_subject, domain=None, range=Union[str, GenotypeId])\n", "\n", "slots.genotype_to_phenotypic_feature_association_predicate = Slot(uri=RDF.predicate, name=\"genotype to phenotypic feature association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.genotype_to_phenotypic_feature_association_predicate, domain=GenotypeToPhenotypicFeatureAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.genotype_to_phenotypic_feature_association_predicate, domain=GenotypeToPhenotypicFeatureAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.genotype_to_phenotypic_feature_association_subject = Slot(uri=RDF.subject, name=\"genotype to phenotypic feature association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.genotype_to_phenotypic_feature_association_subject, domain=GenotypeToPhenotypicFeatureAssociation, range=Union[str, GenotypeId])\n", @@ -15951,6 +18690,18 @@ "slots.disease_to_phenotypic_feature_association_object = Slot(uri=RDF.object, name=\"disease to phenotypic feature association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.disease_to_phenotypic_feature_association_object, domain=DiseaseToPhenotypicFeatureAssociation, range=Union[str, PhenotypicFeatureId])\n", "\n", + "slots.case_to_disease_association_object = Slot(uri=RDF.object, name=\"case to disease association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.case_to_disease_association_object, domain=CaseToDiseaseAssociation, range=Union[str, DiseaseId])\n", + "\n", + "slots.case_to_variant_association_object = Slot(uri=RDF.object, name=\"case to variant association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.case_to_variant_association_object, domain=CaseToVariantAssociation, range=Union[str, SequenceVariantId])\n", + "\n", + "slots.case_to_variant_association_has_zygosity = Slot(uri=BIOLINK.has_zygosity, name=\"case to variant association_has zygosity\", curie=BIOLINK.curie('has_zygosity'),\n", + " model_uri=DIST.case_to_variant_association_has_zygosity, domain=CaseToVariantAssociation, range=Optional[Union[str, ZygosityId]])\n", + "\n", + "slots.case_to_gene_association_object = Slot(uri=RDF.object, name=\"case to gene association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.case_to_gene_association_object, domain=CaseToGeneAssociation, range=Union[dict, GeneOrGeneProduct])\n", + "\n", "slots.behavior_to_behavioral_feature_association_subject = Slot(uri=RDF.subject, name=\"behavior to behavioral feature association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.behavior_to_behavioral_feature_association_subject, domain=BehaviorToBehavioralFeatureAssociation, range=Union[str, BehaviorId])\n", "\n", @@ -15963,33 +18714,42 @@ "slots.variant_to_entity_association_mixin_subject = Slot(uri=RDF.subject, name=\"variant to entity association mixin_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.variant_to_entity_association_mixin_subject, domain=None, range=Union[str, SequenceVariantId])\n", "\n", - "slots.gene_to_disease_or_phenotypic_feature_association_subject = Slot(uri=RDF.subject, name=\"gene to disease or phenotypic feature association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.gene_to_disease_or_phenotypic_feature_association_subject, domain=GeneToDiseaseOrPhenotypicFeatureAssociation, range=Union[dict, GeneOrGeneProduct])\n", - "\n", - "slots.gene_to_disease_or_phenotypic_feature_association_subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"gene to disease or phenotypic feature association_subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", - " model_uri=DIST.gene_to_disease_or_phenotypic_feature_association_subject_aspect_qualifier, domain=GeneToDiseaseOrPhenotypicFeatureAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", - "\n", - "slots.gene_to_disease_or_phenotypic_feature_association_object = Slot(uri=RDF.object, name=\"gene to disease or phenotypic feature association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.gene_to_disease_or_phenotypic_feature_association_object, domain=GeneToDiseaseOrPhenotypicFeatureAssociation, range=Union[str, DiseaseOrPhenotypicFeatureId])\n", - "\n", - "slots.gene_to_disease_or_phenotypic_feature_association_object_direction_qualifier = Slot(uri=BIOLINK.object_direction_qualifier, name=\"gene to disease or phenotypic feature association_object direction qualifier\", curie=BIOLINK.curie('object_direction_qualifier'),\n", - " model_uri=DIST.gene_to_disease_or_phenotypic_feature_association_object_direction_qualifier, domain=GeneToDiseaseOrPhenotypicFeatureAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", - "\n", - "slots.gene_to_disease_or_phenotypic_feature_association_predicate = Slot(uri=RDF.predicate, name=\"gene to disease or phenotypic feature association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_to_disease_or_phenotypic_feature_association_predicate, domain=GeneToDiseaseOrPhenotypicFeatureAssociation, range=Union[str, PredicateType])\n", - "\n", "slots.gene_to_phenotypic_feature_association_subject = Slot(uri=RDF.subject, name=\"gene to phenotypic feature association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_to_phenotypic_feature_association_subject, domain=GeneToPhenotypicFeatureAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", + "slots.gene_to_phenotypic_feature_association_subject_form_or_variant_qualifier = Slot(uri=BIOLINK.subject_form_or_variant_qualifier, name=\"gene to phenotypic feature association_subject form or variant qualifier\", curie=BIOLINK.curie('subject_form_or_variant_qualifier'),\n", + " model_uri=DIST.gene_to_phenotypic_feature_association_subject_form_or_variant_qualifier, domain=GeneToPhenotypicFeatureAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", + "\n", + "slots.gene_to_phenotypic_feature_association_subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"gene to phenotypic feature association_subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", + " model_uri=DIST.gene_to_phenotypic_feature_association_subject_aspect_qualifier, domain=GeneToPhenotypicFeatureAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", + "\n", "slots.gene_to_phenotypic_feature_association_object = Slot(uri=RDF.object, name=\"gene to phenotypic feature association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.gene_to_phenotypic_feature_association_object, domain=GeneToPhenotypicFeatureAssociation, range=Union[str, PhenotypicFeatureId])\n", "\n", + "slots.gene_to_phenotypic_feature_association_object_direction_qualifier = Slot(uri=BIOLINK.object_direction_qualifier, name=\"gene to phenotypic feature association_object direction qualifier\", curie=BIOLINK.curie('object_direction_qualifier'),\n", + " model_uri=DIST.gene_to_phenotypic_feature_association_object_direction_qualifier, domain=GeneToPhenotypicFeatureAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", + "\n", + "slots.gene_to_phenotypic_feature_association_predicate = Slot(uri=RDF.predicate, name=\"gene to phenotypic feature association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.gene_to_phenotypic_feature_association_predicate, domain=GeneToPhenotypicFeatureAssociation, range=Union[str, \"GeneToPhenotypicFeaturePredicateEnum\"])\n", + "\n", "slots.gene_to_disease_association_subject = Slot(uri=RDF.subject, name=\"gene to disease association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_to_disease_association_subject, domain=GeneToDiseaseAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", + "slots.gene_to_disease_association_subject_form_or_variant_qualifier = Slot(uri=BIOLINK.subject_form_or_variant_qualifier, name=\"gene to disease association_subject form or variant qualifier\", curie=BIOLINK.curie('subject_form_or_variant_qualifier'),\n", + " model_uri=DIST.gene_to_disease_association_subject_form_or_variant_qualifier, domain=GeneToDiseaseAssociation, range=Optional[Union[str, \"ChemicalOrGeneOrGeneProductFormOrVariantEnum\"]])\n", + "\n", + "slots.gene_to_disease_association_subject_aspect_qualifier = Slot(uri=BIOLINK.subject_aspect_qualifier, name=\"gene to disease association_subject aspect qualifier\", curie=BIOLINK.curie('subject_aspect_qualifier'),\n", + " model_uri=DIST.gene_to_disease_association_subject_aspect_qualifier, domain=GeneToDiseaseAssociation, range=Optional[Union[str, \"GeneOrGeneProductOrChemicalEntityAspectEnum\"]])\n", + "\n", + "slots.gene_to_disease_association_object_direction_qualifier = Slot(uri=BIOLINK.object_direction_qualifier, name=\"gene to disease association_object direction qualifier\", curie=BIOLINK.curie('object_direction_qualifier'),\n", + " model_uri=DIST.gene_to_disease_association_object_direction_qualifier, domain=GeneToDiseaseAssociation, range=Optional[Union[str, \"DirectionQualifierEnum\"]])\n", + "\n", "slots.gene_to_disease_association_object = Slot(uri=RDF.object, name=\"gene to disease association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.gene_to_disease_association_object, domain=GeneToDiseaseAssociation, range=Union[str, DiseaseId])\n", "\n", + "slots.gene_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"gene to disease association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.gene_to_disease_association_predicate, domain=GeneToDiseaseAssociation, range=Union[str, \"GeneToDiseasePredicateEnum\"])\n", + "\n", "slots.causal_gene_to_disease_association_subject = Slot(uri=RDF.subject, name=\"causal gene to disease association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.causal_gene_to_disease_association_subject, domain=CausalGeneToDiseaseAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", @@ -16002,26 +18762,26 @@ "slots.correlated_gene_to_disease_association_object = Slot(uri=RDF.object, name=\"correlated gene to disease association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.correlated_gene_to_disease_association_object, domain=CorrelatedGeneToDiseaseAssociation, range=Union[str, DiseaseId])\n", "\n", + "slots.correlated_gene_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"correlated gene to disease association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.correlated_gene_to_disease_association_predicate, domain=CorrelatedGeneToDiseaseAssociation, range=Union[str, URIorCURIE])\n", + "\n", "slots.druggable_gene_to_disease_association_subject = Slot(uri=RDF.subject, name=\"druggable gene to disease association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.druggable_gene_to_disease_association_subject, domain=DruggableGeneToDiseaseAssociation, range=Union[dict, GeneOrGeneProduct])\n", "\n", "slots.druggable_gene_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"druggable gene to disease association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.druggable_gene_to_disease_association_predicate, domain=DruggableGeneToDiseaseAssociation, range=Union[str, PredicateType])\n", - "\n", - "slots.druggable_gene_to_disease_association_has_evidence = Slot(uri=BIOLINK.has_evidence, name=\"druggable gene to disease association_has evidence\", curie=BIOLINK.curie('has_evidence'),\n", - " model_uri=DIST.druggable_gene_to_disease_association_has_evidence, domain=DruggableGeneToDiseaseAssociation, range=Optional[Union[Union[str, \"DruggableGeneCategoryEnum\"], List[Union[str, \"DruggableGeneCategoryEnum\"]]]])\n", + " model_uri=DIST.druggable_gene_to_disease_association_predicate, domain=DruggableGeneToDiseaseAssociation, range=Union[str, \"GeneToDiseasePredicateEnum\"])\n", "\n", "slots.phenotypic_feature_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"phenotypic feature to disease association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.phenotypic_feature_to_disease_association_predicate, domain=PhenotypicFeatureToDiseaseAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.phenotypic_feature_to_disease_association_predicate, domain=PhenotypicFeatureToDiseaseAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.variant_to_gene_association_object = Slot(uri=RDF.object, name=\"variant to gene association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.variant_to_gene_association_object, domain=VariantToGeneAssociation, range=Union[str, GeneId])\n", "\n", "slots.variant_to_gene_association_predicate = Slot(uri=RDF.predicate, name=\"variant to gene association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.variant_to_gene_association_predicate, domain=VariantToGeneAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.variant_to_gene_association_predicate, domain=VariantToGeneAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.variant_to_gene_expression_association_predicate = Slot(uri=RDF.predicate, name=\"variant to gene expression association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.variant_to_gene_expression_association_predicate, domain=VariantToGeneExpressionAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.variant_to_gene_expression_association_predicate, domain=VariantToGeneExpressionAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.variant_to_population_association_subject = Slot(uri=RDF.subject, name=\"variant to population association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.variant_to_population_association_subject, domain=VariantToPopulationAssociation, range=Union[str, SequenceVariantId])\n", @@ -16045,7 +18805,7 @@ " model_uri=DIST.population_to_population_association_object, domain=PopulationToPopulationAssociation, range=Union[str, PopulationOfIndividualOrganismsId])\n", "\n", "slots.population_to_population_association_predicate = Slot(uri=RDF.predicate, name=\"population to population association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.population_to_population_association_predicate, domain=PopulationToPopulationAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.population_to_population_association_predicate, domain=PopulationToPopulationAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.variant_to_phenotypic_feature_association_subject = Slot(uri=RDF.subject, name=\"variant to phenotypic feature association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.variant_to_phenotypic_feature_association_subject, domain=VariantToPhenotypicFeatureAssociation, range=Union[str, SequenceVariantId])\n", @@ -16054,7 +18814,7 @@ " model_uri=DIST.variant_to_disease_association_subject, domain=VariantToDiseaseAssociation, range=Union[str, NamedThingId])\n", "\n", "slots.variant_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"variant to disease association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.variant_to_disease_association_predicate, domain=VariantToDiseaseAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.variant_to_disease_association_predicate, domain=VariantToDiseaseAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.variant_to_disease_association_object = Slot(uri=RDF.object, name=\"variant to disease association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.variant_to_disease_association_object, domain=VariantToDiseaseAssociation, range=Union[str, NamedThingId])\n", @@ -16063,7 +18823,7 @@ " model_uri=DIST.genotype_to_disease_association_subject, domain=GenotypeToDiseaseAssociation, range=Union[str, NamedThingId])\n", "\n", "slots.genotype_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"genotype to disease association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.genotype_to_disease_association_predicate, domain=GenotypeToDiseaseAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.genotype_to_disease_association_predicate, domain=GenotypeToDiseaseAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.genotype_to_disease_association_object = Slot(uri=RDF.object, name=\"genotype to disease association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.genotype_to_disease_association_object, domain=GenotypeToDiseaseAssociation, range=Union[str, NamedThingId])\n", @@ -16072,7 +18832,7 @@ " model_uri=DIST.model_to_disease_association_mixin_subject, domain=None, range=Union[str, NamedThingId])\n", "\n", "slots.model_to_disease_association_mixin_predicate = Slot(uri=RDF.predicate, name=\"model to disease association mixin_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.model_to_disease_association_mixin_predicate, domain=None, range=Union[str, PredicateType])\n", + " model_uri=DIST.model_to_disease_association_mixin_predicate, domain=None, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_as_a_model_of_disease_association_subject = Slot(uri=RDF.subject, name=\"gene as a model of disease association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_as_a_model_of_disease_association_subject, domain=GeneAsAModelOfDiseaseAssociation, range=Union[dict, GeneOrGeneProduct])\n", @@ -16108,7 +18868,7 @@ " model_uri=DIST.gene_has_variant_that_contributes_to_disease_association_object, domain=GeneHasVariantThatContributesToDiseaseAssociation, range=Union[str, DiseaseId])\n", "\n", "slots.gene_has_variant_that_contributes_to_disease_association_predicate = Slot(uri=RDF.predicate, name=\"gene has variant that contributes to disease association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_has_variant_that_contributes_to_disease_association_predicate, domain=GeneHasVariantThatContributesToDiseaseAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_has_variant_that_contributes_to_disease_association_predicate, domain=GeneHasVariantThatContributesToDiseaseAssociation, range=Union[str, \"GeneToDiseasePredicateEnum\"])\n", "\n", "slots.gene_to_expression_site_association_subject = Slot(uri=RDF.subject, name=\"gene to expression site association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.gene_to_expression_site_association_subject, domain=GeneToExpressionSiteAssociation, range=Union[dict, GeneOrGeneProduct])\n", @@ -16117,7 +18877,7 @@ " model_uri=DIST.gene_to_expression_site_association_object, domain=GeneToExpressionSiteAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", "slots.gene_to_expression_site_association_predicate = Slot(uri=RDF.predicate, name=\"gene to expression site association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_to_expression_site_association_predicate, domain=GeneToExpressionSiteAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_to_expression_site_association_predicate, domain=GeneToExpressionSiteAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.gene_to_expression_site_association_stage_qualifier = Slot(uri=BIOLINK.stage_qualifier, name=\"gene to expression site association_stage qualifier\", curie=BIOLINK.curie('stage_qualifier'),\n", " model_uri=DIST.gene_to_expression_site_association_stage_qualifier, domain=GeneToExpressionSiteAssociation, range=Optional[Union[str, LifeStageId]])\n", @@ -16174,7 +18934,7 @@ " model_uri=DIST.genomic_sequence_localization_object, domain=GenomicSequenceLocalization, range=Union[str, NucleicAcidEntityId])\n", "\n", "slots.genomic_sequence_localization_predicate = Slot(uri=RDF.predicate, name=\"genomic sequence localization_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.genomic_sequence_localization_predicate, domain=GenomicSequenceLocalization, range=Union[str, PredicateType])\n", + " model_uri=DIST.genomic_sequence_localization_predicate, domain=GenomicSequenceLocalization, range=Union[str, URIorCURIE])\n", "\n", "slots.sequence_feature_relationship_subject = Slot(uri=RDF.subject, name=\"sequence feature relationship_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.sequence_feature_relationship_subject, domain=SequenceFeatureRelationship, range=Union[str, NucleicAcidEntityId])\n", @@ -16195,7 +18955,7 @@ " model_uri=DIST.gene_to_gene_product_relationship_object, domain=GeneToGeneProductRelationship, range=Union[dict, GeneProductMixin])\n", "\n", "slots.gene_to_gene_product_relationship_predicate = Slot(uri=RDF.predicate, name=\"gene to gene product relationship_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.gene_to_gene_product_relationship_predicate, domain=GeneToGeneProductRelationship, range=Union[str, PredicateType])\n", + " model_uri=DIST.gene_to_gene_product_relationship_predicate, domain=GeneToGeneProductRelationship, range=Union[str, URIorCURIE])\n", "\n", "slots.exon_to_transcript_relationship_subject = Slot(uri=RDF.subject, name=\"exon to transcript relationship_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.exon_to_transcript_relationship_subject, domain=ExonToTranscriptRelationship, range=Union[str, ExonId])\n", @@ -16204,7 +18964,7 @@ " model_uri=DIST.exon_to_transcript_relationship_object, domain=ExonToTranscriptRelationship, range=Union[str, TranscriptId])\n", "\n", "slots.chemical_entity_or_gene_or_gene_product_regulates_gene_association_predicate = Slot(uri=RDF.predicate, name=\"chemical entity or gene or gene product regulates gene association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.chemical_entity_or_gene_or_gene_product_regulates_gene_association_predicate, domain=ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.chemical_entity_or_gene_or_gene_product_regulates_gene_association_predicate, domain=ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.chemical_entity_or_gene_or_gene_product_regulates_gene_association_subject = Slot(uri=RDF.subject, name=\"chemical entity or gene or gene product regulates gene association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.chemical_entity_or_gene_or_gene_product_regulates_gene_association_subject, domain=ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation, range=Union[dict, ChemicalEntityOrGeneOrGeneProduct])\n", @@ -16221,14 +18981,23 @@ "slots.anatomical_entity_to_anatomical_entity_association_object = Slot(uri=RDF.object, name=\"anatomical entity to anatomical entity association_object\", curie=RDF.curie('object'),\n", " model_uri=DIST.anatomical_entity_to_anatomical_entity_association_object, domain=AnatomicalEntityToAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", - "slots.anatomical_entity_to_anatomical_entity_part_of_association_subject = Slot(uri=RDF.subject, name=\"anatomical entity to anatomical entity part of association_subject\", curie=RDF.curie('subject'),\n", - " model_uri=DIST.anatomical_entity_to_anatomical_entity_part_of_association_subject, domain=AnatomicalEntityToAnatomicalEntityPartOfAssociation, range=Union[str, AnatomicalEntityId])\n", + "slots.anatomical_entity_has_part_anatomical_entity_association_subject = Slot(uri=RDF.subject, name=\"anatomical entity has part anatomical entity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.anatomical_entity_has_part_anatomical_entity_association_subject, domain=AnatomicalEntityHasPartAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", + "\n", + "slots.anatomical_entity_has_part_anatomical_entity_association_object = Slot(uri=RDF.object, name=\"anatomical entity has part anatomical entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.anatomical_entity_has_part_anatomical_entity_association_object, domain=AnatomicalEntityHasPartAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", + "\n", + "slots.anatomical_entity_has_part_anatomical_entity_association_predicate = Slot(uri=RDF.predicate, name=\"anatomical entity has part anatomical entity association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.anatomical_entity_has_part_anatomical_entity_association_predicate, domain=AnatomicalEntityHasPartAnatomicalEntityAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.anatomical_entity_part_of_anatomical_entity_association_subject = Slot(uri=RDF.subject, name=\"anatomical entity part of anatomical entity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.anatomical_entity_part_of_anatomical_entity_association_subject, domain=AnatomicalEntityPartOfAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", - "slots.anatomical_entity_to_anatomical_entity_part_of_association_object = Slot(uri=RDF.object, name=\"anatomical entity to anatomical entity part of association_object\", curie=RDF.curie('object'),\n", - " model_uri=DIST.anatomical_entity_to_anatomical_entity_part_of_association_object, domain=AnatomicalEntityToAnatomicalEntityPartOfAssociation, range=Union[str, AnatomicalEntityId])\n", + "slots.anatomical_entity_part_of_anatomical_entity_association_object = Slot(uri=RDF.object, name=\"anatomical entity part of anatomical entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.anatomical_entity_part_of_anatomical_entity_association_object, domain=AnatomicalEntityPartOfAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", - "slots.anatomical_entity_to_anatomical_entity_part_of_association_predicate = Slot(uri=RDF.predicate, name=\"anatomical entity to anatomical entity part of association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.anatomical_entity_to_anatomical_entity_part_of_association_predicate, domain=AnatomicalEntityToAnatomicalEntityPartOfAssociation, range=Union[str, PredicateType])\n", + "slots.anatomical_entity_part_of_anatomical_entity_association_predicate = Slot(uri=RDF.predicate, name=\"anatomical entity part of anatomical entity association_predicate\", curie=RDF.curie('predicate'),\n", + " model_uri=DIST.anatomical_entity_part_of_anatomical_entity_association_predicate, domain=AnatomicalEntityPartOfAnatomicalEntityAssociation, range=Union[str, URIorCURIE])\n", "\n", "slots.anatomical_entity_to_anatomical_entity_ontogenic_association_subject = Slot(uri=RDF.subject, name=\"anatomical entity to anatomical entity ontogenic association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.anatomical_entity_to_anatomical_entity_ontogenic_association_subject, domain=AnatomicalEntityToAnatomicalEntityOntogenicAssociation, range=Union[str, AnatomicalEntityId])\n", @@ -16237,7 +19006,19 @@ " model_uri=DIST.anatomical_entity_to_anatomical_entity_ontogenic_association_object, domain=AnatomicalEntityToAnatomicalEntityOntogenicAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", "slots.anatomical_entity_to_anatomical_entity_ontogenic_association_predicate = Slot(uri=RDF.predicate, name=\"anatomical entity to anatomical entity ontogenic association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.anatomical_entity_to_anatomical_entity_ontogenic_association_predicate, domain=AnatomicalEntityToAnatomicalEntityOntogenicAssociation, range=Union[str, PredicateType])\n", + " model_uri=DIST.anatomical_entity_to_anatomical_entity_ontogenic_association_predicate, domain=AnatomicalEntityToAnatomicalEntityOntogenicAssociation, range=Union[str, URIorCURIE])\n", + "\n", + "slots.gene_or_gene_product_or_gene_family_to_anatomical_entity_association_subject = Slot(uri=RDF.subject, name=\"gene or gene product or gene family to anatomical entity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.gene_or_gene_product_or_gene_family_to_anatomical_entity_association_subject, domain=GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation, range=Union[dict, GeneOrGeneProductOrGeneFamily])\n", + "\n", + "slots.gene_or_gene_product_or_gene_family_to_anatomical_entity_association_object = Slot(uri=RDF.object, name=\"gene or gene product or gene family to anatomical entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.gene_or_gene_product_or_gene_family_to_anatomical_entity_association_object, domain=GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", + "\n", + "slots.biological_process_or_activity_to_anatomical_entity_association_subject = Slot(uri=RDF.subject, name=\"biological process or activity to anatomical entity association_subject\", curie=RDF.curie('subject'),\n", + " model_uri=DIST.biological_process_or_activity_to_anatomical_entity_association_subject, domain=BiologicalProcessOrActivityToAnatomicalEntityAssociation, range=Union[str, BiologicalProcessOrActivityId])\n", + "\n", + "slots.biological_process_or_activity_to_anatomical_entity_association_object = Slot(uri=RDF.object, name=\"biological process or activity to anatomical entity association_object\", curie=RDF.curie('object'),\n", + " model_uri=DIST.biological_process_or_activity_to_anatomical_entity_association_object, domain=BiologicalProcessOrActivityToAnatomicalEntityAssociation, range=Union[str, AnatomicalEntityId])\n", "\n", "slots.organism_taxon_to_entity_association_subject = Slot(uri=RDF.subject, name=\"organism taxon to entity association_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.organism_taxon_to_entity_association_subject, domain=None, range=Union[str, OrganismTaxonId])\n", @@ -16255,7 +19036,7 @@ " model_uri=DIST.organism_taxon_to_organism_taxon_specialization_object, domain=OrganismTaxonToOrganismTaxonSpecialization, range=Union[str, OrganismTaxonId])\n", "\n", "slots.organism_taxon_to_organism_taxon_specialization_predicate = Slot(uri=RDF.predicate, name=\"organism taxon to organism taxon specialization_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.organism_taxon_to_organism_taxon_specialization_predicate, domain=OrganismTaxonToOrganismTaxonSpecialization, range=Union[str, PredicateType])\n", + " model_uri=DIST.organism_taxon_to_organism_taxon_specialization_predicate, domain=OrganismTaxonToOrganismTaxonSpecialization, range=Union[str, URIorCURIE])\n", "\n", "slots.organism_taxon_to_organism_taxon_interaction_subject = Slot(uri=RDF.subject, name=\"organism taxon to organism taxon interaction_subject\", curie=RDF.curie('subject'),\n", " model_uri=DIST.organism_taxon_to_organism_taxon_interaction_subject, domain=OrganismTaxonToOrganismTaxonInteraction, range=Union[str, OrganismTaxonId])\n", @@ -16264,7 +19045,7 @@ " model_uri=DIST.organism_taxon_to_organism_taxon_interaction_object, domain=OrganismTaxonToOrganismTaxonInteraction, range=Union[str, OrganismTaxonId])\n", "\n", "slots.organism_taxon_to_organism_taxon_interaction_predicate = Slot(uri=RDF.predicate, name=\"organism taxon to organism taxon interaction_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.organism_taxon_to_organism_taxon_interaction_predicate, domain=OrganismTaxonToOrganismTaxonInteraction, range=Union[str, PredicateType])\n", + " model_uri=DIST.organism_taxon_to_organism_taxon_interaction_predicate, domain=OrganismTaxonToOrganismTaxonInteraction, range=Union[str, URIorCURIE])\n", "\n", "slots.organism_taxon_to_organism_taxon_interaction_associated_environmental_context = Slot(uri=BIOLINK.associated_environmental_context, name=\"organism taxon to organism taxon interaction_associated environmental context\", curie=BIOLINK.curie('associated_environmental_context'),\n", " model_uri=DIST.organism_taxon_to_organism_taxon_interaction_associated_environmental_context, domain=OrganismTaxonToOrganismTaxonInteraction, range=Optional[str])\n", @@ -16276,7 +19057,8 @@ " model_uri=DIST.organism_taxon_to_environment_association_object, domain=OrganismTaxonToEnvironmentAssociation, range=Union[str, NamedThingId])\n", "\n", "slots.organism_taxon_to_environment_association_predicate = Slot(uri=RDF.predicate, name=\"organism taxon to environment association_predicate\", curie=RDF.curie('predicate'),\n", - " model_uri=DIST.organism_taxon_to_environment_association_predicate, domain=OrganismTaxonToEnvironmentAssociation, range=Union[str, PredicateType])\n" + " model_uri=DIST.organism_taxon_to_environment_association_predicate, domain=OrganismTaxonToEnvironmentAssociation, range=Union[str, URIorCURIE])\n", + "\n" ] } ], @@ -16309,7 +19091,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.13.13" } }, "nbformat": 4, diff --git a/notebooks/SQL-examples.ipynb b/notebooks/SQL-examples.ipynb index 21f3598379..0feb6236a4 100644 --- a/notebooks/SQL-examples.ipynb +++ b/notebooks/SQL-examples.ipynb @@ -418,9 +418,7 @@ "id": "b0a0b49b", "metadata": {}, "outputs": [], - "source": [ - "!cat tmp/personinfo.ddl.sql | sqlite3 tmp/tmp.db " - ] + "source": "!cat tmp/personinfo.ddl.sql | sqlite3 tmp/tmp.db" }, { "cell_type": "code", @@ -1170,9 +1168,7 @@ "id": "06421064", "metadata": {}, "outputs": [], - "source": [ - "p = Person(id=\"P1\", name=\"Rosario\", age_in_years=33)" - ] + "source": "p = Person(id=\"P1\", name=\"Rosario\", age=33)" }, { "cell_type": "code", @@ -1308,9 +1304,7 @@ ] } ], - "source": [ - "%pip install names" - ] + "source": "%uv pip install names" }, { "cell_type": "code", @@ -1326,7 +1320,7 @@ "def random_person() -> Person:\n", " \"\"\"\n", " Create a person with a random name and random set of relationships.\n", - " \n", + "\n", " Note that this is just for demo purposes. If we wanted to be more advanced we\n", " could make use of SIBLING_OF to make a more realistic distribution of last name\n", " matches, and we could ensure that SIBLING_OF is symmetric...\n", @@ -1334,7 +1328,7 @@ " global last_id\n", " last_id += 1\n", " pid = f\"P{last_id}\"\n", - " person = Person(id=pid, name=names.get_full_name(), age_in_years=random.randint(30,40))\n", + " person = Person(id=pid, name=names.get_full_name(), age=random.randint(30,40))\n", " for n in range(0, random.randint(0, 3)):\n", " rel = FamilialRelationship(related_to=f\"P{last_id+n}\", type=\"SIBLING_OF\")\n", " person.has_familial_relationships.append(rel)\n", @@ -1557,7 +1551,7 @@ "def random_person_pydantic() -> personinfo.Person:\n", " \"\"\"\n", " Create a person with a random name and random set of relationships.\n", - " \n", + "\n", " Note that this is just for demo purposes. If we wanted to be more advanced we\n", " could make use of SIBLING_OF to make a more realistic distribution of last name\n", " matches, and we could ensure that SIBLING_OF is symmetric...\n", @@ -1565,7 +1559,7 @@ " global last_id\n", " last_id += 1\n", " pid = f\"P{last_id}\"\n", - " person = personinfo.Person(id=pid, name=names.get_full_name(), age_in_years=random.randint(30,40))\n", + " person = personinfo.Person(id=pid, name=names.get_full_name(), age=random.randint(30,40))\n", " for n in range(0, random.randint(0, 3)):\n", " rel = personinfo.FamilialRelationship(related_to=f\"P{last_id+n}\", type=\"SIBLING_OF\")\n", " relationships = person.has_familial_relationships\n", @@ -1573,7 +1567,7 @@ " relationships.append(rel)\n", " else:\n", " person.has_familial_relationships = [rel]\n", - " \n", + "\n", " return person" ] }, diff --git a/notebooks/ShExPrimerModel.ipynb b/notebooks/ShExPrimerModel.ipynb index ab30f45ed3..54d23e2c23 100644 --- a/notebooks/ShExPrimerModel.ipynb +++ b/notebooks/ShExPrimerModel.ipynb @@ -14,28 +14,187 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2021-01-05T21:24:24.644220Z", - "iopub.status.busy": "2021-01-05T21:24:24.643660Z", - "iopub.status.idle": "2021-01-05T21:24:25.782030Z", - "shell.execute_reply": "2021-01-05T21:24:25.782504Z" + "iopub.execute_input": "2026-05-08T15:55:23.951286Z", + "iopub.status.busy": "2026-05-08T15:55:23.951119Z", + "iopub.status.idle": "2026-05-08T15:55:38.062149Z", + "shell.execute_reply": "2026-05-08T15:55:38.059608Z" } }, + "outputs": [], "source": [ - "!pip install linkml --upgrade --disable-pip-version-check -q" - ], - "outputs": [] + "!uv pip install linkml --upgrade --disable-pip-version-check -q" + ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2021-01-05T21:24:25.789824Z", - "iopub.status.busy": "2021-01-05T21:24:25.789150Z", - "iopub.status.idle": "2021-01-05T21:24:26.313052Z", - "shell.execute_reply": "2021-01-05T21:24:26.313332Z" + "iopub.execute_input": "2026-05-08T15:55:38.065549Z", + "iopub.status.busy": "2026-05-08T15:55:38.065370Z", + "iopub.status.idle": "2026-05-08T15:55:50.647804Z", + "shell.execute_reply": "2026-05-08T15:55:50.646576Z" } }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "# Auto generated from None by pythongen.py version: 0.0.1\n", + "# Generation date: 2026-05-08T16:55:50\n", + "# Schema: issue\n", + "#\n", + "# id: http://shex.io/shex-primer/issueshape\n", + "# description:\n", + "# license:\n", + "\n", + "import dataclasses\n", + "import re\n", + "from dataclasses import dataclass\n", + "from datetime import (\n", + " date,\n", + " datetime,\n", + " time\n", + ")\n", + "from typing import (\n", + " Any,\n", + " ClassVar,\n", + " Dict,\n", + " List,\n", + " Optional,\n", + " Union\n", + ")\n", + "\n", + "from jsonasobj2 import (\n", + " JsonObj,\n", + " as_dict\n", + ")\n", + "from linkml_runtime.linkml_model.meta import (\n", + " EnumDefinition,\n", + " PermissibleValue,\n", + " PvFormulaOptions\n", + ")\n", + "from linkml_runtime.utils.curienamespace import CurieNamespace\n", + "from linkml_runtime.utils.enumerations import EnumDefinitionImpl\n", + "from linkml_runtime.utils.formatutils import (\n", + " camelcase,\n", + " sfx,\n", + " underscore\n", + ")\n", + "from linkml_runtime.utils.metamodelcore import (\n", + " bnode,\n", + " empty_dict,\n", + " empty_list\n", + ")\n", + "from linkml_runtime.utils.slot import Slot\n", + "from linkml_runtime.utils.yamlutils import (\n", + " YAMLRoot,\n", + " extended_float,\n", + " extended_int,\n", + " extended_str\n", + ")\n", + "from rdflib import (\n", + " Namespace,\n", + " URIRef\n", + ")\n", + "\n", + "\n", + "\n", + "metamodel_version = \"1.7.0\"\n", + "version = \"0.1.0\"\n", + "\n", + "# Namespaces\n", + "EX = CurieNamespace('ex', 'http://ex.example/#')\n", + "FOAF = CurieNamespace('foaf', 'http://xmlns.com/foaf/0.1/')\n", + "ISSUE = CurieNamespace('issue', 'http://shex.io/shex-primer/issue/')\n", + "XSD = CurieNamespace('xsd', 'http://www.w3.org/2001/XMLSchema#')\n", + "DEFAULT_ = ISSUE\n", + "\n", + "\n", + "# Types\n", + "class Str(str):\n", + " type_class_uri = XSD[\"string\"]\n", + " type_class_curie = \"xsd:string\"\n", + " type_name = \"str\"\n", + " type_model_uri = ISSUE.Str\n", + "\n", + "\n", + "class Int(int):\n", + " type_class_uri = XSD[\"integer\"]\n", + " type_class_curie = \"xsd:integer\"\n", + " type_name = \"int\"\n", + " type_model_uri = ISSUE.Int\n", + "\n", + "\n", + "# Class references\n", + "\n", + "\n", + "\n", + "class Person(YAMLRoot):\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = ISSUE[\"Person\"]\n", + " class_class_curie: ClassVar[str] = \"issue:Person\"\n", + " class_name: ClassVar[str] = \"person\"\n", + " class_model_uri: ClassVar[URIRef] = ISSUE.Person\n", + "\n", + "\n", + "class Enrolee(Person):\n", + " _inherited_slots: ClassVar[list[str]] = []\n", + "\n", + " class_class_uri: ClassVar[URIRef] = ISSUE[\"Enrolee\"]\n", + " class_class_curie: ClassVar[str] = \"issue:Enrolee\"\n", + " class_name: ClassVar[str] = \"enrolee\"\n", + " class_model_uri: ClassVar[URIRef] = ISSUE.Enrolee\n", + "\n", + "\n", + "# Enumerations\n", + "\n", + "\n", + "# Slots\n", + "class slots:\n", + " pass\n", + "\n", + "slots.name = Slot(uri=ISSUE.name, name=\"name\", curie=ISSUE.curie('name'),\n", + " model_uri=ISSUE.name, domain=Person, range=Union[dict, Person])\n", + "\n", + "slots.age = Slot(uri=FOAF.age, name=\"age\", curie=FOAF.curie('age'),\n", + " model_uri=ISSUE.age, domain=Enrolee, range=Optional[int])\n", + "\n", + "slots.hasGuardian = Slot(uri=ISSUE.hasGuardian, name=\"hasGuardian\", curie=ISSUE.curie('hasGuardian'),\n", + " model_uri=ISSUE.hasGuardian, domain=Enrolee, range=Union[Union[dict, Person], list[Union[dict, Person]]])\n", + "\n", + "# metamodel_version: 1.7.0\n", + "# version: 0.1.0\n", + "BASE \n", + "PREFIX rdf: \n", + "PREFIX xsd: \n", + "\n", + "\n", + " xsd:string\n", + "\n", + " xsd:integer\n", + "\n", + " CLOSED {\n", + " ( $ ( & ;\n", + " rdf:type [ ] ?\n", + " ) ;\n", + " rdf:type [ ] ?\n", + " )\n", + "}\n", + "\n", + " (\n", + " CLOSED {\n", + " ( $ rdf:type . * ;\n", + " rdf:type [ ] ?\n", + " )\n", + " } OR @\n", + ")\n", + "\n" + ] + } + ], "source": [ "from linkml.generators.shexgen import ShExGenerator\n", "from linkml.generators.pythongen import PythonGenerator\n", @@ -90,15 +249,14 @@ "\"\"\"\n", "print(PythonGenerator(model).serialize())\n", "print(ShExGenerator(model).serialize(collections=False))" - ], - "outputs": [] + ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "source": [], - "outputs": [] + "outputs": [], + "source": [] } ], "metadata": { @@ -117,7 +275,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.1" + "version": "3.13.13" } }, "nbformat": 4, diff --git a/notebooks/Type-Designators.ipynb b/notebooks/Type-Designators.ipynb index 90045bf4f7..b8fbfa9d4f 100644 --- a/notebooks/Type-Designators.ipynb +++ b/notebooks/Type-Designators.ipynb @@ -4,18 +4,17 @@ "cell_type": "code", "execution_count": 1, "id": "09841f4a-d785-4fa8-8daf-2906c89007c6", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Requirement already satisfied: yamlmagic in /Users/tpfliss/git/linkml/.venv/lib/python3.12/site-packages (0.2.0)\r\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:20.867689Z", + "iopub.status.busy": "2026-05-08T15:56:20.867508Z", + "iopub.status.idle": "2026-05-08T15:56:21.758799Z", + "shell.execute_reply": "2026-05-08T15:56:21.757207Z" } - ], + }, + "outputs": [], "source": [ - "!pip install -q --disable-pip-version-check yamlmagic\n", + "!uv pip install -q --disable-pip-version-check yamlmagic\n", "%load_ext yamlmagic" ] }, @@ -23,7 +22,14 @@ "cell_type": "code", "execution_count": 2, "id": "8327f543", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:21.760626Z", + "iopub.status.busy": "2026-05-08T15:56:21.760456Z", + "iopub.status.idle": "2026-05-08T15:56:21.767406Z", + "shell.execute_reply": "2026-05-08T15:56:21.766547Z" + } + }, "outputs": [ { "data": { @@ -77,20 +83,26 @@ " attributes:\n", " num_floors:\n", " range: integer\n", - " \n", + "\n", " Container:\n", " attributes:\n", " things:\n", " range: Thing\n", - " multivalued: true\n", - " " + " multivalued: true\n" ] }, { "cell_type": "code", "execution_count": 3, "id": "25ad3561-ccb0-418b-b9f5-3d17ef13e343", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:21.768936Z", + "iopub.status.busy": "2026-05-08T15:56:21.768802Z", + "iopub.status.idle": "2026-05-08T15:56:21.772190Z", + "shell.execute_reply": "2026-05-08T15:56:21.771255Z" + } + }, "outputs": [], "source": [ "import yaml\n", @@ -101,7 +113,14 @@ "cell_type": "code", "execution_count": 4, "id": "32188102", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:21.773525Z", + "iopub.status.busy": "2026-05-08T15:56:21.773399Z", + "iopub.status.idle": "2026-05-08T15:56:24.517394Z", + "shell.execute_reply": "2026-05-08T15:56:24.516335Z" + } + }, "outputs": [], "source": [ "from linkml_runtime.utils.schemaview import SchemaView" @@ -111,7 +130,14 @@ "cell_type": "code", "execution_count": 5, "id": "0c7a6094", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:24.519104Z", + "iopub.status.busy": "2026-05-08T15:56:24.518945Z", + "iopub.status.idle": "2026-05-08T15:56:24.616093Z", + "shell.execute_reply": "2026-05-08T15:56:24.614986Z" + } + }, "outputs": [], "source": [ "sv = SchemaView(model_str)\n", @@ -122,7 +148,14 @@ "cell_type": "code", "execution_count": 6, "id": "efdd443a", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:24.617743Z", + "iopub.status.busy": "2026-05-08T15:56:24.617585Z", + "iopub.status.idle": "2026-05-08T15:56:26.759498Z", + "shell.execute_reply": "2026-05-08T15:56:26.758373Z" + } + }, "outputs": [], "source": [ "from linkml.generators.pydanticgen import PydanticGenerator\n", @@ -133,7 +166,14 @@ "cell_type": "code", "execution_count": 7, "id": "00808b90", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:26.761489Z", + "iopub.status.busy": "2026-05-08T15:56:26.761238Z", + "iopub.status.idle": "2026-05-08T15:56:26.764324Z", + "shell.execute_reply": "2026-05-08T15:56:26.763552Z" + } + }, "outputs": [], "source": [ "import logging\n", @@ -144,13 +184,20 @@ "cell_type": "code", "execution_count": 8, "id": "7acde179", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:26.766010Z", + "iopub.status.busy": "2026-05-08T15:56:26.765883Z", + "iopub.status.idle": "2026-05-08T15:56:26.928030Z", + "shell.execute_reply": "2026-05-08T15:56:26.926971Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "from __future__ import annotations \n", + "from __future__ import annotations\n", "\n", "import re\n", "import sys\n", @@ -159,13 +206,11 @@ " datetime,\n", " time\n", ")\n", - "from decimal import Decimal \n", - "from enum import Enum \n", + "from decimal import Decimal\n", + "from enum import Enum\n", "from typing import (\n", " Any,\n", " ClassVar,\n", - " Dict,\n", - " List,\n", " Literal,\n", " Optional,\n", " Union\n", @@ -176,16 +221,21 @@ " ConfigDict,\n", " Field,\n", " RootModel,\n", - " field_validator\n", + " SerializationInfo,\n", + " SerializerFunctionWrapHandler,\n", + " field_validator,\n", + " model_serializer\n", ")\n", "\n", "\n", - "metamodel_version = \"None\"\n", + "metamodel_version = \"1.7.0\"\n", "version = \"None\"\n", "\n", "\n", "class ConfiguredBaseModel(BaseModel):\n", " model_config = ConfigDict(\n", + " serialize_by_alias = True,\n", + " validate_by_name = True,\n", " validate_assignment = True,\n", " validate_default = True,\n", " extra = \"forbid\",\n", @@ -193,13 +243,13 @@ " use_enum_values = True,\n", " strict = False,\n", " )\n", - " pass\n", + "\n", "\n", "\n", "\n", "\n", "class LinkMLMeta(RootModel):\n", - " root: Dict[str, Any] = {}\n", + " root: dict[str, Any] = {}\n", " model_config = ConfigDict(frozen=True)\n", "\n", " def __getattr__(self, key:str):\n", @@ -229,27 +279,27 @@ "class Container(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " things: Optional[List[Union[Thing,Building,Vehicle]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'things', 'domain_of': ['Container']} })\n", + " things: Optional[list[Union[Thing,Building,Vehicle]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Container']} })\n", "\n", "\n", "class Thing(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " type: Literal[\"Thing\"] = Field(default=\"Thing\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " type: Literal[\"Thing\"] = Field(default=\"Thing\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Building(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_floors', 'domain_of': ['Building']} })\n", - " type: Literal[\"Building\"] = Field(default=\"Building\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Building']} })\n", + " type: Literal[\"Building\"] = Field(default=\"Building\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Vehicle(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_wheels', 'domain_of': ['Vehicle']} })\n", - " type: Literal[\"Vehicle\"] = Field(default=\"Vehicle\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Vehicle']} })\n", + " type: Literal[\"Vehicle\"] = Field(default=\"Vehicle\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "# Model rebuild\n", @@ -270,7 +320,14 @@ "cell_type": "code", "execution_count": 9, "id": "ed4dae50", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:26.929920Z", + "iopub.status.busy": "2026-05-08T15:56:26.929747Z", + "iopub.status.idle": "2026-05-08T15:56:27.061594Z", + "shell.execute_reply": "2026-05-08T15:56:27.060666Z" + } + }, "outputs": [], "source": [ "mod = gen.compile_module()" @@ -280,7 +337,14 @@ "cell_type": "code", "execution_count": 10, "id": "68b8b0c1", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:27.063339Z", + "iopub.status.busy": "2026-05-08T15:56:27.063168Z", + "iopub.status.idle": "2026-05-08T15:56:27.068159Z", + "shell.execute_reply": "2026-05-08T15:56:27.067287Z" + } + }, "outputs": [ { "data": { @@ -301,7 +365,14 @@ "cell_type": "code", "execution_count": 11, "id": "edd152f5", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:27.069775Z", + "iopub.status.busy": "2026-05-08T15:56:27.069632Z", + "iopub.status.idle": "2026-05-08T15:56:28.175347Z", + "shell.execute_reply": "2026-05-08T15:56:28.174389Z" + } + }, "outputs": [], "source": [ "import pytest" @@ -311,7 +382,14 @@ "cell_type": "code", "execution_count": 12, "id": "23f2c500", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.176958Z", + "iopub.status.busy": "2026-05-08T15:56:28.176803Z", + "iopub.status.idle": "2026-05-08T15:56:28.180171Z", + "shell.execute_reply": "2026-05-08T15:56:28.179368Z" + } + }, "outputs": [], "source": [ "with pytest.raises(ValueError):\n", @@ -322,7 +400,14 @@ "cell_type": "code", "execution_count": 13, "id": "46081bd4", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.181642Z", + "iopub.status.busy": "2026-05-08T15:56:28.181511Z", + "iopub.status.idle": "2026-05-08T15:56:28.185092Z", + "shell.execute_reply": "2026-05-08T15:56:28.184300Z" + } + }, "outputs": [ { "data": { @@ -343,7 +428,14 @@ "cell_type": "code", "execution_count": 14, "id": "3313a7d9", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.186434Z", + "iopub.status.busy": "2026-05-08T15:56:28.186308Z", + "iopub.status.idle": "2026-05-08T15:56:28.188929Z", + "shell.execute_reply": "2026-05-08T15:56:28.188152Z" + } + }, "outputs": [], "source": [ "with pytest.raises(ValueError):\n", @@ -364,13 +456,20 @@ "cell_type": "code", "execution_count": 15, "id": "5a013aa6", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.190566Z", + "iopub.status.busy": "2026-05-08T15:56:28.190444Z", + "iopub.status.idle": "2026-05-08T15:56:28.440634Z", + "shell.execute_reply": "2026-05-08T15:56:28.439514Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "from __future__ import annotations \n", + "from __future__ import annotations\n", "\n", "import re\n", "import sys\n", @@ -379,13 +478,11 @@ " datetime,\n", " time\n", ")\n", - "from decimal import Decimal \n", - "from enum import Enum \n", + "from decimal import Decimal\n", + "from enum import Enum\n", "from typing import (\n", " Any,\n", " ClassVar,\n", - " Dict,\n", - " List,\n", " Literal,\n", " Optional,\n", " Union\n", @@ -396,16 +493,21 @@ " ConfigDict,\n", " Field,\n", " RootModel,\n", - " field_validator\n", + " SerializationInfo,\n", + " SerializerFunctionWrapHandler,\n", + " field_validator,\n", + " model_serializer\n", ")\n", "\n", "\n", - "metamodel_version = \"None\"\n", + "metamodel_version = \"1.7.0\"\n", "version = \"None\"\n", "\n", "\n", "class ConfiguredBaseModel(BaseModel):\n", " model_config = ConfigDict(\n", + " serialize_by_alias = True,\n", + " validate_by_name = True,\n", " validate_assignment = True,\n", " validate_default = True,\n", " extra = \"forbid\",\n", @@ -413,13 +515,13 @@ " use_enum_values = True,\n", " strict = False,\n", " )\n", - " pass\n", + "\n", "\n", "\n", "\n", "\n", "class LinkMLMeta(RootModel):\n", - " root: Dict[str, Any] = {}\n", + " root: dict[str, Any] = {}\n", " model_config = ConfigDict(frozen=True)\n", "\n", " def __getattr__(self, key:str):\n", @@ -449,27 +551,27 @@ "class Container(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " things: Optional[List[Union[Thing,Building,Vehicle]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'things', 'domain_of': ['Container']} })\n", + " things: Optional[list[Union[Thing,Building,Vehicle]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Container']} })\n", "\n", "\n", "class Thing(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " type: Literal[\"https://example.org/Thing\",\"example:Thing\"] = Field(default=\"example:Thing\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " type: Literal[\"https://example.org/Thing\",\"example:Thing\"] = Field(default=\"example:Thing\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Building(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_floors', 'domain_of': ['Building']} })\n", - " type: Literal[\"https://example.org/Building\",\"example:Building\"] = Field(default=\"example:Building\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Building']} })\n", + " type: Literal[\"https://example.org/Building\",\"example:Building\"] = Field(default=\"example:Building\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Vehicle(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_wheels', 'domain_of': ['Vehicle']} })\n", - " type: Literal[\"https://example.org/Vehicle\",\"example:Vehicle\"] = Field(default=\"example:Vehicle\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Vehicle']} })\n", + " type: Literal[\"https://example.org/Vehicle\",\"example:Vehicle\"] = Field(default=\"example:Vehicle\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "# Model rebuild\n", @@ -493,7 +595,14 @@ "cell_type": "code", "execution_count": 16, "id": "73eacb9d", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.442246Z", + "iopub.status.busy": "2026-05-08T15:56:28.442088Z", + "iopub.status.idle": "2026-05-08T15:56:28.446180Z", + "shell.execute_reply": "2026-05-08T15:56:28.445269Z" + } + }, "outputs": [ { "data": { @@ -514,13 +623,20 @@ "cell_type": "code", "execution_count": 17, "id": "161b1224", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.447606Z", + "iopub.status.busy": "2026-05-08T15:56:28.447447Z", + "iopub.status.idle": "2026-05-08T15:56:28.688557Z", + "shell.execute_reply": "2026-05-08T15:56:28.687371Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "from __future__ import annotations \n", + "from __future__ import annotations\n", "\n", "import re\n", "import sys\n", @@ -529,13 +645,11 @@ " datetime,\n", " time\n", ")\n", - "from decimal import Decimal \n", - "from enum import Enum \n", + "from decimal import Decimal\n", + "from enum import Enum\n", "from typing import (\n", " Any,\n", " ClassVar,\n", - " Dict,\n", - " List,\n", " Literal,\n", " Optional,\n", " Union\n", @@ -546,16 +660,21 @@ " ConfigDict,\n", " Field,\n", " RootModel,\n", - " field_validator\n", + " SerializationInfo,\n", + " SerializerFunctionWrapHandler,\n", + " field_validator,\n", + " model_serializer\n", ")\n", "\n", "\n", - "metamodel_version = \"None\"\n", + "metamodel_version = \"1.7.0\"\n", "version = \"None\"\n", "\n", "\n", "class ConfiguredBaseModel(BaseModel):\n", " model_config = ConfigDict(\n", + " serialize_by_alias = True,\n", + " validate_by_name = True,\n", " validate_assignment = True,\n", " validate_default = True,\n", " extra = \"forbid\",\n", @@ -563,13 +682,13 @@ " use_enum_values = True,\n", " strict = False,\n", " )\n", - " pass\n", + "\n", "\n", "\n", "\n", "\n", "class LinkMLMeta(RootModel):\n", - " root: Dict[str, Any] = {}\n", + " root: dict[str, Any] = {}\n", " model_config = ConfigDict(frozen=True)\n", "\n", " def __getattr__(self, key:str):\n", @@ -599,27 +718,27 @@ "class Container(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " things: Optional[List[Union[Thing,Building,Vehicle]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'things', 'domain_of': ['Container']} })\n", + " things: Optional[list[Union[Thing,Building,Vehicle]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Container']} })\n", "\n", "\n", "class Thing(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " type: Literal[\"https://example.org/Thing\",\"example:Thing\"] = Field(default=\"https://example.org/Thing\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " type: Literal[\"https://example.org/Thing\",\"example:Thing\"] = Field(default=\"https://example.org/Thing\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Building(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_floors', 'domain_of': ['Building']} })\n", - " type: Literal[\"https://example.org/Building\",\"example:Building\"] = Field(default=\"https://example.org/Building\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Building']} })\n", + " type: Literal[\"https://example.org/Building\",\"example:Building\"] = Field(default=\"https://example.org/Building\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Vehicle(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_wheels', 'domain_of': ['Vehicle']} })\n", - " type: Literal[\"https://example.org/Vehicle\",\"example:Vehicle\"] = Field(default=\"https://example.org/Vehicle\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Vehicle']} })\n", + " type: Literal[\"https://example.org/Vehicle\",\"example:Vehicle\"] = Field(default=\"https://example.org/Vehicle\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "# Model rebuild\n", @@ -672,7 +791,14 @@ "cell_type": "code", "execution_count": 18, "id": "5471eebf", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.690347Z", + "iopub.status.busy": "2026-05-08T15:56:28.690206Z", + "iopub.status.idle": "2026-05-08T15:56:28.695736Z", + "shell.execute_reply": "2026-05-08T15:56:28.694943Z" + } + }, "outputs": [ { "data": { @@ -736,22 +862,28 @@ " attributes:\n", " num_floors:\n", " range: integer\n", - " \n", + "\n", " Container:\n", " attributes:\n", " things:\n", " any_of:\n", " - range: Vehicle\n", " - range: Building\n", - " multivalued: true\n", - " " + " multivalued: true\n" ] }, { "cell_type": "code", "execution_count": 19, "id": "eb108020", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.697477Z", + "iopub.status.busy": "2026-05-08T15:56:28.697349Z", + "iopub.status.idle": "2026-05-08T15:56:28.702905Z", + "shell.execute_reply": "2026-05-08T15:56:28.702106Z" + } + }, "outputs": [], "source": [ "model_str = yaml.dump(model)\n", @@ -763,13 +895,20 @@ "cell_type": "code", "execution_count": 20, "id": "5125a057", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:28.704459Z", + "iopub.status.busy": "2026-05-08T15:56:28.704295Z", + "iopub.status.idle": "2026-05-08T15:56:29.041874Z", + "shell.execute_reply": "2026-05-08T15:56:29.041007Z" + } + }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "from __future__ import annotations \n", + "from __future__ import annotations\n", "\n", "import re\n", "import sys\n", @@ -778,13 +917,11 @@ " datetime,\n", " time\n", ")\n", - "from decimal import Decimal \n", - "from enum import Enum \n", + "from decimal import Decimal\n", + "from enum import Enum\n", "from typing import (\n", " Any,\n", " ClassVar,\n", - " Dict,\n", - " List,\n", " Literal,\n", " Optional,\n", " Union\n", @@ -795,16 +932,21 @@ " ConfigDict,\n", " Field,\n", " RootModel,\n", - " field_validator\n", + " SerializationInfo,\n", + " SerializerFunctionWrapHandler,\n", + " field_validator,\n", + " model_serializer\n", ")\n", "\n", "\n", - "metamodel_version = \"None\"\n", + "metamodel_version = \"1.7.0\"\n", "version = \"None\"\n", "\n", "\n", "class ConfiguredBaseModel(BaseModel):\n", " model_config = ConfigDict(\n", + " serialize_by_alias = True,\n", + " validate_by_name = True,\n", " validate_assignment = True,\n", " validate_default = True,\n", " extra = \"forbid\",\n", @@ -812,13 +954,13 @@ " use_enum_values = True,\n", " strict = False,\n", " )\n", - " pass\n", + "\n", "\n", "\n", "\n", "\n", "class LinkMLMeta(RootModel):\n", - " root: Dict[str, Any] = {}\n", + " root: dict[str, Any] = {}\n", " model_config = ConfigDict(frozen=True)\n", "\n", " def __getattr__(self, key:str):\n", @@ -847,45 +989,44 @@ "class Container(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " things: Optional[List[Union[Building, Union[Vehicle,Bicycle,Car]]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'things',\n", - " 'any_of': [{'range': 'Vehicle'}, {'range': 'Building'}],\n", + " things: Optional[list[Union[Building, Union[Vehicle,Bicycle,Car]]]] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'any_of': [{'range': 'Vehicle'}, {'range': 'Building'}],\n", " 'domain_of': ['Container']} })\n", "\n", "\n", "class Thing(ConfiguredBaseModel):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " type: Literal[\"Thing\"] = Field(default=\"Thing\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " type: Literal[\"Thing\"] = Field(default=\"Thing\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Building(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_floors', 'domain_of': ['Building']} })\n", - " type: Literal[\"Building\"] = Field(default=\"Building\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_floors: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Building']} })\n", + " type: Literal[\"Building\"] = Field(default=\"Building\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Vehicle(Thing):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/'})\n", "\n", - " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_wheels', 'domain_of': ['Vehicle']} })\n", - " type: Literal[\"Vehicle\"] = Field(default=\"Vehicle\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Vehicle']} })\n", + " type: Literal[\"Vehicle\"] = Field(default=\"Vehicle\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Bicycle(Vehicle):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/',\n", " 'slot_usage': {'num_wheels': {'equals_expression': '4', 'name': 'num_wheels'}}})\n", "\n", - " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_wheels', 'domain_of': ['Vehicle'], 'equals_expression': '4'} })\n", - " type: Literal[\"Bicycle\"] = Field(default=\"Bicycle\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Vehicle'], 'equals_expression': '4'} })\n", + " type: Literal[\"Bicycle\"] = Field(default=\"Bicycle\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "class Car(Vehicle):\n", " linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://example.org/',\n", " 'slot_usage': {'num_wheels': {'equals_expression': '2', 'name': 'num_wheels'}}})\n", "\n", - " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'alias': 'num_wheels', 'domain_of': ['Vehicle'], 'equals_expression': '2'} })\n", - " type: Literal[\"Car\"] = Field(default=\"Car\", json_schema_extra = { \"linkml_meta\": {'alias': 'type', 'designates_type': True, 'domain_of': ['Thing']} })\n", + " num_wheels: Optional[int] = Field(default=None, json_schema_extra = { \"linkml_meta\": {'domain_of': ['Vehicle'], 'equals_expression': '2'} })\n", + " type: Literal[\"Car\"] = Field(default=\"Car\", json_schema_extra = { \"linkml_meta\": {'designates_type': True, 'domain_of': ['Thing']} })\n", "\n", "\n", "# Model rebuild\n", @@ -911,7 +1052,14 @@ "cell_type": "code", "execution_count": 21, "id": "2599c367", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:29.043584Z", + "iopub.status.busy": "2026-05-08T15:56:29.043435Z", + "iopub.status.idle": "2026-05-08T15:56:29.046143Z", + "shell.execute_reply": "2026-05-08T15:56:29.045389Z" + } + }, "outputs": [], "source": [ "# TODO: flatten unions" @@ -921,7 +1069,14 @@ "cell_type": "code", "execution_count": 22, "id": "52a742f8", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:29.047451Z", + "iopub.status.busy": "2026-05-08T15:56:29.047314Z", + "iopub.status.idle": "2026-05-08T15:56:29.051016Z", + "shell.execute_reply": "2026-05-08T15:56:29.050323Z" + } + }, "outputs": [ { "data": { @@ -942,7 +1097,14 @@ "cell_type": "code", "execution_count": 23, "id": "23f35fee", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:29.052385Z", + "iopub.status.busy": "2026-05-08T15:56:29.052249Z", + "iopub.status.idle": "2026-05-08T15:56:29.054842Z", + "shell.execute_reply": "2026-05-08T15:56:29.054044Z" + } + }, "outputs": [], "source": [ "# TODO: expressions" @@ -960,7 +1122,14 @@ "cell_type": "code", "execution_count": 24, "id": "7d897da4", - "metadata": {}, + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:56:29.056350Z", + "iopub.status.busy": "2026-05-08T15:56:29.056209Z", + "iopub.status.idle": "2026-05-08T15:56:29.062261Z", + "shell.execute_reply": "2026-05-08T15:56:29.061446Z" + } + }, "outputs": [ { "data": { @@ -1024,15 +1193,14 @@ " attributes:\n", " num_floors:\n", " range: integer\n", - " \n", + "\n", " Container:\n", " attributes:\n", " things:\n", " any_of:\n", " - range: Vehicle\n", " - range: Building\n", - " multivalued: true\n", - " " + " multivalued: true\n" ] } ], @@ -1052,7 +1220,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.13.13" } }, "nbformat": 4, diff --git a/notebooks/context_issue.ipynb b/notebooks/context_issue.ipynb index 475e79db0a..ed34a30010 100644 --- a/notebooks/context_issue.ipynb +++ b/notebooks/context_issue.ipynb @@ -45,18 +45,18 @@ "execution_count": 1, "metadata": { "execution": { - "iopub.execute_input": "2021-04-02T22:12:10.479447Z", - "iopub.status.busy": "2021-04-02T22:12:10.478646Z", - "iopub.status.idle": "2021-04-02T22:12:17.393109Z", - "shell.execute_reply": "2021-04-02T22:12:17.393645Z" + "iopub.execute_input": "2026-05-08T15:54:13.951669Z", + "iopub.status.busy": "2026-05-08T15:54:13.951357Z", + "iopub.status.idle": "2026-05-08T15:54:16.976228Z", + "shell.execute_reply": "2026-05-08T15:54:16.975251Z" } }, "outputs": [], "source": [ - "!pip install -q --disable-pip-version-check prefixcommons\n", - "!pip install -q --disable-pip-version-check rdflib\n", - "!pip install -q --disable-pip-version-check rdflib-jsonld\n", - "!pip install -q --disable-pip-version-check jsonasobj" + "!uv pip install -q --disable-pip-version-check prefixcommons\n", + "!uv pip install -q --disable-pip-version-check rdflib\n", + "!uv pip install -q --disable-pip-version-check rdflib-jsonld\n", + "!uv pip install -q --disable-pip-version-check jsonasobj" ] }, { @@ -75,16 +75,25 @@ "execution_count": 2, "metadata": { "execution": { - "iopub.execute_input": "2021-04-02T22:12:17.401251Z", - "iopub.status.busy": "2021-04-02T22:12:17.400485Z", - "iopub.status.idle": "2021-04-02T22:12:17.782915Z", - "shell.execute_reply": "2021-04-02T22:12:17.783365Z" + "iopub.execute_input": "2026-05-08T15:54:16.978263Z", + "iopub.status.busy": "2026-05-08T15:54:16.978012Z", + "iopub.status.idle": "2026-05-08T15:54:18.010369Z", + "shell.execute_reply": "2026-05-08T15:54:18.009392Z" }, "pycharm": { "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/c/Users/Yuyao/PycharmProjects/PythonProject/linkml/.venv/lib/python3.13/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.5.0) or chardet (7.4.3)/charset_normalizer (3.4.4) doesn't match a supported version!\n", + " warnings.warn(\n" + ] + } + ], "source": [ "from contextlib import closing\n", "from typing import Optional, Dict\n", @@ -131,10 +140,10 @@ "execution_count": 3, "metadata": { "execution": { - "iopub.execute_input": "2021-04-02T22:12:17.787662Z", - "iopub.status.busy": "2021-04-02T22:12:17.787070Z", - "iopub.status.idle": "2021-04-02T22:12:17.845586Z", - "shell.execute_reply": "2021-04-02T22:12:17.846083Z" + "iopub.execute_input": "2026-05-08T15:54:18.012037Z", + "iopub.status.busy": "2026-05-08T15:54:18.011876Z", + "iopub.status.idle": "2026-05-08T15:54:18.339056Z", + "shell.execute_reply": "2026-05-08T15:54:18.338337Z" }, "pycharm": { "name": "#%%\n" @@ -169,10 +178,10 @@ "execution_count": 4, "metadata": { "execution": { - "iopub.execute_input": "2021-04-02T22:12:17.850781Z", - "iopub.status.busy": "2021-04-02T22:12:17.850193Z", - "iopub.status.idle": "2021-04-02T22:12:17.913036Z", - "shell.execute_reply": "2021-04-02T22:12:17.913552Z" + "iopub.execute_input": "2026-05-08T15:54:18.341883Z", + "iopub.status.busy": "2026-05-08T15:54:18.341743Z", + "iopub.status.idle": "2026-05-08T15:54:18.350906Z", + "shell.execute_reply": "2026-05-08T15:54:18.350262Z" }, "pycharm": { "name": "#%%\n" @@ -206,10 +215,10 @@ "execution_count": 5, "metadata": { "execution": { - "iopub.execute_input": "2021-04-02T22:12:17.918568Z", - "iopub.status.busy": "2021-04-02T22:12:17.917842Z", - "iopub.status.idle": "2021-04-02T22:12:17.948590Z", - "shell.execute_reply": "2021-04-02T22:12:17.949023Z" + "iopub.execute_input": "2026-05-08T15:54:18.352297Z", + "iopub.status.busy": "2026-05-08T15:54:18.352129Z", + "iopub.status.idle": "2026-05-08T15:54:18.559033Z", + "shell.execute_reply": "2026-05-08T15:54:18.558406Z" }, "pycharm": { "name": "#%%\n" @@ -250,7 +259,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.2" + "version": "3.13.13" } }, "nbformat": 4, diff --git a/notebooks/enumerations.ipynb b/notebooks/enumerations.ipynb index f588802a34..ce3ce92436 100644 --- a/notebooks/enumerations.ipynb +++ b/notebooks/enumerations.ipynb @@ -21,13 +21,19 @@ "cell_type": "code", "execution_count": 1, "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:47.665570Z", + "iopub.status.busy": "2026-05-08T15:54:47.665420Z", + "iopub.status.idle": "2026-05-08T15:54:48.479120Z", + "shell.execute_reply": "2026-05-08T15:54:48.477884Z" + }, "pycharm": { "name": "#%%\n" } }, "outputs": [], "source": [ - "!pip install -q --disable-pip-version-check yamlmagic\n", + "!uv pip install -q --disable-pip-version-check yamlmagic\n", "%reload_ext yamlmagic" ] }, @@ -51,6 +57,12 @@ "execution_count": 2, "metadata": { "collapsed": false, + "execution": { + "iopub.execute_input": "2026-05-08T15:54:48.481002Z", + "iopub.status.busy": "2026-05-08T15:54:48.480835Z", + "iopub.status.idle": "2026-05-08T15:54:53.594185Z", + "shell.execute_reply": "2026-05-08T15:54:53.593127Z" + }, "jupyter": { "outputs_hidden": false }, @@ -58,7 +70,16 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/mnt/c/Users/Yuyao/PycharmProjects/PythonProject/linkml/.venv/lib/python3.13/site-packages/requests/__init__.py:113: RequestsDependencyWarning: urllib3 (2.5.0) or chardet (7.4.3)/charset_normalizer (3.4.4) doesn't match a supported version!\n", + " warnings.warn(\n" + ] + } + ], "source": [ "from linkml.generators.pythongen import PythonGenerator\n", "from linkml_runtime.utils.compile_python import compile_python\n", @@ -84,6 +105,12 @@ "execution_count": 3, "metadata": { "collapsed": false, + "execution": { + "iopub.execute_input": "2026-05-08T15:54:53.596090Z", + "iopub.status.busy": "2026-05-08T15:54:53.595848Z", + "iopub.status.idle": "2026-05-08T15:54:53.603439Z", + "shell.execute_reply": "2026-05-08T15:54:53.602558Z" + }, "jupyter": { "outputs_hidden": false }, @@ -162,6 +189,12 @@ "cell_type": "code", "execution_count": 4, "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:53.604911Z", + "iopub.status.busy": "2026-05-08T15:54:53.604779Z", + "iopub.status.idle": "2026-05-08T15:54:53.872557Z", + "shell.execute_reply": "2026-05-08T15:54:53.871537Z" + }, "pycharm": { "name": "#%%\n" } @@ -172,7 +205,7 @@ "output_type": "stream", "text": [ "# Auto generated from None by pythongen.py version: 0.0.1\n", - "# Generation date: 2025-01-09T17:10:06\n", + "# Generation date: 2026-05-08T16:54:53\n", "# Schema: simple\n", "#\n", "# id: http://example.org/test/simple\n", @@ -206,7 +239,6 @@ " PvFormulaOptions\n", ")\n", "from linkml_runtime.utils.curienamespace import CurieNamespace\n", - "from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs\n", "from linkml_runtime.utils.enumerations import EnumDefinitionImpl\n", "from linkml_runtime.utils.formatutils import (\n", " camelcase,\n", @@ -235,9 +267,6 @@ "metamodel_version = \"1.7.0\"\n", "version = None\n", "\n", - "# Overwrite dataclasses _init_fn to add **kwargs in __init__\n", - "dataclasses._init_fn = dataclasses_init_fn_with_kwargs\n", - "\n", "# Namespaces\n", "CS = CurieNamespace('CS', 'http://ontologies-r.us/codesystem/')\n", "LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/')\n", @@ -260,7 +289,7 @@ " id: Union[str, PositionalRecordId] = None\n", " position: Union[str, \"Position\"] = None\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.id):\n", " self.MissingRequiredField(\"id\")\n", " if not isinstance(self.id, PositionalRecordId):\n", @@ -341,6 +370,12 @@ "execution_count": 5, "metadata": { "collapsed": false, + "execution": { + "iopub.execute_input": "2026-05-08T15:54:53.874258Z", + "iopub.status.busy": "2026-05-08T15:54:53.874123Z", + "iopub.status.idle": "2026-05-08T15:54:53.879466Z", + "shell.execute_reply": "2026-05-08T15:54:53.878351Z" + }, "jupyter": { "outputs_hidden": false }, @@ -417,6 +452,12 @@ "execution_count": 6, "metadata": { "collapsed": false, + "execution": { + "iopub.execute_input": "2026-05-08T15:54:53.881847Z", + "iopub.status.busy": "2026-05-08T15:54:53.881718Z", + "iopub.status.idle": "2026-05-08T15:54:53.998782Z", + "shell.execute_reply": "2026-05-08T15:54:53.997913Z" + }, "jupyter": { "outputs_hidden": false }, @@ -430,7 +471,7 @@ "output_type": "stream", "text": [ "# Auto generated from None by pythongen.py version: 0.0.1\n", - "# Generation date: 2025-01-09T17:10:13\n", + "# Generation date: 2026-05-08T16:54:53\n", "# Schema: simple\n", "#\n", "# id: http://example.org/test/simple\n", @@ -464,7 +505,6 @@ " PvFormulaOptions\n", ")\n", "from linkml_runtime.utils.curienamespace import CurieNamespace\n", - "from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs\n", "from linkml_runtime.utils.enumerations import EnumDefinitionImpl\n", "from linkml_runtime.utils.formatutils import (\n", " camelcase,\n", @@ -493,9 +533,6 @@ "metamodel_version = \"1.7.0\"\n", "version = None\n", "\n", - "# Overwrite dataclasses _init_fn to add **kwargs in __init__\n", - "dataclasses._init_fn = dataclasses_init_fn_with_kwargs\n", - "\n", "# Namespaces\n", "LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/')\n", "PLAY = CurieNamespace('play', 'http://example.org/test/play/')\n", @@ -512,9 +549,9 @@ "@dataclass(repr=False)\n", "class Sample(YAMLRoot):\n", " key: Union[str, SampleKey] = None\n", - " enumentry: Optional[Union[Union[str, \"UnusualEnumPatterns\"], List[Union[str, \"UnusualEnumPatterns\"]]]] = empty_list()\n", + " enumentry: Optional[Union[Union[str, \"UnusualEnumPatterns\"], list[Union[str, \"UnusualEnumPatterns\"]]]] = empty_list()\n", "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", + " def __post_init__(self, *_: str, **kwargs: Any):\n", " if self._is_empty(self.key):\n", " self.MissingRequiredField(\"key\")\n", " if not isinstance(self.key, SampleKey):\n", @@ -598,6 +635,12 @@ "execution_count": 7, "metadata": { "collapsed": false, + "execution": { + "iopub.execute_input": "2026-05-08T15:54:54.000683Z", + "iopub.status.busy": "2026-05-08T15:54:54.000501Z", + "iopub.status.idle": "2026-05-08T15:54:54.006405Z", + "shell.execute_reply": "2026-05-08T15:54:54.005619Z" + }, "jupyter": { "outputs_hidden": false }, @@ -685,6 +728,12 @@ "cell_type": "code", "execution_count": 8, "metadata": { + "execution": { + "iopub.execute_input": "2026-05-08T15:54:54.007785Z", + "iopub.status.busy": "2026-05-08T15:54:54.007653Z", + "iopub.status.idle": "2026-05-08T15:54:54.121816Z", + "shell.execute_reply": "2026-05-08T15:54:54.120830Z" + }, "pycharm": { "name": "#%%\n" } @@ -765,7 +814,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.13.13" } }, "nbformat": 4, diff --git a/notebooks/examples.ipynb b/notebooks/examples.ipynb index a13144784b..5ba91cc38b 100644 --- a/notebooks/examples.ipynb +++ b/notebooks/examples.ipynb @@ -9,19 +9,31 @@ }, { "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:29.142910Z", + "iopub.status.busy": "2026-05-09T11:48:29.142060Z", + "iopub.status.idle": "2026-05-09T11:48:29.266847Z", + "shell.execute_reply": "2026-05-09T11:48:29.264917Z" + } + }, "source": [ - "!pip -q --disable-pip-version-check install yamlmagic\n", + "!uv pip -q --disable-pip-version-check install yamlmagic\n", "%reload_ext yamlmagic" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:29.270966Z", + "iopub.status.busy": "2026-05-09T11:48:29.270651Z", + "iopub.status.idle": "2026-05-09T11:48:30.631760Z", + "shell.execute_reply": "2026-05-09T11:48:30.630604Z" + } + }, "source": [ "from IPython.display import display, HTML\n", "from types import ModuleType\n", @@ -32,10 +44,12 @@ "from linkml.generators.jsonldcontextgen import ContextGenerator\n", "from linkml.generators.pythongen import PythonGenerator\n", "from linkml.generators.shexgen import ShExGenerator\n", - "from linkml.generators.yumlgen import YumlGenerator\n", + "from linkml.generators.yamlgen import YAMLGenerator\n", "from linkml_runtime.utils.yamlutils import DupCheckYamlLoader\n", "from linkml_runtime.dumpers import json_dumper" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -55,34 +69,14 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "application/javascript": [ - "\n", - " require(\n", - " [\n", - " \"notebook/js/codecell\",\n", - " \"codemirror/mode/yaml/yaml\"\n", - " ],\n", - " function(cc){\n", - " cc.CodeCell.options_default.highlight_modes.magic_yaml = {\n", - " reg: [\"^%%yaml\"]\n", - " }\n", - " }\n", - " );\n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:30.636455Z", + "iopub.status.busy": "2026-05-09T11:48:30.636015Z", + "iopub.status.idle": "2026-05-09T11:48:30.656994Z", + "shell.execute_reply": "2026-05-09T11:48:30.655308Z" } - ], + }, "source": [ "%%yaml model\n", "id: http://example.org/sample/example1\n", @@ -160,7 +154,9 @@ " range: person\n", " slot_uri: foaf:knows\n", " multivalued: true" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -171,209 +167,21 @@ }, { "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# Auto generated from None by pythongen.py version: 0.0.1\n", - "# Generation date: 2025-01-09T17:12:55\n", - "# Schema: synopsis2\n", - "#\n", - "# id: http://example.org/sample/example1\n", - "# description:\n", - "# license:\n", - "\n", - "import dataclasses\n", - "import re\n", - "from dataclasses import dataclass\n", - "from datetime import (\n", - " date,\n", - " datetime,\n", - " time\n", - ")\n", - "from typing import (\n", - " Any,\n", - " ClassVar,\n", - " Dict,\n", - " List,\n", - " Optional,\n", - " Union\n", - ")\n", - "\n", - "from jsonasobj2 import (\n", - " JsonObj,\n", - " as_dict\n", - ")\n", - "from linkml_runtime.linkml_model.meta import (\n", - " EnumDefinition,\n", - " PermissibleValue,\n", - " PvFormulaOptions\n", - ")\n", - "from linkml_runtime.utils.curienamespace import CurieNamespace\n", - "from linkml_runtime.utils.dataclass_extensions_376 import dataclasses_init_fn_with_kwargs\n", - "from linkml_runtime.utils.enumerations import EnumDefinitionImpl\n", - "from linkml_runtime.utils.formatutils import (\n", - " camelcase,\n", - " sfx,\n", - " underscore\n", - ")\n", - "from linkml_runtime.utils.metamodelcore import (\n", - " bnode,\n", - " empty_dict,\n", - " empty_list\n", - ")\n", - "from linkml_runtime.utils.slot import Slot\n", - "from linkml_runtime.utils.yamlutils import (\n", - " YAMLRoot,\n", - " extended_float,\n", - " extended_int,\n", - " extended_str\n", - ")\n", - "from rdflib import (\n", - " Namespace,\n", - " URIRef\n", - ")\n", - "\n", - "from linkml_runtime.utils.metamodelcore import Bool\n", - "\n", - "metamodel_version = \"1.7.0\"\n", - "version = None\n", - "\n", - "# Overwrite dataclasses _init_fn to add **kwargs in __init__\n", - "dataclasses._init_fn = dataclasses_init_fn_with_kwargs\n", - "\n", - "# Namespaces\n", - "FOAF = CurieNamespace('foaf', 'http://xmlns.com/foaf/0.1/')\n", - "SAMP = CurieNamespace('samp', 'http://example.org/model/')\n", - "XSD = CurieNamespace('xsd', 'http://www.w3.org/2001/XMLSchema#')\n", - "DEFAULT_ = SAMP\n", - "\n", - "\n", - "# Types\n", - "class Boolean(Bool):\n", - " type_class_uri = XSD[\"boolean\"]\n", - " type_class_curie = \"xsd:boolean\"\n", - " type_name = \"boolean\"\n", - " type_model_uri = SAMP.Boolean\n", - "\n", - "\n", - "class Int(int):\n", - " type_class_uri = XSD[\"integer\"]\n", - " type_class_curie = \"xsd:integer\"\n", - " type_name = \"int\"\n", - " type_model_uri = SAMP.Int\n", - "\n", - "\n", - "class String(str):\n", - " type_class_uri = XSD[\"string\"]\n", - " type_class_curie = \"xsd:string\"\n", - " type_name = \"string\"\n", - " type_model_uri = SAMP.String\n", - "\n", - "\n", - "# Class references\n", - "class PersonId(extended_str):\n", - " pass\n", - "\n", - "\n", - "class FriendlyPersonId(PersonId):\n", - " pass\n", - "\n", - "\n", - "@dataclass(repr=False)\n", - "class Person(YAMLRoot):\n", - " \"\"\"\n", - " A person, living or dead\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", - "\n", - " class_class_uri: ClassVar[URIRef] = SAMP[\"Person\"]\n", - " class_class_curie: ClassVar[str] = \"samp:Person\"\n", - " class_name: ClassVar[str] = \"person\"\n", - " class_model_uri: ClassVar[URIRef] = SAMP.Person\n", - "\n", - " id: Union[str, PersonId] = None\n", - " last_name: str = None\n", - " first_name: Optional[Union[str, List[str]]] = empty_list()\n", - " age: Optional[int] = None\n", - " living: Optional[Bool] = None\n", - " knows: Optional[Union[Union[str, PersonId], List[Union[str, PersonId]]]] = empty_list()\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self._is_empty(self.id):\n", - " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, PersonId):\n", - " self.id = PersonId(self.id)\n", - "\n", - " if self._is_empty(self.last_name):\n", - " self.MissingRequiredField(\"last_name\")\n", - " if not isinstance(self.last_name, str):\n", - " self.last_name = str(self.last_name)\n", - "\n", - " if not isinstance(self.first_name, list):\n", - " self.first_name = [self.first_name] if self.first_name is not None else []\n", - " self.first_name = [v if isinstance(v, str) else str(v) for v in self.first_name]\n", - "\n", - " if self.age is not None and not isinstance(self.age, int):\n", - " self.age = int(self.age)\n", - "\n", - " if self.living is not None and not isinstance(self.living, Bool):\n", - " self.living = Bool(self.living)\n", - "\n", - " if not isinstance(self.knows, list):\n", - " self.knows = [self.knows] if self.knows is not None else []\n", - " self.knows = [v if isinstance(v, PersonId) else PersonId(v) for v in self.knows]\n", - "\n", - " super().__post_init__(**kwargs)\n", - "\n", - "\n", - "@dataclass(repr=False)\n", - "class FriendlyPerson(Person):\n", - " \"\"\"\n", - " Any person that knows someone\n", - " \"\"\"\n", - " _inherited_slots: ClassVar[List[str]] = []\n", - "\n", - " class_class_uri: ClassVar[URIRef] = SAMP[\"FriendlyPerson\"]\n", - " class_class_curie: ClassVar[str] = \"samp:FriendlyPerson\"\n", - " class_name: ClassVar[str] = \"friendly_person\"\n", - " class_model_uri: ClassVar[URIRef] = SAMP.FriendlyPerson\n", - "\n", - " id: Union[str, FriendlyPersonId] = None\n", - " last_name: str = None\n", - " knows: Union[Union[str, PersonId], List[Union[str, PersonId]]] = None\n", - "\n", - " def __post_init__(self, *_: List[str], **kwargs: Dict[str, Any]):\n", - " if self._is_empty(self.id):\n", - " self.MissingRequiredField(\"id\")\n", - " if not isinstance(self.id, FriendlyPersonId):\n", - " self.id = FriendlyPersonId(self.id)\n", - "\n", - " if self._is_empty(self.knows):\n", - " self.MissingRequiredField(\"knows\")\n", - " if not isinstance(self.knows, list):\n", - " self.knows = [self.knows] if self.knows is not None else []\n", - " self.knows = [v if isinstance(v, PersonId) else PersonId(v) for v in self.knows]\n", - "\n", - " super().__post_init__(**kwargs)\n", - "\n", - "\n", - "# Enumerations\n", - "\n", - "\n", - "# Slots\n", - "\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:30.661936Z", + "iopub.status.busy": "2026-05-09T11:48:30.661322Z", + "iopub.status.idle": "2026-05-09T11:48:30.949439Z", + "shell.execute_reply": "2026-05-09T11:48:30.948106Z" } - ], + }, "source": [ "import yaml\n", "model_str = yaml.dump(model)\n", "print(PythonGenerator(model_str, gen_slots=False).serialize())" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -384,14 +192,21 @@ }, { "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [], + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:30.952648Z", + "iopub.status.busy": "2026-05-09T11:48:30.952081Z", + "iopub.status.idle": "2026-05-09T11:48:30.980504Z", + "shell.execute_reply": "2026-05-09T11:48:30.979164Z" + } + }, "source": [ "spec = compile(PythonGenerator(model_str).serialize(), 'test', 'exec')\n", "module = ModuleType('test')\n", "exec(spec, module.__dict__)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -402,25 +217,19 @@ }, { "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "[Person],[Person]^-[FriendlyPerson],[FriendlyPerson]\"/>" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:30.985072Z", + "iopub.status.busy": "2026-05-09T11:48:30.984613Z", + "iopub.status.idle": "2026-05-09T11:48:31.007944Z", + "shell.execute_reply": "2026-05-09T11:48:31.006636Z" } - ], + }, "source": [ - "display(HTML(f''))" - ] + "display(HTML(f''))" + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -431,60 +240,20 @@ }, { "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\n", - " \"comments\": {\n", - " \"description\": \"Auto generated by LinkML jsonld context generator\",\n", - " \"generation_date\": \"2025-01-09T17:12:57\",\n", - " \"source\": null\n", - " },\n", - " \"@context\": {\n", - " \"xsd\": \"http://www.w3.org/2001/XMLSchema#\",\n", - " \"foaf\": \"http://xmlns.com/foaf/0.1/\",\n", - " \"samp\": \"http://example.org/model/\",\n", - " \"@vocab\": \"http://example.org/model/\",\n", - " \"age\": {\n", - " \"@type\": \"xsd:integer\",\n", - " \"@id\": \"foaf:age\"\n", - " },\n", - " \"first_name\": {\n", - " \"@id\": \"foaf:firstName\"\n", - " },\n", - " \"id\": \"@id\",\n", - " \"knows\": {\n", - " \"@type\": \"@id\",\n", - " \"@id\": \"foaf:knows\"\n", - " },\n", - " \"last_name\": {\n", - " \"@id\": \"foaf:lastName\"\n", - " },\n", - " \"living\": {\n", - " \"@type\": \"xsd:boolean\",\n", - " \"@id\": \"living\"\n", - " },\n", - " \"@base\": \"http://example.org/people/\",\n", - " \"FriendlyPerson\": {\n", - " \"@id\": \"FriendlyPerson\"\n", - " },\n", - " \"Person\": {\n", - " \"@id\": \"Person\"\n", - " }\n", - " }\n", - "}\n", - "\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:31.010873Z", + "iopub.status.busy": "2026-05-09T11:48:31.010567Z", + "iopub.status.idle": "2026-05-09T11:48:31.023952Z", + "shell.execute_reply": "2026-05-09T11:48:31.022796Z" } - ], + }, "source": [ "cntxt = ContextGenerator(model_str).serialize(base=\"http://example.org/people/\")\n", "print(cntxt)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -495,22 +264,21 @@ }, { "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Person({'id': '42', 'last_name': 'smith', 'first_name': ['Joe', 'Bob'], 'age': 43})\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:31.026670Z", + "iopub.status.busy": "2026-05-09T11:48:31.026402Z", + "iopub.status.idle": "2026-05-09T11:48:31.031952Z", + "shell.execute_reply": "2026-05-09T11:48:31.030768Z" } - ], + }, "source": [ "# Generate a person\n", "joe_smith = module.Person(id=\"42\", last_name=\"smith\", first_name=['Joe', 'Bob'], age=43)\n", "print(joe_smith)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -521,69 +289,14 @@ }, { "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "{\n", - " \"id\": \"42\",\n", - " \"last_name\": \"smith\",\n", - " \"first_name\": [\n", - " \"Joe\",\n", - " \"Bob\"\n", - " ],\n", - " \"age\": 43,\n", - " \"@type\": \"Person\",\n", - " \"@context\": {\n", - " \"xsd\": \"http://www.w3.org/2001/XMLSchema#\",\n", - " \"foaf\": \"http://xmlns.com/foaf/0.1/\",\n", - " \"samp\": \"http://example.org/model/\",\n", - " \"@vocab\": \"http://example.org/model/\",\n", - " \"age\": {\n", - " \"@type\": \"xsd:integer\",\n", - " \"@id\": \"foaf:age\"\n", - " },\n", - " \"first_name\": {\n", - " \"@id\": \"foaf:firstName\"\n", - " },\n", - " \"id\": \"@id\",\n", - " \"knows\": {\n", - " \"@type\": \"@id\",\n", - " \"@id\": \"foaf:knows\"\n", - " },\n", - " \"last_name\": {\n", - " \"@id\": \"foaf:lastName\"\n", - " },\n", - " \"living\": {\n", - " \"@type\": \"xsd:boolean\",\n", - " \"@id\": \"living\"\n", - " },\n", - " \"@base\": \"http://example.org/people/\",\n", - " \"FriendlyPerson\": {\n", - " \"@id\": \"FriendlyPerson\"\n", - " },\n", - " \"Person\": {\n", - " \"@id\": \"Person\"\n", - " }\n", - " }\n", - "}\n", - "@prefix foaf: .\n", - "@prefix samp: .\n", - "@prefix xsd: .\n", - "\n", - " a samp:Person ;\n", - " foaf:age 43 ;\n", - " foaf:firstName \"Bob\",\n", - " \"Joe\" ;\n", - " foaf:lastName \"smith\" .\n", - "\n", - "\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:31.034955Z", + "iopub.status.busy": "2026-05-09T11:48:31.034648Z", + "iopub.status.idle": "2026-05-09T11:48:31.056645Z", + "shell.execute_reply": "2026-05-09T11:48:31.054793Z" } - ], + }, "source": [ "# Add the context and turn it into RDF\n", "jsonld = json_dumper.dumps(joe_smith, cntxt)\n", @@ -591,7 +304,9 @@ "g = Graph()\n", "g.parse(data=jsonld, format=\"json-ld\")\n", "print(g.serialize(format=\"turtle\"))" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -602,56 +317,20 @@ }, { "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "# metamodel_version: 1.7.0\n", - "BASE \n", - "PREFIX foaf: \n", - "PREFIX rdf: \n", - "PREFIX xsd: \n", - "\n", - "\n", - " xsd:boolean\n", - "\n", - " xsd:integer\n", - "\n", - " xsd:string\n", - "\n", - " CLOSED {\n", - " ( $ ( & ;\n", - " rdf:type [ ] ? ;\n", - " foaf:knows @ +\n", - " ) ;\n", - " rdf:type [ ]\n", - " )\n", - "}\n", - "\n", - " (\n", - " CLOSED {\n", - " ( $ ( foaf:firstName @ * ;\n", - " foaf:lastName @ ;\n", - " foaf:age @ ? ;\n", - " @ ? ;\n", - " foaf:knows @ *\n", - " ) ;\n", - " rdf:type [ ]\n", - " )\n", - " } OR @\n", - ")\n", - "\n", - "\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:31.059804Z", + "iopub.status.busy": "2026-05-09T11:48:31.059423Z", + "iopub.status.idle": "2026-05-09T11:48:31.079200Z", + "shell.execute_reply": "2026-05-09T11:48:31.077895Z" } - ], + }, "source": [ "shex = ShExGenerator(model_str).serialize(collections=False)\n", "print(shex)" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "markdown", @@ -662,44 +341,42 @@ }, { "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Conforms\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:31.081833Z", + "iopub.status.busy": "2026-05-09T11:48:31.081544Z", + "iopub.status.idle": "2026-05-09T11:48:31.625720Z", + "shell.execute_reply": "2026-05-09T11:48:31.624057Z" } - ], + }, "source": [ "from pyshex.evaluate import evaluate\n", "r = evaluate(g, shex,\n", " start=\"http://example.org/model/Person\",\n", " focus=\"http://example.org/people/42\")\n", "print(\"Conforms\" if r[0] else r[1])" - ] + ], + "outputs": [], + "execution_count": null }, { "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Conforms\n" - ] + "metadata": { + "execution": { + "iopub.execute_input": "2026-05-09T11:48:31.629560Z", + "iopub.status.busy": "2026-05-09T11:48:31.628890Z", + "iopub.status.idle": "2026-05-09T11:48:31.719222Z", + "shell.execute_reply": "2026-05-09T11:48:31.718143Z" } - ], + }, "source": [ "r = evaluate(g, shex,\n", " start=\"http://example.org/model/FriendlyPerson\",\n", " focus=\"http://example.org/people/42\")\n", "print(\"Conforms\" if r[0] else r[1])" - ] + ], + "outputs": [], + "execution_count": null } ], "metadata": { @@ -718,7 +395,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.7" + "version": "3.13.12" } }, "nbformat": 4, diff --git a/packages/linkml/pyproject.toml b/packages/linkml/pyproject.toml index cd61d81bc3..e0729c8347 100644 --- a/packages/linkml/pyproject.toml +++ b/packages/linkml/pyproject.toml @@ -33,6 +33,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] requires-python = ">=3.10" dynamic = ["version"] @@ -51,9 +52,9 @@ dependencies = [ # Specifier syntax: https://peps.python.org/pep-0631/ "prefixcommons >= 0.1.7", "prefixmaps >= 0.2.2", "pydantic >= 2.0.0, < 3.0.0", - "pyjsg >= 0.11.6", - "pyshex >= 0.7.20", - "pyshexc >= 0.8.3", + "pyjsg >= 0.12.3", + "pyshex >= 0.9.0", + "pyshexc >= 0.10.3", "python-dateutil", "pyyaml", "rdflib >=6.0.0", @@ -78,7 +79,7 @@ tests = [ { include-group = "lint" }, { include-group = "typing" }, { include-group = "shacl" }, - "morph-kgc >= 2.9.0; python_version >= '3.10'" + "duckdb>=1.5.2", ] dev = [ {include-group = "tests" }, diff --git a/packages/linkml/src/linkml/generators/docgen/slot.md.jinja2 b/packages/linkml/src/linkml/generators/docgen/slot.md.jinja2 index 5066e41bf0..d842b26006 100644 --- a/packages/linkml/src/linkml/generators/docgen/slot.md.jinja2 +++ b/packages/linkml/src/linkml/generators/docgen/slot.md.jinja2 @@ -105,7 +105,11 @@ Alias: {{ element.alias }} {%- if element.is_grouping_slot %} | Is Grouping Slot | Yes | {%- endif %} +{%- set has_cardinality = element.required or element.recommended + or element.multivalued or element.minimum_cardinality is not none + or element.maximum_cardinality is not none or element.exact_cardinality is not none %} +{%- if has_cardinality %} ### Cardinality and Requirements | Property | Value | @@ -128,6 +132,7 @@ Alias: {{ element.alias }} | Exact Cardinality | {{ element.exact_cardinality }} | {%- endif %} +{% endif %} {%- if element.multivalued and (element.list_elements_unique is not none or element.list_elements_ordered is not none) %} ### List/Collection Properties diff --git a/packages/linkml/src/linkml/generators/excelgen.py b/packages/linkml/src/linkml/generators/excelgen.py index 0b28420449..54e254b8d4 100644 --- a/packages/linkml/src/linkml/generators/excelgen.py +++ b/packages/linkml/src/linkml/generators/excelgen.py @@ -1,3 +1,4 @@ +import hashlib import logging from dataclasses import dataclass from pathlib import Path @@ -55,14 +56,21 @@ def _create_workbook_and_worksheets(self, output_path: Path, classes: list[str]) # Compute enum lookup before next inner loop enum_set = set(sv.all_enums(imports=self.mergeimports).keys()) + used_titles: set[str] = set() for cls_name in classes: - workbook.create_sheet(cls_name) + title = self._safe_sheet_title(cls_name, used_titles) + if title != cls_name: + self.logger.warning( + f"Class name '{cls_name}' exceeds Excel's 31-character sheet title limit; " + f"using '{title}' as the worksheet name." + ) + workbook.create_sheet(title) # Add columns to the worksheet for the current class # (call class_induced_slots, reuse for heading/enum validation) induced_slots = list(sv.class_induced_slots(cls_name, self.mergeimports)) slot_names = [s.name for s in induced_slots] - self.add_columns_to_worksheet(workbook, cls_name, slot_names) + self.add_columns_to_worksheet(workbook, title, slot_names) # Add enum validation for columns with enum types for s in induced_slots: @@ -77,7 +85,7 @@ def _create_workbook_and_worksheets(self, output_path: Path, classes: list[str]) # including the separators is <= 255 characters enum_length = len(dv_formula) if enum_length <= 255: - self.column_enum_validation(workbook, cls_name, s.name, dv_formula) + self.column_enum_validation(workbook, title, s.name, dv_formula) else: self.logger.warning( f"'{s.range}' has permissible values with total " @@ -89,6 +97,31 @@ def _create_workbook_and_worksheets(self, output_path: Path, classes: list[str]) if self.split_workbook_by_class: self.logger.info(f"The Excel workbooks have been written to {output_path}") + @staticmethod + def _safe_sheet_title(cls_name: str, used: set) -> str: + """Return a valid Excel sheet title for *cls_name* (≤ 31 chars, unique). + + Excel limits worksheet titles to 31 characters. When *cls_name* is + longer, a deterministic 6-hex-char SHA-1 suffix is appended so the + title is still traceable to the class name. + + :param cls_name: The LinkML class name. + :param used: Set of already-allocated titles; updated in place. + :return: A deterministic, collision-free sheet title ≤ 31 characters. + """ + if len(cls_name) <= 31: + title = cls_name + else: + h = hashlib.sha1(cls_name.encode("utf-8")).hexdigest()[:6] + title = f"{cls_name[:24]}_{h}" # 24 + 1 + 6 = 31 + base, n = title, 1 + while title in used: + suffix = f"~{n}" + title = base[: 31 - len(suffix)] + suffix + n += 1 + used.add(title) + return title + @staticmethod def add_columns_to_worksheet(workbook: Workbook, worksheet_name: str, sheet_headings: list[str]) -> None: """ diff --git a/packages/linkml/src/linkml/generators/jsonschemagen.py b/packages/linkml/src/linkml/generators/jsonschemagen.py index 7b3e48784e..d220e0ba59 100644 --- a/packages/linkml/src/linkml/generators/jsonschemagen.py +++ b/packages/linkml/src/linkml/generators/jsonschemagen.py @@ -829,6 +829,8 @@ def get_subschema_for_slot( prop.add_keyword("description", slot.description) if self.title_from == "title" and slot.title: prop.add_keyword("title", slot.title) + if getattr(slot, "readonly", None): + prop.add_keyword("readOnly", True) own_constraints = self.get_value_constraints_for_slot(slot) diff --git a/packages/linkml/src/linkml/generators/oocodegen.py b/packages/linkml/src/linkml/generators/oocodegen.py index 0ccb558fb5..14d0e6b345 100644 --- a/packages/linkml/src/linkml/generators/oocodegen.py +++ b/packages/linkml/src/linkml/generators/oocodegen.py @@ -268,7 +268,7 @@ def create_documents(self) -> list[OODocument]: sv: SchemaView sv = self.schemaview docs = [] - for cn in sv.all_classes(imports=False): + for cn in sv.all_classes(imports=self.mergeimports): c = sv.get_class(cn) if self.map_class(c) is not None: continue diff --git a/packages/linkml/src/linkml/generators/owlgen.py b/packages/linkml/src/linkml/generators/owlgen.py index 38f47823bf..6c818a2323 100644 --- a/packages/linkml/src/linkml/generators/owlgen.py +++ b/packages/linkml/src/linkml/generators/owlgen.py @@ -42,6 +42,7 @@ ) from linkml_runtime.utils.formatutils import camelcase, underscore from linkml_runtime.utils.introspection import package_schemaview +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph logger = logging.getLogger(__name__) @@ -208,7 +209,11 @@ class OwlSchemaGenerator(Generator): one direct ``is_a`` child, the generator adds ``AbstractClass rdfs:subClassOf (Child1 or Child2 or …)``, expressing the open-world covering constraint that every instance of the abstract class must also be an instance of one of its - direct subclasses.""" + direct subclasses. + + .. note:: An info message is emitted when an abstract class has no children (no axiom generated). + A warning is emitted when there is only one child (covering axiom degenerates to equivalence + Parent ≡ Child). Use this flag to suppress covering axioms entirely if equivalence is undesired.""" @staticmethod def _present(values: Iterable[_T | None]) -> list[_T]: @@ -298,8 +303,8 @@ def serialize(self, **kwargs: Any) -> str: :return: """ self.as_graph() - data = self.graph.serialize(format="turtle" if self.format in ["owl", "ttl"] else self.format) - return data + fmt = "turtle" if self.format in ["owl", "ttl"] else self.format + return canonicalize_rdf_graph(self.graph, output_format=fmt) def add_metadata(self, e: Definition | PermissibleValue, uri: URIRef) -> None: """ @@ -504,6 +509,26 @@ def condition_to_bnode(expr: AnonymousClassExpression) -> OWL_EXPRESSION | None: # must be an instance of at least one of its direct subclasses. if cls.abstract and not self.skip_abstract_class_as_unionof_subclasses: children = sorted(sv.class_children(cls.name, imports=self.mergeimports, mixins=False, is_a=True)) + if not children: + logger.info( + "Abstract class '%s' has no children. No covering axiom will be generated.", + cls.name, + ) + elif len(children) == 1: + # Warn: with one child C, the covering axiom degenerates to + # Parent ⊑ C which, combined with C ⊑ Parent (from is_a), + # creates Parent ≡ C (equivalence). This is semantically + # correct per OWL 2 but may be surprising for extensible + # ontologies where more children are added later. + logger.warning( + "Abstract class '%s' has only 1 direct child ('%s'). " + "The covering axiom makes them equivalent (%s ≡ %s). " + "Use --skip-abstract-class-as-unionof-subclasses to suppress.", + cls.name, + children[0], + cls.name, + children[0], + ) if children: child_uris = [self._class_uri(child) for child in children] union_node = self._union_of(child_uris) @@ -1653,7 +1678,9 @@ def slot_owl_type(self, slot: SlotDefinition) -> URIRef: show_default=True, help=( "If true, suppress rdfs:subClassOf owl:unionOf(subclasses) covering axioms for abstract classes. " - "By default such axioms are emitted for every abstract class that has direct is_a children." + "By default such axioms are emitted for every abstract class that has direct is_a children. " + "Note: an info message is logged for abstract classes with zero children (no axiom); " + "a warning is emitted for one child (equivalence)." ), ) @click.option( diff --git a/packages/linkml/src/linkml/generators/rdfgen.py b/packages/linkml/src/linkml/generators/rdfgen.py index 22ba6031c2..a3fcf6a848 100644 --- a/packages/linkml/src/linkml/generators/rdfgen.py +++ b/packages/linkml/src/linkml/generators/rdfgen.py @@ -20,6 +20,7 @@ from linkml.generators.jsonldgen import JSONLDGenerator from linkml.utils.generator import Generator, shared_arguments from linkml_runtime.linkml_model import SchemaDefinition +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph @dataclass @@ -44,7 +45,8 @@ def __post_init__(self): super().__post_init__() def _data(self, g: Graph) -> str: - return g.serialize(format="turtle" if self.format == "ttl" else self.format) + fmt = "turtle" if self.format == "ttl" else self.format + return canonicalize_rdf_graph(g, output_format=fmt) def end_schema(self, output: str | None = None, context: str = None, **_) -> str: gen = JSONLDGenerator( @@ -68,15 +70,7 @@ def end_schema(self, output: str | None = None, context: str = None, **_) -> str prefix=True, ) if output: - # Binary-safe when -o/--output is used: - # delegate to RDFLib (Graph.serialize(destination=..., format=...)). - # Serializers that produce bytes write directly to the file; stdout stays empty. - fmt = "turtle" if self.format == "ttl" else self.format - try: - out = graph.serialize(format=fmt) - except UnicodeDecodeError: - graph.serialize(destination=output, format=fmt) - return "" + out = self._data(graph) with open(output, "w", encoding="UTF-8") as outf: outf.write(out) return out diff --git a/packages/linkml/src/linkml/generators/shaclgen.py b/packages/linkml/src/linkml/generators/shaclgen.py index 2f2e6b5d1e..874e47b3a6 100644 --- a/packages/linkml/src/linkml/generators/shaclgen.py +++ b/packages/linkml/src/linkml/generators/shaclgen.py @@ -16,6 +16,7 @@ from linkml.utils.generator import Generator, shared_arguments from linkml_runtime.linkml_model.meta import ClassDefinition, ElementName from linkml_runtime.utils.formatutils import underscore +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.yamlutils import TypedNode, extended_float, extended_int, extended_str logger = logging.getLogger(__name__) @@ -93,8 +94,8 @@ def generate_header(self) -> str: def serialize(self, **args) -> str: g = self.as_graph() - data = g.serialize(format="turtle" if self.format in ["owl", "ttl"] else self.format) - return data + fmt = "turtle" if self.format in ["owl", "ttl"] else self.format + return canonicalize_rdf_graph(g, output_format=fmt) def as_graph(self) -> Graph: sv = self.schemaview diff --git a/packages/linkml/src/linkml/generators/shexgen.py b/packages/linkml/src/linkml/generators/shexgen.py index 387cff8eb3..40a93ffbc9 100644 --- a/packages/linkml/src/linkml/generators/shexgen.py +++ b/packages/linkml/src/linkml/generators/shexgen.py @@ -26,6 +26,7 @@ from linkml_runtime.linkml_model.types import SHEX from linkml_runtime.utils.formatutils import camelcase, sfx from linkml_runtime.utils.metamodelcore import URIorCURIE +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph @dataclass @@ -176,7 +177,7 @@ def end_schema(self, output: str | None = None, **_) -> str: g = Graph() g.parse(data=shex, format="json-ld", version="1.1") g.bind("owl", OWL) - shex = g.serialize(format="turtle") + shex = canonicalize_rdf_graph(g, output_format="turtle") elif self.format == "shex": g = Graph() self.namespaces.load_graph(g) diff --git a/packages/linkml/src/linkml/transformers/relmodel_transformer.py b/packages/linkml/src/linkml/transformers/relmodel_transformer.py index 01b7211870..e6ec745fd1 100644 --- a/packages/linkml/src/linkml/transformers/relmodel_transformer.py +++ b/packages/linkml/src/linkml/transformers/relmodel_transformer.py @@ -159,9 +159,9 @@ def transform(self, tgt_schema_name: str = None, top_class: ClassDefinitionName :return: """ join_sep = self.join_table_separator - links = self.get_reference_map() source_sv = self.schemaview - source_sv.merge_imports() + source_sv.merge_imports() # do before get_reference_map, avoid busting lru_cache + links = self.get_reference_map() source = source_sv.schema src_schema_name = source.name mappings = [] @@ -216,10 +216,12 @@ def transform(self, tgt_schema_name: str = None, top_class: ClassDefinitionName target_sv = SchemaView(target) # create surrogate/autoincrement primary keys for any class (originally: that is referenced) # for link in links: - for cn in target_sv.all_classes(): + all_target_classes = target_sv.all_classes() + all_target_class_names = list(all_target_classes) + for i, cn in enumerate(all_target_class_names, start=1): pk = self.get_direct_identifier_attribute(target_sv, cn) if self.foreign_key_policy == ForeignKeyPolicy.NO_FOREIGN_KEYS: - logger.info(f"Will not inject any PKs, and policy == {self.foreign_key_policy}") + logger.debug(f"Will not inject any PKs, and policy == {self.foreign_key_policy}") else: if pk is None: pk = self.add_primary_key(cn, target_sv) @@ -232,7 +234,9 @@ def transform(self, tgt_schema_name: str = None, top_class: ClassDefinitionName target_sv.set_modified() multivalued_slots_original = [] # post-process target schema - for cn, c in target_sv.all_classes().items(): + # for each class, for each slot with a range of object, + # we have a reference to another class. + for class_index, (cn, c) in enumerate(all_target_classes.items(), start=1): if self.foreign_key_policy == ForeignKeyPolicy.NO_FOREIGN_KEYS: continue pk_slot = self.get_direct_identifier_attribute(target_sv, cn) @@ -243,6 +247,8 @@ def transform(self, tgt_schema_name: str = None, top_class: ClassDefinitionName for src_slot in list(c.attributes.values()): slot = copy(src_slot) slot_range = slot.range + # We call target_sv.all_classes() inside loop because we need to + # detect newly-added classes while modifying. slot_range_is_class = slot_range in target_sv.all_classes() is_shared = slot_range_is_class and ( slot.inlined or slot.inlined_as_list or "shared" in slot.annotations @@ -350,7 +356,7 @@ def transform(self, tgt_schema_name: str = None, top_class: ClassDefinitionName target_sv.set_modified() fk_policy = self.foreign_key_policy forward_map = {} - for c in target.classes.values(): + for class_index, c in enumerate(target.classes.values(), start=1): if self.foreign_key_policy == ForeignKeyPolicy.NO_FOREIGN_KEYS: continue pk_slot = target_sv.get_identifier_slot(c.name) @@ -455,6 +461,10 @@ def add_primary_key(cn: str, sv: SchemaView) -> SlotDefinition: """ Adds a surrogate/autoincrement primary key to a class + Note: do NOT call sv.set_modified() here (once per class), because it kills + performance due to lru_cache invalidation in bulk loops. The caller + is responsible for calling it once after all PKs are injected. + :param cn: :param sv: :return: @@ -476,5 +486,4 @@ def add_primary_key(cn: str, sv: SchemaView) -> SlotDefinition: c.attributes.clear() # See https://github.com/linkml/linkml/issues/370 add_attribute(c.attributes, pk) # add to start c.attributes.update(atts) - sv.set_modified() return pk diff --git a/packages/linkml/src/linkml/validator/plugins/recommended_slots_plugin.py b/packages/linkml/src/linkml/validator/plugins/recommended_slots_plugin.py index dda2fdd4f3..3c22bd1147 100644 --- a/packages/linkml/src/linkml/validator/plugins/recommended_slots_plugin.py +++ b/packages/linkml/src/linkml/validator/plugins/recommended_slots_plugin.py @@ -31,7 +31,9 @@ def _do_process( if slot_range_class is not None and slot_value is not None: slot_location = location + [slot_def.name] if slot_def.multivalued: - if slot_def.inlined and isinstance(slot_value, dict): + # only if the slot is not inlined as a list, otherwise we are checking the + # range class for the list itself, which is not what we want. + if slot_def.inlined and not slot_def.inlined_as_list and isinstance(slot_value, dict): for k, v in slot_value.items(): yield from _do_process(v, slot_range_class.name, slot_location + [k]) elif slot_def.inlined_as_list and isinstance(slot_value, list): diff --git a/packages/linkml_runtime/Makefile b/packages/linkml_runtime/Makefile index a642ad7a13..1ed931acf7 100644 --- a/packages/linkml_runtime/Makefile +++ b/packages/linkml_runtime/Makefile @@ -1,18 +1,34 @@ # Currently the main purposing of this makefile is to synchronize # latest releases of linkml-model into linkml_runtime/linkml_model # -# See https://github.com/linkml/linkml-runtime/issues/10 +# Set LINKML_MODEL_RELEASE to the linkml-model release tag to sync from +# (see https://github.com/linkml/linkml-model/releases). Bump manually +# when pulling in a new linkml-model release. -# TODO: make this mechanism more robust -MODEL_DIR = ../linkml-model/linkml_model/ +LINKML_MODEL_RELEASE = v1.11.0 + +all: update_model update_validation_model update_model: - cp -pr $(MODEL_DIR)/* linkml_runtime/linkml_model + # Clean up + rm -rf linkml-model-github/ + mkdir -p linkml-model-github/ + rm -rf src/linkml_runtime/linkml_model + mkdir -p src/linkml_runtime/linkml_model + + # Clone from the pinned linkml-model release tag + git clone --depth 1 --branch $(LINKML_MODEL_RELEASE) https://github.com/linkml/linkml-model.git linkml-model-github/ + + cp -pr linkml-model-github/linkml_model/* src/linkml_runtime/linkml_model -test: - uv run pytest + # Clean up some files that are not needed at the moment, https://github.com/linkml/linkml/issues/3129 + rm src/linkml_runtime/linkml_model/model/schema/extended_types.yaml + cd ../../ && pre-commit run --all-files || pre-commit run --all-files +update_validation_model: src/linkml_runtime/processing/validation_datamodel.py + cd ../../ && pre-commit run --all-files || pre-commit run --all-files # temporary measure until linkml-model is synced -linkml_runtime/processing/validation_datamodel.py: linkml_runtime/processing/validation_datamodel.yaml - gen-python $< > $@.tmp && mv $@.tmp $@ +src/linkml_runtime/processing/validation_datamodel.py: src/linkml_runtime/processing/validation_datamodel.yaml + uv sync + uv run gen-python $< > $@.tmp && mv $@.tmp $@ diff --git a/packages/linkml_runtime/pyproject.toml b/packages/linkml_runtime/pyproject.toml index d3dc9a7682..fcebed1869 100644 --- a/packages/linkml_runtime/pyproject.toml +++ b/packages/linkml_runtime/pyproject.toml @@ -30,6 +30,7 @@ classifiers = [ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", ] requires-python = ">=3.10" dynamic = ["version"] @@ -46,6 +47,7 @@ dependencies = [ "requests", "prefixmaps >=0.1.4", "curies >=0.5.4", + "pyoxigraph >=0.5.6", "pydantic >=1.10.2, <3.0.0", "isodate >=0.7.2, <1.0.0; python_version < '3.11'", ] @@ -195,7 +197,7 @@ max-complexity = 15 [tool.tox] requires = ["tox>=4"] -env_list = ["lint", "py{310,311,312,313}"] +env_list = ["lint", "py{310,311,312,313,314}"] [tool.tox.env_run_base] allowlist_externals = ["uv"] diff --git a/packages/linkml_runtime/src/linkml_runtime/dumpers/rdf_dumper.py b/packages/linkml_runtime/src/linkml_runtime/dumpers/rdf_dumper.py index 0c6ab4a856..c28f1da691 100644 --- a/packages/linkml_runtime/src/linkml_runtime/dumpers/rdf_dumper.py +++ b/packages/linkml_runtime/src/linkml_runtime/dumpers/rdf_dumper.py @@ -7,6 +7,7 @@ from linkml_runtime.dumpers.dumper_root import Dumper from linkml_runtime.utils.context_utils import CONTEXT_TYPE, CONTEXTS_PARAM_TYPE from linkml_runtime.utils.formatutils import remove_empty_items +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.yamlutils import YAMLRoot @@ -101,4 +102,6 @@ def dumps( """ if isinstance(element, BaseModel): element = element.model_dump() - return self.as_rdf_graph(remove_empty_items(element, hide_protected_keys=True), contexts).serialize(format=fmt) + return canonicalize_rdf_graph( + self.as_rdf_graph(remove_empty_items(element, hide_protected_keys=True), contexts), output_format=fmt + ) diff --git a/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py b/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py index 82f568d6dd..96b064dbbb 100644 --- a/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py +++ b/packages/linkml_runtime/src/linkml_runtime/dumpers/rdflib_dumper.py @@ -10,6 +10,7 @@ from linkml_runtime.dumpers.dumper_root import Dumper from linkml_runtime.linkml_model import ElementName, PermissibleValue, SlotDefinition +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.schemaview import SchemaView from linkml_runtime.utils.yamlutils import YAMLRoot @@ -196,7 +197,7 @@ def dumps( :param prefix_map: :return: serialization of rdflib Graph containing element """ - return self.as_rdf_graph(element, schemaview, prefix_map=prefix_map).serialize(format=fmt) + return canonicalize_rdf_graph(self.as_rdf_graph(element, schemaview, prefix_map=prefix_map), output_format=fmt) def _as_uri(self, element_id: str, id_slot: SlotDefinition | None, schemaview: SchemaView) -> URIRef: if id_slot and schemaview.is_slot_percent_encoded(id_slot): diff --git a/packages/linkml_runtime/src/linkml_runtime/processing/validation_datamodel.py b/packages/linkml_runtime/src/linkml_runtime/processing/validation_datamodel.py index 3c346a4541..2dba544fb2 100644 --- a/packages/linkml_runtime/src/linkml_runtime/processing/validation_datamodel.py +++ b/packages/linkml_runtime/src/linkml_runtime/processing/validation_datamodel.py @@ -1,5 +1,5 @@ -# Auto generated from validation_datamodel.yaml by pythongen.py version: 0.9.0 -# Generation date: 2023-01-27T10:37:33 +# Auto generated from validation_datamodel.yaml by pythongen.py version: 0.0.1 +# Generation date: 2026-04-29T20:44:01 # Schema: validaton-results # # id: https://w3id.org/linkml/validation_results @@ -12,17 +12,12 @@ from jsonasobj2 import as_dict from rdflib import URIRef -from linkml_runtime.linkml_model.meta import ( - EnumDefinition, - PermissibleValue, -) +from linkml_runtime.linkml_model.meta import EnumDefinition, PermissibleValue from linkml_runtime.utils.curienamespace import CurieNamespace from linkml_runtime.utils.enumerations import EnumDefinitionImpl from linkml_runtime.utils.metamodelcore import Bool, URIorCURIE, empty_dict, empty_list from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.yamlutils import ( - YAMLRoot, -) +from linkml_runtime.utils.yamlutils import YAMLRoot metamodel_version = "1.7.0" version = None @@ -57,18 +52,18 @@ class TypeSeverityKeyValueType(URIorCURIE): pass -@dataclass +@dataclass(repr=False) class ConstraintCheck(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.ConstraintCheck + class_class_uri: ClassVar[URIRef] = VM["ConstraintCheck"] class_class_curie: ClassVar[str] = "vm:ConstraintCheck" class_name: ClassVar[str] = "ConstraintCheck" class_model_uri: ClassVar[URIRef] = VM.ConstraintCheck id: Union[str, ConstraintCheckId] = None - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): self.MissingRequiredField("id") if not isinstance(self.id, ConstraintCheckId): @@ -77,18 +72,18 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Node(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.Node + class_class_uri: ClassVar[URIRef] = VM["Node"] class_class_curie: ClassVar[str] = "vm:Node" class_name: ClassVar[str] = "Node" class_model_uri: ClassVar[URIRef] = VM.Node id: Union[str, NodeId] = None - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.id): self.MissingRequiredField("id") if not isinstance(self.id, NodeId): @@ -97,7 +92,7 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ValidationConfiguration(YAMLRoot): """ Configuration parameters for execution of a validation report @@ -105,7 +100,7 @@ class ValidationConfiguration(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.ValidationConfiguration + class_class_uri: ClassVar[URIRef] = VM["ValidationConfiguration"] class_class_curie: ClassVar[str] = "vm:ValidationConfiguration" class_name: ClassVar[str] = "ValidationConfiguration" class_model_uri: ClassVar[URIRef] = VM.ValidationConfiguration @@ -113,29 +108,23 @@ class ValidationConfiguration(YAMLRoot): max_number_results_per_type: Optional[int] = None type_severity_map: Optional[ Union[ - dict[ - Union[str, TypeSeverityKeyValueType], - Union[dict, "TypeSeverityKeyValue"], - ], + dict[Union[str, TypeSeverityKeyValueType], Union[dict, "TypeSeverityKeyValue"]], list[Union[dict, "TypeSeverityKeyValue"]], ] ] = empty_dict() - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self.max_number_results_per_type is not None and not isinstance(self.max_number_results_per_type, int): self.max_number_results_per_type = int(self.max_number_results_per_type) self._normalize_inlined_as_dict( - slot_name="type_severity_map", - slot_type=TypeSeverityKeyValue, - key_name="type", - keyed=True, + slot_name="type_severity_map", slot_type=TypeSeverityKeyValue, key_name="type", keyed=True ) super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class RepairConfiguration(YAMLRoot): """ Configuration parameters for execution of validation repairs @@ -143,7 +132,7 @@ class RepairConfiguration(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.RepairConfiguration + class_class_uri: ClassVar[URIRef] = VM["RepairConfiguration"] class_class_curie: ClassVar[str] = "vm:RepairConfiguration" class_name: ClassVar[str] = "RepairConfiguration" class_model_uri: ClassVar[URIRef] = VM.RepairConfiguration @@ -151,7 +140,7 @@ class RepairConfiguration(YAMLRoot): validation_configuration: Optional[Union[dict, ValidationConfiguration]] = None dry_run: Optional[Union[bool, Bool]] = None - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self.validation_configuration is not None and not isinstance( self.validation_configuration, ValidationConfiguration ): @@ -163,7 +152,7 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class TypeSeverityKeyValue(YAMLRoot): """ key-value pair that maps a validation result type to a severity setting, for overriding default severity @@ -171,7 +160,7 @@ class TypeSeverityKeyValue(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.TypeSeverityKeyValue + class_class_uri: ClassVar[URIRef] = VM["TypeSeverityKeyValue"] class_class_curie: ClassVar[str] = "vm:TypeSeverityKeyValue" class_name: ClassVar[str] = "TypeSeverityKeyValue" class_model_uri: ClassVar[URIRef] = VM.TypeSeverityKeyValue @@ -179,7 +168,7 @@ class TypeSeverityKeyValue(YAMLRoot): type: Union[str, TypeSeverityKeyValueType] = None severity: Optional[Union[str, "SeverityType"]] = None - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.type): self.MissingRequiredField("type") if not isinstance(self.type, TypeSeverityKeyValueType): @@ -191,7 +180,7 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class Report(YAMLRoot): """ A report object that is a holder to multiple report results @@ -199,14 +188,14 @@ class Report(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.Report + class_class_uri: ClassVar[URIRef] = VM["Report"] class_class_curie: ClassVar[str] = "vm:Report" class_name: ClassVar[str] = "Report" class_model_uri: ClassVar[URIRef] = VM.Report results: Optional[Union[Union[dict, "Result"], list[Union[dict, "Result"]]]] = empty_list() - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.results, list): self.results = [self.results] if self.results is not None else [] self.results = [v if isinstance(v, Result) else Result(**as_dict(v)) for v in self.results] @@ -214,7 +203,7 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class ValidationReport(Report): """ A report that consists of validation results @@ -222,22 +211,20 @@ class ValidationReport(Report): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = SH.ValidationReport + class_class_uri: ClassVar[URIRef] = SH["ValidationReport"] class_class_curie: ClassVar[str] = "sh:ValidationReport" class_name: ClassVar[str] = "ValidationReport" class_model_uri: ClassVar[URIRef] = VM.ValidationReport results: Optional[Union[Union[dict, "ValidationResult"], list[Union[dict, "ValidationResult"]]]] = empty_list() - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): - if not isinstance(self.results, list): - self.results = [self.results] if self.results is not None else [] - self.results = [v if isinstance(v, ValidationResult) else ValidationResult(**as_dict(v)) for v in self.results] + def __post_init__(self, *_: str, **kwargs: Any): + self._normalize_inlined_as_list(slot_name="results", slot_type=ValidationResult, key_name="type", keyed=False) super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class RepairReport(Report): """ A report that consists of repair operation results @@ -245,14 +232,14 @@ class RepairReport(Report): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.RepairReport + class_class_uri: ClassVar[URIRef] = VM["RepairReport"] class_class_curie: ClassVar[str] = "vm:RepairReport" class_name: ClassVar[str] = "RepairReport" class_model_uri: ClassVar[URIRef] = VM.RepairReport results: Optional[Union[Union[dict, "RepairOperation"], list[Union[dict, "RepairOperation"]]]] = empty_list() - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.results, list): self.results = [self.results] if self.results is not None else [] self.results = [v if isinstance(v, RepairOperation) else RepairOperation(**as_dict(v)) for v in self.results] @@ -267,13 +254,13 @@ class Result(YAMLRoot): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.Result + class_class_uri: ClassVar[URIRef] = VM["Result"] class_class_curie: ClassVar[str] = "vm:Result" class_name: ClassVar[str] = "Result" class_model_uri: ClassVar[URIRef] = VM.Result -@dataclass +@dataclass(repr=False) class ValidationResult(Result): """ An individual result arising from validation of a data instance using a particular rule @@ -281,7 +268,7 @@ class ValidationResult(Result): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = SH.ValidationResult + class_class_uri: ClassVar[URIRef] = SH["ValidationResult"] class_class_curie: ClassVar[str] = "sh:ValidationResult" class_name: ClassVar[str] = "ValidationResult" class_model_uri: ClassVar[URIRef] = VM.ValidationResult @@ -301,7 +288,7 @@ class ValidationResult(Result): source_column_number: Optional[int] = None source_location: Optional[str] = None - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.type): self.MissingRequiredField("type") if not isinstance(self.type, ConstraintType): @@ -349,7 +336,7 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): super().__post_init__(**kwargs) -@dataclass +@dataclass(repr=False) class RepairOperation(Result): """ The result of performing an individual repair @@ -357,7 +344,7 @@ class RepairOperation(Result): _inherited_slots: ClassVar[list[str]] = [] - class_class_uri: ClassVar[URIRef] = VM.RepairOperation + class_class_uri: ClassVar[URIRef] = VM["RepairOperation"] class_class_curie: ClassVar[str] = "vm:RepairOperation" class_name: ClassVar[str] = "RepairOperation" class_model_uri: ClassVar[URIRef] = VM.RepairOperation @@ -367,7 +354,7 @@ class RepairOperation(Result): successful: Optional[Union[bool, Bool]] = None info: Optional[str] = None - def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): + def __post_init__(self, *_: str, **kwargs: Any): if self.repairs is not None and not isinstance(self.repairs, ValidationResult): self.repairs = ValidationResult(**as_dict(self.repairs)) @@ -386,9 +373,9 @@ def __post_init__(self, *_: list[str], **kwargs: dict[str, Any]): # Enumerations class SeverityType(EnumDefinitionImpl): FATAL = PermissibleValue(text="FATAL") - ERROR = PermissibleValue(text="ERROR", meaning=SH.Violation) - WARNING = PermissibleValue(text="WARNING", meaning=SH.Warning) - INFO = PermissibleValue(text="INFO", meaning=SH.Info) + ERROR = PermissibleValue(text="ERROR", meaning=SH["Violation"]) + WARNING = PermissibleValue(text="WARNING", meaning=SH["Warning"]) + INFO = PermissibleValue(text="INFO", meaning=SH["Info"]) _defn = EnumDefinition( name="SeverityType", @@ -399,68 +386,66 @@ class ConstraintType(EnumDefinitionImpl): TypeConstraint = PermissibleValue( text="TypeConstraint", description="constraint in which the range is a type, and the slot value must conform to the type", - meaning=SH.DatatypeConstraintComponent, + meaning=SH["DatatypeConstraintComponent"], ) MinCountConstraint = PermissibleValue( text="MinCountConstraint", - description="cardinality constraint where the number of values of the slot must be greater or equal to a specified minimum", - meaning=SH.MinCountConstraintComponent, + description="""cardinality constraint where the number of values of the slot must be greater or equal to a specified minimum""", + meaning=SH["MinCountConstraintComponent"], ) RequiredConstraint = PermissibleValue( text="RequiredConstraint", description="cardinality constraint where there MUST be at least one value of the slot", - meaning=SH.MinCountConstraintComponent, + meaning=SH["MinCountConstraintComponent"], ) RecommendedConstraint = PermissibleValue( text="RecommendedConstraint", description="cardinality constraint where there SHOULD be at least one value of the slot", - meaning=SH.MinCountConstraintComponent, + meaning=SH["MinCountConstraintComponent"], ) MaxCountConstraint = PermissibleValue( text="MaxCountConstraint", - description="cardinality constraint where the number of values of the slot must be less than or equal to a specified maximum", - meaning=SH.MaxCountConstraintComponent, + description="""cardinality constraint where the number of values of the slot must be less than or equal to a specified maximum""", + meaning=SH["MaxCountConstraintComponent"], ) SingleValuedConstraint = PermissibleValue( - text="SingleValuedConstraint", - description="the value of the slot must be atomic and not a collection", + text="SingleValuedConstraint", description="the value of the slot must be atomic and not a collection" ) MultiValuedConstraint = PermissibleValue( - text="MultiValuedConstraint", - description="the value of the slot must be a collection and not atomic", + text="MultiValuedConstraint", description="the value of the slot must be a collection and not atomic" ) DeprecatedProperty = PermissibleValue( text="DeprecatedProperty", description="constraint where the instance slot should not be deprecated", - meaning=VM.DeprecatedProperty, + meaning=VM["DeprecatedProperty"], ) MaxLengthConstraint = PermissibleValue( text="MaxLengthConstraint", description="constraint where the slot value must have a length equal to or less than a specified maximum", - meaning=SH.MaxLengthConstraintComponent, + meaning=SH["MaxLengthConstraintComponent"], ) MinLengthConstraint = PermissibleValue( text="MinLengthConstraint", description="constraint where the slot value must have a length equal to or less than a specified maximum", - meaning=SH.MinLengthConstraintComponent, + meaning=SH["MinLengthConstraintComponent"], ) PatternConstraint = PermissibleValue( text="PatternConstraint", description="constraint where the slot value must match a given regular expression pattern", - meaning=SH.PatternConstraintComponent, + meaning=SH["PatternConstraintComponent"], ) ClosedClassConstraint = PermissibleValue( text="ClosedClassConstraint", description="constraint where the slot value must be allowable for the instantiated class", - meaning=SH.ClosedConstraintComponent, + meaning=SH["ClosedConstraintComponent"], ) DesignatesTypeConstraint = PermissibleValue(text="DesignatesTypeConstraint") - InstanceConstraint = PermissibleValue(text="InstanceConstraint", meaning=SH.NodeConstraintComponent) - SlotConstraint = PermissibleValue(text="SlotConstraint", meaning=SH.PropertyConstraintComponent) + InstanceConstraint = PermissibleValue(text="InstanceConstraint", meaning=SH["NodeConstraintComponent"]) + SlotConstraint = PermissibleValue(text="SlotConstraint", meaning=SH["PropertyConstraintComponent"]) PermissibleValueConstraint = PermissibleValue( text="PermissibleValueConstraint", description="constraint where the slot value must be one of a set of permissible values", - meaning=SH.InConstraintComponent, + meaning=SH["InConstraintComponent"], ) UndeclaredSlotConstraint = PermissibleValue(text="UndeclaredSlotConstraint") RuleConstraint = PermissibleValue( @@ -469,25 +454,26 @@ class ConstraintType(EnumDefinitionImpl): ) ExpressionConstraint = PermissibleValue(text="ExpressionConstraint") EqualsExpressionConstraint = PermissibleValue( - text="EqualsExpressionConstraint", meaning=SH.EqualsConstraintComponent + text="EqualsExpressionConstraint", meaning=SH["EqualsConstraintComponent"] ) LessThanExpressionConstraint = PermissibleValue( - text="LessThanExpressionConstraint", meaning=SH.LessThanConstraintComponent + text="LessThanExpressionConstraint", meaning=SH["LessThanConstraintComponent"] ) LessThanOrEqualsExpressionConstraint = PermissibleValue( - text="LessThanOrEqualsExpressionConstraint", - meaning=SH.LessThanOrEqualsComponent, + text="LessThanOrEqualsExpressionConstraint", meaning=SH["LessThanOrEqualsComponent"] + ) + DisjointConstraint = PermissibleValue(text="DisjointConstraint", meaning=SH["DisjointConstraintComponent"]) + MinimumValueConstraint = PermissibleValue( + text="MinimumValueConstraint", meaning=SH["MinInclusiveConstraintComponent"] + ) + MaximumValueConstraint = PermissibleValue( + text="MaximumValueConstraint", meaning=SH["MaxInclusiveConstraintComponent"] ) - DisjointConstraint = PermissibleValue(text="DisjointConstraint", meaning=SH.DisjointConstraintComponent) - MinimumValueConstraint = PermissibleValue(text="MinimumValueConstraint", meaning=SH.MinInclusiveConstraintComponent) - MaximumValueConstraint = PermissibleValue(text="MaximumValueConstraint", meaning=SH.MaxInclusiveConstraintComponent) MinimumExclusiveValueConstraint = PermissibleValue( - text="MinimumExclusiveValueConstraint", - meaning=SH.MinExclusiveInclusiveConstraintComponent, + text="MinimumExclusiveValueConstraint", meaning=SH["MinExclusiveInclusiveConstraintComponent"] ) MaximumExclusiveValueConstraint = PermissibleValue( - text="MaximumExclusiveValueConstraint", - meaning=SH.MaxExclusiveInclusiveConstraintComponent, + text="MaximumExclusiveValueConstraint", meaning=SH["MaxExclusiveInclusiveConstraintComponent"] ) CollectionFormConstraint = PermissibleValue(text="CollectionFormConstraint") ListCollectionFormConstraint = PermissibleValue(text="ListCollectionFormConstraint") @@ -561,12 +547,7 @@ class slots: ) slots.source = Slot( - uri=VM.source, - name="source", - curie=VM.curie("source"), - model_uri=VM.source, - domain=None, - range=Optional[str], + uri=VM.source, name="source", curie=VM.curie("source"), model_uri=VM.source, domain=None, range=Optional[str] ) slots.severity = Slot( @@ -651,12 +632,7 @@ class slots: ) slots.node__id = Slot( - uri=VM.id, - name="node__id", - curie=VM.curie("id"), - model_uri=VM.node__id, - domain=None, - range=URIRef, + uri=VM.id, name="node__id", curie=VM.curie("id"), model_uri=VM.node__id, domain=None, range=URIRef ) slots.validationConfiguration__max_number_results_per_type = Slot( diff --git a/packages/linkml_runtime/src/linkml_runtime/utils/eval_utils.py b/packages/linkml_runtime/src/linkml_runtime/utils/eval_utils.py index cb0cfd222e..0225cbf288 100644 --- a/packages/linkml_runtime/src/linkml_runtime/utils/eval_utils.py +++ b/packages/linkml_runtime/src/linkml_runtime/utils/eval_utils.py @@ -111,23 +111,13 @@ def eval_expr(expr: str, _distribute=True, **kwargs) -> Any: def eval_(node, bindings=None, distribute=True): if bindings is None: bindings = {} - if isinstance(node, ast.Num): - return node.n - elif isinstance(node, ast.Str): - if "s" in vars(node): - return node.s - else: - return node.value - elif isinstance(node, ast.Constant): + + if isinstance(node, ast.Constant): return node.value elif isinstance(node, ast.Name): return bindings.get(node.id) elif isinstance(node, ast.Subscript): - if isinstance(node.slice, ast.Index): - # required for python 3.7 - k = eval_(node.slice.value, bindings) - else: - k = eval_(node.slice, bindings) + k = eval_(node.slice, bindings) v = eval_(node.value, bindings) return v[k] elif isinstance(node, ast.Attribute): diff --git a/packages/linkml_runtime/src/linkml_runtime/utils/formatutils.py b/packages/linkml_runtime/src/linkml_runtime/utils/formatutils.py index a829981451..a1fb318aa7 100644 --- a/packages/linkml_runtime/src/linkml_runtime/utils/formatutils.py +++ b/packages/linkml_runtime/src/linkml_runtime/utils/formatutils.py @@ -2,7 +2,7 @@ from decimal import Decimal from typing import Any -from jsonasobj2 import JsonObj, as_dict, is_dict, is_list, items +from jsonasobj2 import JsonObj, is_dict, is_list, items ws_pattern = re.compile(r"\s+") us_pattern = re.compile(r"_+") @@ -118,7 +118,7 @@ def is_empty(v: Any) -> bool: 3) It is an empty list 4) It is an empty JsonObj """ - return v is None or (isinstance(v, dict | list) and not v) or (isinstance(v, JsonObj) and not as_dict(v)) + return v is None or (isinstance(v, dict | list | JsonObj) and not v) def remove_empty_items(obj: Any, hide_protected_keys: bool = False, inside: bool = False) -> Any: diff --git a/packages/linkml_runtime/src/linkml_runtime/utils/rdf_canonicalize.py b/packages/linkml_runtime/src/linkml_runtime/utils/rdf_canonicalize.py new file mode 100644 index 0000000000..9443cd678f --- /dev/null +++ b/packages/linkml_runtime/src/linkml_runtime/utils/rdf_canonicalize.py @@ -0,0 +1,228 @@ +"""Deterministic RDF serialization via pyoxigraph RDFC-1.0 canonicalization. + +This module provides a function to canonicalize an rdflib Graph using +pyoxigraph's RDFC-1.0 implementation, producing deterministic output +with stable blank node labels and sorted triples. + +**Known limitations:** + +1. **xsd:string normalization**: pyoxigraph follows RDF 1.1, where plain + string literals and ``"text"^^xsd:string`` are identical. The output + will never contain explicit ``^^xsd:string`` annotations. Code that + re-parses the output with rdflib will see ``Literal("x")`` (datatype + ``None``) rather than ``Literal("x", datatype=XSD.string)``. + +2. **Non-standard RDF**: Graphs with literal predicates (e.g. SHACL + annotation mode) are rejected by pyoxigraph. This function falls + back to rdflib's serializer for such graphs. + +3. **Numeric short forms**: pyoxigraph uses Turtle short forms for + ``xsd:integer`` (``42``), ``xsd:boolean`` (``true``), and + ``xsd:decimal`` (``1.23``). rdflib parses these back with the + correct datatype, so this is lossless. + +4. **Base IRI / prefix collision**: When a graph has ``@base`` and a + prefix whose namespace equals the base IRI (e.g. rdflib's auto-bound + ``base:`` prefix), pyoxigraph emits CURIEs like ``base:label`` that + rdflib rejects. We skip such prefixes during serialization. + +5. **Trailing escaped dot in PN_LOCAL**: pyoxigraph emits CURIEs like + ``prefix:local\\.`` for IRIs whose local part ends with ``.``. This + is valid Turtle (PN_LOCAL_ESC), but rdflib's notation3 parser rejects + it because it conflicts with the statement-terminator dot. We + post-process the output to expand such CURIEs to full ```` form. +""" + +import io +import logging +import re + +import pyoxigraph as ox +import rdflib + +logger = logging.getLogger(__name__) + +# Mapping from rdflib/LinkML format strings to pyoxigraph RdfFormat objects. +_FORMAT_MAP: dict[str, ox.RdfFormat] = { + "turtle": ox.RdfFormat.TURTLE, + "ttl": ox.RdfFormat.TURTLE, + "nt": ox.RdfFormat.N_TRIPLES, + "ntriples": ox.RdfFormat.N_TRIPLES, + "n-triples": ox.RdfFormat.N_TRIPLES, + "nt11": ox.RdfFormat.N_TRIPLES, + "nquads": ox.RdfFormat.N_QUADS, + "n-quads": ox.RdfFormat.N_QUADS, + "xml": ox.RdfFormat.RDF_XML, + "rdf/xml": ox.RdfFormat.RDF_XML, + "trig": ox.RdfFormat.TRIG, + "n3": ox.RdfFormat.N3, +} + +# Formats that support prefix declarations. +_PREFIX_FORMATS = frozenset({ox.RdfFormat.TURTLE, ox.RdfFormat.TRIG, ox.RdfFormat.N3, ox.RdfFormat.RDF_XML}) + + +# Characters that may appear escaped in a Turtle PN_LOCAL via PN_LOCAL_ESC. +_PN_LOCAL_ESC_UNESCAPE = re.compile(r"\\([_~.\-!$&'()*+,;=/?#@%])") + + +def _expand_trailing_dot_curies(turtle_text: str, prefixes: dict[str, str]) -> str: + """Replace CURIEs whose local part ends in ``\\.`` with full ```` form. + + rdflib's notation3 parser rejects PN_LOCAL ending in an escaped dot + even though Turtle permits it (PN_LOCAL_ESC). pyoxigraph emits this + form for IRIs ending in ``.`` (e.g. ``biolink:StrandEnum#.``). We + rewrite each such CURIE to its expanded ```` form so the output + round-trips through rdflib. + """ + if not prefixes: + return turtle_text + + # Match: a prefix name, ':', a local part (no whitespace or token + # delimiters), ending in ``\.``, followed by whitespace. Use a + # negative lookbehind to avoid matching inside ``<...>`` or word + # characters that would make this a substring of something else. + pattern = re.compile( + r"(?\"'\[\]]*?\\\.)" + r"(?=\s)" + ) + + def replace(match: re.Match[str]) -> str: + prefix = match.group(1) + local_escaped = match.group(2) + namespace = prefixes.get(prefix) + if namespace is None: + return match.group(0) + local = _PN_LOCAL_ESC_UNESCAPE.sub(r"\1", local_escaped) + return f"<{namespace}{local}>" + + return pattern.sub(replace, turtle_text) + + +def _is_safe_prefix_iri(iri: str) -> bool: + """Check whether a namespace IRI is safe for prefix serialization. + + pyoxigraph rejects IRIs with invalid code-points (e.g. double ``#``), + and rdflib's Turtle parser cannot round-trip CURIEs whose namespace + contains query parameters or fragments in unexpected positions. This + function returns ``False`` for such IRIs so they can be skipped during + prefix collection. + """ + # A namespace IRI should end with '/' or '#'. If '#' appears + # *before* the final character, the IRI contains an embedded + # fragment which produces unusable CURIEs. + if "#" in iri[:-1]: + return False + # Query parameters in namespace IRIs produce CURIEs that rdflib + # cannot parse back. + if "?" in iri: + return False + return True + + +def canonicalize_rdf_graph( + graph: rdflib.Graph, + output_format: str = "turtle", +) -> str: + """Serialize an rdflib Graph deterministically using RDFC-1.0 canonicalization. + + The graph is transferred to pyoxigraph via N-Triples, canonicalized + with RDFC-1.0, sorted, and serialized back to the requested format. + Prefix bindings from the rdflib Graph are preserved in the output + for formats that support them (Turtle, TriG, N3, RDF/XML). + + Falls back to plain rdflib serialization for unsupported formats or + graphs containing non-standard RDF (e.g. literal predicates). + + :param graph: The rdflib Graph to serialize. + :param output_format: Target serialization format (e.g. ``"turtle"``, ``"nt"``). + :return: Deterministic string serialization of the graph. + """ + ox_format = _FORMAT_MAP.get(output_format.lower()) + if ox_format is None: + logger.warning( + "pyoxigraph does not support format %r; falling back to rdflib serializer", + output_format, + ) + return graph.serialize(format=output_format) + + # 1. Transfer rdflib graph to pyoxigraph via N-Triples. + nt_data = graph.serialize(format="nt") + nt_bytes = nt_data.encode("utf-8") if isinstance(nt_data, str) else nt_data + + # 2. Parse into pyoxigraph and build a Dataset for canonicalization. + # Fall back to rdflib if the graph contains non-standard RDF + # (e.g. literal predicates from annotations) that pyoxigraph rejects. + try: + triples = list(ox.parse(io.BytesIO(nt_bytes), format=ox.RdfFormat.N_TRIPLES)) + except SyntaxError: + logger.warning( + "Graph contains non-standard RDF that pyoxigraph cannot parse; falling back to rdflib serializer" + ) + return graph.serialize(format=output_format) + + dataset = ox.Dataset() + for triple in triples: + dataset.add(ox.Quad(triple.subject, triple.predicate, triple.object, ox.DefaultGraph())) + + # 3. Canonicalize blank node labels with RDFC-1.0. + dataset.canonicalize(ox.CanonicalizationAlgorithm.RDFC_1_0) + + # 4. Sort triples for deterministic ordering. + # RDFC-1.0 stabilizes blank-node labels but pyoxigraph's Dataset + # iteration order is not sorted and varies across processes (verified + # empirically against pyoxigraph 0.5.8). The explicit string-key sort + # is load-bearing for byte-identical output across runs; see + # tests/linkml_runtime/test_utils/test_rdf_canonicalize.py::test_sort_is_load_bearing. + quads = list(dataset) + sorted_triples = sorted( + (ox.Triple(q.subject, q.predicate, q.object) for q in quads), + key=lambda t: (str(t.subject), str(t.predicate), str(t.object)), + ) + + # 5. Collect prefixes for formats that support them. + base_iri = str(graph.base) if graph.base else None + prefixes: dict[str, str] | None = None + if ox_format in _PREFIX_FORMATS: + prefixes = {} + for prefix, namespace in graph.namespace_manager.namespaces(): + if not prefix: # skip empty prefix (base) + continue + ns_str = str(namespace) + # Skip prefixes whose namespace matches the base IRI to avoid + # pyoxigraph emitting CURIEs like `base:label` that conflict + # with the @base directive. + if base_iri and ns_str == base_iri: + continue + # Skip namespace IRIs that pyoxigraph rejects or that produce + # CURIEs rdflib cannot round-trip. Valid namespace IRIs for + # prefix use should end with '/' or '#' and contain no query + # parameters or fragment-like characters in the middle. + if not _is_safe_prefix_iri(ns_str): + continue + prefixes[str(prefix)] = ns_str + used_prefixes = prefixes + try: + result_bytes = ox.serialize( + sorted_triples, + format=ox_format, + prefixes=prefixes, + base_iri=base_iri, + ) + except ValueError: + # pyoxigraph rejects prefixes with invalid IRIs (e.g. containing + # fragment-like characters such as double '#'). Retry without + # the offending prefixes by falling back to no prefixes, which + # still produces valid (if verbose) Turtle. + logger.warning("pyoxigraph rejected one or more prefix IRIs; serializing without prefix declarations") + result_bytes = ox.serialize( + sorted_triples, + format=ox_format, + ) + used_prefixes = None + result = result_bytes.decode("utf-8") + if ox_format in _PREFIX_FORMATS and used_prefixes: + result = _expand_trailing_dot_curies(result, used_prefixes) + return result diff --git a/packages/linkml_runtime/src/linkml_runtime/utils/yamlutils.py b/packages/linkml_runtime/src/linkml_runtime/utils/yamlutils.py index 5162342b25..d10d6a5a33 100644 --- a/packages/linkml_runtime/src/linkml_runtime/utils/yamlutils.py +++ b/packages/linkml_runtime/src/linkml_runtime/utils/yamlutils.py @@ -506,6 +506,7 @@ def seq_constructor(loader, node, deep=False): yaml.SafeDumper.add_multi_representer(YAMLRoot, root_representer) +yaml.SafeDumper.add_multi_representer(JsonObj, root_representer) yaml.SafeDumper.add_multi_representer(extended_str, yaml.SafeDumper.represent_str) yaml.SafeDumper.add_multi_representer(extended_int, yaml.SafeDumper.represent_int) yaml.SafeDumper.add_multi_representer(extended_float, yaml.SafeDumper.represent_float) diff --git a/tests/conftest.py b/tests/conftest.py index e68d0fb961..d31b356abf 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -323,8 +323,6 @@ def pytest_sessionstart(session: pytest.Session): if session.config.getoption("--generate-snapshots"): tests.DEFAULT_MISMATCH_ACTION = "MismatchAction.Ignore" - _monkeypatch_pyshex() - # Clear all warning registries at session start for module in list(sys.modules.values()): if hasattr(module, "__warningregistry__"): @@ -334,26 +332,6 @@ def pytest_sessionstart(session: pytest.Session): warnings.simplefilter("always") -def _monkeypatch_pyshex(): - import sys - import typing - from importlib.metadata import version - from types import ModuleType - from typing import TextIO - - if version("pyshexc") != "0.9.1": - raise RuntimeError( - "Pyshex has been updated, remove this monkeypatch:\n" - "- remove this function\n" - "- remove the call to `_monkeypatch_pyshex in `pytest_sessionstart`\n" - "- remove the skipif mark on test_notebooks/test_nodebooks.py:test_redo_notebook\n" - ) - typing_io = ModuleType("io") - typing_io.TextIO = TextIO - typing.io = typing_io - sys.modules["typing.io"] = typing_io - - def pytest_runtest_setup(item): # Clear warning registries before each test for module in list(sys.modules.values()): diff --git a/tests/linkml/test_compliance/helper.py b/tests/linkml/test_compliance/helper.py index 5f156ee5bb..5476882278 100644 --- a/tests/linkml/test_compliance/helper.py +++ b/tests/linkml/test_compliance/helper.py @@ -31,6 +31,7 @@ from linkml_runtime.loaders import rdflib_loader from linkml_runtime.utils.compile_python import compile_python from linkml_runtime.utils.introspection import package_schemaview +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.yamlutils import YAMLRoot from .dataframe_helper import check_data_pandera @@ -979,7 +980,7 @@ def _convert_data_to_rdf(schema: dict, instance: dict, target_class: str, ttl_pa "P": "http://example.org/P/", }, ) - ttl_output = g.serialize(format="turtle") + ttl_output = canonicalize_rdf_graph(g, output_format="turtle") g = rdflib.Graph() g.parse(data=ttl_output, format="turtle") _roundtripped = rdflib_loader.load(ttl_output, target_class=py_cls, schemaview=schemaview) diff --git a/tests/linkml/test_generators/input/jsonschema_slot_readonly.yaml b/tests/linkml/test_generators/input/jsonschema_slot_readonly.yaml new file mode 100644 index 0000000000..4161e160b8 --- /dev/null +++ b/tests/linkml/test_generators/input/jsonschema_slot_readonly.yaml @@ -0,0 +1,24 @@ +id: https://example.org/readonly-test +name: readonly_test +prefixes: + linkml: https://w3id.org/linkml/ +imports: + - linkml:types +default_range: string + +slots: + managed: + readonly: assigned by the server + empty_reason: + readonly: "" + plain: + description: not read only + +classes: + Base: + slots: + - managed + - empty_reason + - plain + Sub: + is_a: Base diff --git a/tests/linkml/test_generators/rdf/test_rdfgen_binary.py b/tests/linkml/test_generators/rdf/test_rdfgen_binary.py index 7a3d57a51e..47f412a30b 100644 --- a/tests/linkml/test_generators/rdf/test_rdfgen_binary.py +++ b/tests/linkml/test_generators/rdf/test_rdfgen_binary.py @@ -1,7 +1,13 @@ -from pathlib import Path -from typing import Any +"""Tests for RDFGenerator.serialize() with and without output paths. + +After the switch to canonicalize_rdf_graph (pyoxigraph RDFC-1.0), +the old binary fallback (UnicodeDecodeError → destination) no longer +exists. These tests verify the current behaviour: serialize always +returns a str, and when an output path is given the same text is +written to the file. +""" -from rdflib import Graph +from pathlib import Path from linkml.generators.rdfgen import RDFGenerator @@ -21,78 +27,29 @@ def _write_min_schema(p: Path) -> Path: return p -def test_with_output_binary_path_on_decode_error(monkeypatch, tmp_path): - """On UnicodeDecodeError: write via destination, keep stdout empty.""" - calls: dict[str, Any] = {"destination_called": False, "format": None} - - def fake_serialize(self, *args, **kwargs): - if "destination" not in kwargs: - raise UnicodeDecodeError("utf-8", b"\xff", 0, 1, "invalid start byte") - calls["destination_called"] = True - calls["format"] = kwargs.get("format") - dest = kwargs["destination"] - Path(dest).write_bytes(b"\x00\x01\x02BINARY-DATA") - return None - - monkeypatch.setattr(Graph, "serialize", fake_serialize, raising=True) - - schema_path = _write_min_schema(tmp_path / "schema.yaml") - out_path = tmp_path / "out.bin" - +def test_without_output_returns_text(tmp_path): + """Without -o, serialize() returns a non-empty str.""" + schema_path = _write_min_schema(tmp_path / "s.yaml") gen = RDFGenerator(str(schema_path), mergeimports=False) - gen.format = "ttl" # maps to 'turtle' - - ret = gen.serialize(output=str(out_path)) - - assert ret.strip() == "" - assert calls["destination_called"] is True - assert calls["format"] == "turtle" - assert out_path.exists() and out_path.stat().st_size > 0 - - data = out_path.read_bytes() - assert data.startswith(b"\x00\x01\x02BINARY-DATA") - - -def test_with_output_text_path_returns_text_and_writes_file(monkeypatch, tmp_path): - """If serialization returns text, write UTF-8 file and return the same text.""" - calls: dict[str, Any] = {"destination_called": False, "format": None} + gen.format = "turtle" - def fake_serialize(self, *args, **kwargs): - if "destination" in kwargs: - calls["destination_called"] = True - calls["format"] = kwargs.get("format") - return None - fmt = kwargs.get("format") - return f"# fake {fmt} content" + ret = gen.serialize() + assert isinstance(ret, str) + assert len(ret.strip()) > 0 - monkeypatch.setattr(Graph, "serialize", fake_serialize, raising=True) +def test_with_output_writes_file_and_returns_text(tmp_path): + """With -o, serialize() writes UTF-8 file and returns the same text.""" schema_path = _write_min_schema(tmp_path / "schema.yaml") out_path = tmp_path / "out.ttl" gen = RDFGenerator(str(schema_path), mergeimports=False) - gen.format = "ttl" # => 'turtle' + gen.format = "ttl" ret = gen.serialize(output=str(out_path)) - assert isinstance(ret, str) and ret.startswith("# fake turtle") - assert calls["destination_called"] is False + assert isinstance(ret, str) + assert len(ret.strip()) > 0 + assert out_path.exists() txt = out_path.read_text(encoding="utf-8") - assert txt.rstrip("\n") == ret.rstrip("\n") - - -def test_without_output_returns_text(monkeypatch, tmp_path): - """Without -o, return text.""" - - def fake_serialize(self, *args, **kwargs): - assert "destination" not in kwargs - return "# fake turtle content" - - monkeypatch.setattr(Graph, "serialize", fake_serialize, raising=True) - - schema_path = _write_min_schema(tmp_path / "s.yaml") - gen = RDFGenerator(str(schema_path), mergeimports=False) - gen.format = "turtle" - - ret = gen.serialize() - assert isinstance(ret, str) and ret.startswith("# fake turtle") + assert txt == ret diff --git a/tests/linkml/test_generators/test_docgen.py b/tests/linkml/test_generators/test_docgen.py index ca8acd67dd..f9ddd83e20 100644 --- a/tests/linkml/test_generators/test_docgen.py +++ b/tests/linkml/test_generators/test_docgen.py @@ -1640,6 +1640,10 @@ def test_core_element_properties(input_path, tmp_path): # Test inherited slot base_property_file = tmp_path / "base_property.md" assert_mdfile_contains(base_property_file, "| Inherited | Yes |", after="Slot Characteristics") + # Issue #3569: empty Cardinality table swallowed the next heading. The "Cardinality and + # Requirements" section must be omitted entirely when the slot has no cardinality data, + # otherwise an empty Markdown table consumes the following ### heading as a table row. + assert_mdfile_does_not_contain(base_property_file, "### Cardinality and Requirements") # Test designates_type slot type_designator_file = tmp_path / "type_designator.md" diff --git a/tests/linkml/test_generators/test_excelgen.py b/tests/linkml/test_generators/test_excelgen.py index 72262b1aac..a55de80691 100644 --- a/tests/linkml/test_generators/test_excelgen.py +++ b/tests/linkml/test_generators/test_excelgen.py @@ -1,10 +1,12 @@ +import hashlib import logging import os import pytest +from click.testing import CliRunner from openpyxl import load_workbook -from linkml.generators.excelgen import ExcelGenerator +from linkml.generators.excelgen import ExcelGenerator, cli def test_excel_generation(input_path, tmp_path): @@ -364,3 +366,148 @@ def test_enum_values_exceed_255_chars_logs_warning(input_path, tmp_path, caplog) # Assert a warning was logged about enum values exceeding 255 characters assert any("255" in record.message and "LongEnum" in record.message for record in caplog.records) + + +##### tests for long class names (> 31 chars) + +LONG_NAME_SCHEMA = """\ +id: https://example.org/excelgen-longname +name: excelgen_longname +prefixes: + linkml: https://w3id.org/linkml/ + ex: https://example.org/ +default_prefix: ex +imports: + - linkml:types + +classes: + AClassNameThatIsDefinitelyLongerThan31Chars: + description: 43-char class name to overflow Excel 31-char sheet title limit. + attributes: + id: + identifier: true + range: string + label: + range: string + ShortName: + attributes: + id: + identifier: true + range: string +""" + + +def test_long_class_name_does_not_crash(tmp_path): + """gen-excel must not raise KeyError when a class name exceeds 31 characters.""" + schema_path = tmp_path / "long_name.yaml" + schema_path.write_text(LONG_NAME_SCHEMA) + xlsx_path = tmp_path / "out.xlsx" + + ExcelGenerator(str(schema_path), output=str(xlsx_path)).serialize() + + wb = load_workbook(xlsx_path) + + # All sheet titles must be at most 31 characters + assert all(len(name) <= 31 for name in wb.sheetnames) + + # ShortName fits unchanged + assert "ShortName" in wb.sheetnames + + # The long class sheet title must be a deterministic 31-char truncation + long_cls = "AClassNameThatIsDefinitelyLongerThan31Chars" + h = hashlib.sha1(long_cls.encode("utf-8")).hexdigest()[:6] + expected_title = f"{long_cls[:24]}_{h}" + assert expected_title in wb.sheetnames + + # The truncated sheet must carry the expected column headers + ws = wb[expected_title] + headers = [ws.cell(row=1, column=i).value for i in range(1, ws.max_column + 1)] + assert "id" in headers + assert "label" in headers + + +def test_long_class_name_logs_warning(tmp_path, caplog): + """A warning must be emitted when a class name is truncated.""" + schema_path = tmp_path / "long_name.yaml" + schema_path.write_text(LONG_NAME_SCHEMA) + xlsx_path = tmp_path / "out.xlsx" + + with caplog.at_level(logging.WARNING, logger="linkml.generators.excelgen"): + ExcelGenerator(str(schema_path), output=str(xlsx_path)).serialize() + + long_cls = "AClassNameThatIsDefinitelyLongerThan31Chars" + assert any(long_cls in record.message for record in caplog.records) + + +def test_safe_sheet_title_short_name(): + """Names ≤ 31 chars pass through unchanged.""" + used: set = set() + assert ExcelGenerator._safe_sheet_title("ShortName", used) == "ShortName" + assert "ShortName" in used + + +def test_safe_sheet_title_long_name(): + """Names > 31 chars are truncated to exactly 31 chars.""" + used: set = set() + long_cls = "AClassNameThatIsDefinitelyLongerThan31Chars" + title = ExcelGenerator._safe_sheet_title(long_cls, used) + assert len(title) == 31 + h = hashlib.sha1(long_cls.encode("utf-8")).hexdigest()[:6] + assert title == f"{long_cls[:24]}_{h}" + + +def test_safe_sheet_title_collision_disambiguation(): + """Collisions after truncation are resolved deterministically.""" + used: set = set() + + # Two distinct long names sharing same 24-char prefix have different titles. + cls_a = "AClassNameThatIsDefinitelyLongerThan31Chars" + cls_b = "AClassNameThatIsDefinitelyLongerThan31CharsB" + title_a = ExcelGenerator._safe_sheet_title(cls_a, used) + title_b = ExcelGenerator._safe_sheet_title(cls_b, used) + assert title_a != title_b + assert len(title_a) <= 31 + assert len(title_b) <= 31 + + +def test_safe_sheet_title_collision_loop_executes(): + """The while-loop inside _safe_sheet_title fires when the candidate title + is already occupied.""" + used: set = {"ShortName"} # pre-populate so the first candidate collides + title = ExcelGenerator._safe_sheet_title("ShortName", used) + # The loop must have run: result differs from the original and stays ≤ 31 + assert title != "ShortName" + assert len(title) <= 31 + # The disambiguated title must now be in used + assert title in used + assert "ShortName" in used # original still present + + +def test_split_workbook_creates_output_dir(input_path, tmp_path): + """serialize() with split_workbook_by_class=True must create the output + directory when it does not yet exist.""" + organization_schema = str(input_path("organization.yaml")) + new_dir = tmp_path / "new_subdir" / "sheets" # does not exist + + ExcelGenerator( + organization_schema, + split_workbook_by_class=True, + output=str(new_dir), + ).serialize() + + assert new_dir.is_dir() + xlsx_files = list(new_dir.glob("*.xlsx")) + assert len(xlsx_files) > 0 + + +def test_cli_entry_point(input_path, tmp_path): + """The cli() Click command must produce a workbook without errors.""" + organization_schema = str(input_path("organization.yaml")) + xlsx_path = str(tmp_path / "cli_out.xlsx") + + runner = CliRunner() + result = runner.invoke(cli, [organization_schema, "-o", xlsx_path]) + + assert result.exit_code == 0, result.output + wb = load_workbook(xlsx_path) + assert len(wb.sheetnames) > 0 diff --git a/tests/linkml/test_generators/test_jsonschemagen.py b/tests/linkml/test_generators/test_jsonschemagen.py index 9173fad89e..27e71b1a0f 100644 --- a/tests/linkml/test_generators/test_jsonschemagen.py +++ b/tests/linkml/test_generators/test_jsonschemagen.py @@ -332,6 +332,27 @@ def test_slot_title_from_title_slot(subtests, input_path): external_file_test(subtests, input_path("jsonschema_slot_title_from_title.yaml"), {"title_from": "title"}) +def test_slot_readonly_emits_read_only(input_path): + """A slot with a non-empty ``readonly`` value should emit ``readOnly: true`` on + the JSON Schema property; absent or empty ``readonly`` should omit the keyword. + Inherited slots must also carry ``readOnly: true`` on every subclass, because + JSON Schema has no class inheritance. + + See: https://github.com/linkml/linkml/issues/3528 + """ + generated = json.loads(JsonSchemaGenerator(input_path("jsonschema_slot_readonly.yaml")).serialize()) + + # ``Sub`` inherits all three slots from ``Base`` via ``is_a``; JSON Schema has no + # class inheritance, so both classes must independently carry ``readOnly: true`` + # on ``managed`` and omit it on the others. + for cls_name in ("Base", "Sub"): + props = generated["$defs"][cls_name]["properties"] + assert "readOnly" in props["managed"] + assert props["managed"]["readOnly"] is True + assert "readOnly" not in props["empty_reason"] + assert "readOnly" not in props["plain"] + + @pytest.mark.parametrize("not_closed", [True, False]) def test_slot_identifier_non_nullability(input_path, not_closed): """ diff --git a/tests/linkml/test_generators/test_owlgen.py b/tests/linkml/test_generators/test_owlgen.py index ead3359ee2..062d4c31ac 100644 --- a/tests/linkml/test_generators/test_owlgen.py +++ b/tests/linkml/test_generators/test_owlgen.py @@ -1,3 +1,4 @@ +import logging from enum import Enum import pytest @@ -526,6 +527,175 @@ def test_abstract_class_without_subclasses_gets_no_union_of_axiom(): assert _union_members(g, EX.Orphan) is None +def test_abstract_class_with_no_children_emits_info(caplog): + """An abstract class with no children emits an info message about missing coverage. + + When an abstract class has zero subclasses, no covering axiom can be + generated. An info message alerts users that the class hierarchy is + incomplete — this is not a warning because abstract leaf classes are + a normal pattern in base schemas designed for downstream extension. + + See: mgskjaeveland's review on linkml/linkml#3309. + See: matentzn's review on linkml/linkml#3309. + """ + sb = SchemaBuilder() + sb.add_class("Orphan", abstract=True) + sb.add_defaults() + + with caplog.at_level(logging.INFO, logger="linkml.generators.owlgen"): + g = _owl_graph(sb) + + # No covering axiom emitted + assert _union_members(g, EX.Orphan) is None + + # An info message must be logged (not a warning) + assert any("has no children" in msg for msg in caplog.messages), ( + "Expected an info message about abstract class with no children" + ) + assert any("No covering axiom" in msg for msg in caplog.messages), ( + "Info message should mention that no covering axiom will be generated" + ) + + +def test_no_children_info_suppressed_by_skip_flag(caplog): + """When --skip-abstract-class-as-unionof-subclasses is set, no info for zero children.""" + sb = SchemaBuilder() + sb.add_class("Orphan", abstract=True) + sb.add_defaults() + + with caplog.at_level(logging.INFO, logger="linkml.generators.owlgen"): + _owl_graph(sb, skip_abstract_class_as_unionof_subclasses=True) + + assert not any("has no children" in msg for msg in caplog.messages) + + +def test_abstract_class_with_single_child_emits_warning(caplog): + """An abstract class with one child still gets a covering axiom but emits a warning. + + Per OWL 2 semantics, the covering axiom with a single child creates an + equivalence (Parent ≡ Child). This is logically correct but may surprise + users who plan to extend the ontology later. The generator should warn + and recommend ``--skip-abstract-class-as-unionof-subclasses``. + + See: W3C OWL 2 Primer §4.2 — bidirectional rdfs:subClassOf = equivalence. + See: mgskjaeveland's review on linkml/linkml#3309. + """ + sb = SchemaBuilder() + sb.add_class("GrandParent") + sb.add_class("Parent", is_a="GrandParent", abstract=True) + sb.add_class("Child", is_a="Parent") + sb.add_defaults() + + with caplog.at_level(logging.WARNING, logger="linkml.generators.owlgen"): + g = _owl_graph(sb) + + # Covering axiom IS still emitted (single child → equivalence is OWL-correct). + # With one child, _union_of returns the child URI directly (no owl:unionOf wrapper), + # so the covering axiom materialises as Parent rdfs:subClassOf Child. + # Combined with Child rdfs:subClassOf Parent (from is_a), this is the equivalence. + assert (EX.Parent, RDFS.subClassOf, EX.Child) in g, ( + "Covering axiom should produce Parent rdfs:subClassOf Child for single-child case" + ) + assert (EX.Child, RDFS.subClassOf, EX.Parent) in g + assert (EX.Parent, RDFS.subClassOf, EX.GrandParent) in g + + # But a warning must be logged + assert any("only 1 direct child" in msg for msg in caplog.messages), ( + "Expected a warning about single-child covering axiom creating equivalence" + ) + assert any("--skip-abstract-class-as-unionof-subclasses" in msg for msg in caplog.messages), ( + "Warning should recommend the skip flag" + ) + + +def test_single_child_warning_suppressed_by_skip_flag(caplog): + """When --skip-abstract-class-as-unionof-subclasses is set, no warning is emitted. + + The skip flag suppresses covering axioms entirely, so the single-child + equivalence case never arises. + """ + sb = SchemaBuilder() + sb.add_class("Parent", abstract=True) + sb.add_class("Child", is_a="Parent") + sb.add_defaults() + + with caplog.at_level(logging.WARNING, logger="linkml.generators.owlgen"): + g = _owl_graph(sb, skip_abstract_class_as_unionof_subclasses=True) + + # No covering axiom emitted + assert (EX.Parent, RDFS.subClassOf, EX.Child) not in g + # No warning either + assert not any("only 1 direct child" in msg for msg in caplog.messages) + + +def test_multiple_children_no_warning(caplog): + """An abstract class with 2+ children must NOT emit a warning. + + The covering axiom is a proper union (not a degenerate equivalence), + so no warning is needed. + """ + sb = SchemaBuilder() + sb.add_class("Animal", abstract=True) + sb.add_class("Dog", is_a="Animal") + sb.add_class("Cat", is_a="Animal") + sb.add_defaults() + + with caplog.at_level(logging.WARNING, logger="linkml.generators.owlgen"): + g = _owl_graph(sb) + + # Covering axiom emitted (proper union) + members = _union_members(g, EX.Animal) + assert members == {EX.Dog, EX.Cat} + + # No warning about children count + assert not any("has no children" in msg for msg in caplog.messages) + assert not any("only 1 direct child" in msg for msg in caplog.messages) + + +def test_non_abstract_class_no_warning(caplog): + """A non-abstract class must NOT emit covering axiom warnings. + + Covering axioms only apply to abstract classes. Concrete classes + should be silently skipped regardless of child count. + """ + sb = SchemaBuilder() + sb.add_class("Parent") # not abstract + sb.add_class("Child", is_a="Parent") + sb.add_defaults() + + with caplog.at_level(logging.WARNING, logger="linkml.generators.owlgen"): + g = _owl_graph(sb) + + # No covering axiom for non-abstract class + assert _union_members(g, EX.Parent) is None + assert (EX.Parent, RDFS.subClassOf, EX.Child) not in g + + # No warning either + assert not any("has no children" in msg for msg in caplog.messages) + assert not any("only 1 direct child" in msg for msg in caplog.messages) + + +def test_abstract_class_with_only_mixin_children_emits_info(caplog): + """An abstract class whose only children are via mixins (not is_a) gets the no-children info. + + The covering axiom only considers direct is_a children (not mixins). + If an abstract class has mixin children but no is_a children, it should + log an info message about having no children for covering axiom purposes. + """ + sb = SchemaBuilder() + sb.add_class("Base", abstract=True) + sb.add_class("MixinChild", mixins=["Base"]) + sb.add_defaults() + + with caplog.at_level(logging.INFO, logger="linkml.generators.owlgen"): + g = _owl_graph(sb) + + assert _union_members(g, EX.Base) is None + assert any("has no children" in msg for msg in caplog.messages), ( + "Abstract class with only mixin children should log info about no is_a children" + ) + + @pytest.mark.parametrize("skip", [False, True]) def test_union_of_axiom_only_covers_direct_children(skip: bool): """Union-of axiom lists only direct is_a children, not grandchildren. diff --git a/tests/linkml/test_generators/test_plantuml.py b/tests/linkml/test_generators/test_plantuml.py index 4338d98ed0..183306c8c4 100644 --- a/tests/linkml/test_generators/test_plantuml.py +++ b/tests/linkml/test_generators/test_plantuml.py @@ -172,38 +172,29 @@ def test_generate_svg(tmp_path, kitchen_sink_path, kroki_url): kitchen_sink_path, kroki_server=kroki_url, ) - generator.serialize(directory=tmp_path) - # name of SVG file will be inferred from schema name because - # we are passing a value to the directory argument - svg_file = tmp_path / "KitchenSink.svg" + # Verify structure via PlantUML text (no Kroki container call). Checking + # text output is more stable because Kronki SVG structure could change + # again: i.e. SVG group IDs (elem_ -> entity_ -> ent####) per #2728, #3463 + puml_text = generator.serialize() + assert 'class "Person"' in puml_text + assert 'class "Dataset"' in puml_text + assert 'class "FamilialRelationship"' in puml_text + assert 'class "MedicalEvent"' in puml_text + assert '"Person" *--> "0..*" "MedicalEvent"' in puml_text + assert '"FamilialRelationship" --> "1" "Person"' in puml_text + assert '"Dataset" *--> "0..*" "Person"' in puml_text + assert not any( + '"Dataset"' in ln and '"MarriageEvent"' in ln for ln in puml_text.splitlines() if "-->" in ln or "<--" in ln + ) - # check that SVG file is generated correctly + # Generate SVG via Kroki and verify the file is produced and parses as valid XML. + # The relationship strings ("Person" --> "MedicalEvent", etc.) + # are covered by test_serialize_selected() method below so this is enough. + generator.serialize(directory=tmp_path) + svg_file = tmp_path / "KitchenSink.svg" assert svg_file.is_file() - - svg_dom = minidom.parse(os.fspath(tmp_path / "KitchenSink.svg")) - - classes_list = [] # list of all classes in schema - relationships_list = [] # list of all links/relationships in schema - groups = svg_dom.getElementsByTagName("g") - for group in groups: - id = group.getAttribute("id") - if id.startswith("entity_"): - class_name = id[len("entity_") :] - classes_list.append(class_name) - if id.startswith("link_"): - link_name = id[len("link_") :] - relationships_list.append(link_name) - - assert "Person" in classes_list - assert "Dataset" in classes_list - assert "FamilialRelationship" in classes_list - assert "MedicalEvent" in classes_list - - assert "Person_MedicalEvent" in relationships_list - assert "FamilialRelationship_Person" in relationships_list - assert "Dataset_Person" in relationships_list - assert "Dataset_MarriageEvent" not in relationships_list + minidom.parse(os.fspath(svg_file)) def test_preserve_names(): diff --git a/tests/linkml/test_generators/test_shaclgen.py b/tests/linkml/test_generators/test_shaclgen.py index c99547df7e..84bac6b4ec 100644 --- a/tests/linkml/test_generators/test_shaclgen.py +++ b/tests/linkml/test_generators/test_shaclgen.py @@ -376,7 +376,16 @@ def test_ifabsent(input_path): def check_slot_default_value(slot: URIRef, default_value: Any, datatype: str = None) -> None: for subject, predicate, object in g.triples((None, SH.path, slot)): - assert (subject, SH.defaultValue, Literal(default_value, datatype=datatype)) in g + # pyoxigraph's RDFC-1.0 serialization drops explicit ^^xsd:string + # per RDF 1.1 (plain literals and xsd:string are equivalent). + # Accept either form for xsd:string typed values. + expected = Literal(default_value, datatype=datatype) + if (subject, SH.defaultValue, expected) in g: + return + if datatype and str(datatype) == "http://www.w3.org/2001/XMLSchema#string": + if (subject, SH.defaultValue, Literal(default_value)) in g: + return + raise AssertionError(f"Expected ({subject}, sh:defaultValue, {expected!r}) not found in graph") check_slot_default_value( URIRef("https://w3id.org/linkml/tests/kitchen_sink/ifabsent_string"), diff --git a/tests/linkml/test_issues/__snapshots__/linkml_issue_384.other.txt b/tests/linkml/test_issues/__snapshots__/linkml_issue_384.other.txt index 49cacbfc1f..6a75839e04 100644 --- a/tests/linkml/test_issues/__snapshots__/linkml_issue_384.other.txt +++ b/tests/linkml/test_issues/__snapshots__/linkml_issue_384.other.txt @@ -605,7 +605,7 @@ generation_date: '2000-01-01T00:00:00' . . "https://w3id.org/linkml/examples/personinfo/GeoAge"^^ . - _:cb87aa37e3ad3dfbc100de41e622ae57a55c01252d953cd7f596f3f617c04a97ed . + _:c14n2 . . . . @@ -615,7 +615,7 @@ generation_date: '2000-01-01T00:00:00' . "https://w3id.org/linkml/examples/personinfo/GeoObject"^^ . . - _:cb6f98b99448d1238734b7af2cc92e23f15ba5c211db30144440eb739460c2cd83 . + _:c14n0 . . . . @@ -625,7 +625,7 @@ generation_date: '2000-01-01T00:00:00' "https://w3id.org/linkml/examples/personinfo"^^ . "https://w3id.org/linkml/examples/personinfo/Organization"^^ . . - _:cbb30ac86ca541a453eee19cdf1b7946df090933188ade517a9677564c8beac5bd . + _:c14n6 . . . . @@ -666,7 +666,7 @@ generation_date: '2000-01-01T00:00:00' . "https://w3id.org/linkml/examples/personinfo/Person"^^ . . - _:cba5af5c45ef581571107e9f40ba038543b617d27dfa8e41f71bfa140c3e5b8c09 . + _:c14n1 . . . . @@ -692,7 +692,7 @@ generation_date: '2000-01-01T00:00:00' "ex:Thing"^^ . "https://w3id.org/linkml/examples/personinfo"^^ . "https://w3id.org/linkml/examples/personinfo/Thing"^^ . - _:cb0 . + _:c14n4 . . . . @@ -919,9 +919,9 @@ generation_date: '2000-01-01T00:00:00' "https://w3id.org/linkml/examples/personinfo/phone"^^ . "https://creativecommons.org/publicdomain/zero/1.0/" . . - _:cb12ea35aa63cc721cd40fd34b4d5d9273803f97d45aa2daf1ba2eaa4b56057c201 . - _:cb143d2c4dab8e5bf48fda351a4d8564e15c151870b769a85f734179402d94c77f6 . - _:cb1a41ad3544cb8764d54c45fc982a5303f0bd602841d715a83a410416873890504 . + _:c14n3 . + _:c14n5 . + _:c14n7 . . . . @@ -1023,12 +1023,12 @@ generation_date: '2000-01-01T00:00:00' "http://www.w3.org/2001/XMLSchema#anyURI"^^ . . . -_:cb12ea35aa63cc721cd40fd34b4d5d9273803f97d45aa2daf1ba2eaa4b56057c201 "https://w3id.org/linkml/"^^ . -_:cb12ea35aa63cc721cd40fd34b4d5d9273803f97d45aa2daf1ba2eaa4b56057c201 "linkml" . -_:cb143d2c4dab8e5bf48fda351a4d8564e15c151870b769a85f734179402d94c77f6 "http://schema.org/"^^ . -_:cb143d2c4dab8e5bf48fda351a4d8564e15c151870b769a85f734179402d94c77f6 "sdo" . -_:cb1a41ad3544cb8764d54c45fc982a5303f0bd602841d715a83a410416873890504 "https://w3id.org/linkml/examples/personinfo/"^^ . -_:cb1a41ad3544cb8764d54c45fc982a5303f0bd602841d715a83a410416873890504 "ex" . +_:c14n3 "https://w3id.org/linkml/examples/personinfo/"^^ . +_:c14n3 "ex" . +_:c14n5 "http://schema.org/"^^ . +_:c14n5 "sdo" . +_:c14n7 "https://w3id.org/linkml/"^^ . +_:c14n7 "linkml" . # --- linkml_issue_384.py --- # Auto generated from linkml_issue_384.yaml by pythongen.py version: 0.0.1 diff --git a/tests/linkml/test_issues/__snapshots__/linkml_issue_384.owl.txt b/tests/linkml/test_issues/__snapshots__/linkml_issue_384.owl.txt index c1772f2805..0dfbd8ea82 100644 --- a/tests/linkml/test_issues/__snapshots__/linkml_issue_384.owl.txt +++ b/tests/linkml/test_issues/__snapshots__/linkml_issue_384.owl.txt @@ -1,55 +1,55 @@ # --- linkml_issue_384-False-False.owl --- . "GeoAge" . - _:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 . - _:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda . - _:cb1f07ec28cdb8029f73418d769b10652eadf89c2930f7e5d948ba3665125ffdd3b . - _:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 . - _:cb26e0d87f901e35c7138955124b4f6c3cdc7262aa37e10fdd8e0173f74bfdff98d . - _:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 . + _:c14n10 . + _:c14n13 . + _:c14n18 . + _:c14n21 . + _:c14n7 . + _:c14n9 . . . "GeoObject" . . - _:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 . - _:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf . - _:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . - _:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba . - _:cb2af9ff61cc76b6f2a2dcf571b7a049921d1546c340489657e3942fb0a715a36fe . - _:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 . + _:c14n15 . + _:c14n2 . + _:c14n23 . + _:c14n24 . + _:c14n28 . + _:c14n4 . . . "Organization" . . - _:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e . - _:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . - _:cb27102cb0c73e192ca1d4283cc7f20a32a15988266a2823e5828e304828d03a5c2 . - _:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 . - _:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 . + _:c14n0 . + _:c14n12 . + _:c14n27 . + _:c14n29 . + _:c14n30 . . . "Person" . . - _:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 . - _:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 . - _:cb27e50cad98ec340969db736cbaf4bc5f6bbe583f92bac10dd75e1deb7cf54953f . - _:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 . - _:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 . - _:cb2c3053af06dbc90a2856ed009dcc90fba35d63942c364ccd21e52d8bfb97df1ec . - _:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . - _:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 . - _:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b . - _:cb314417b22ec189a2eaf05c5bff52d506a25055a8a063d0e4dea9b52822b25605f . + _:c14n11 . + _:c14n17 . + _:c14n22 . + _:c14n25 . + _:c14n26 . + _:c14n3 . + _:c14n31 . + _:c14n32 . + _:c14n6 . + _:c14n8 . . . . "Thing" . - _:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 . - _:cb1d30783b7a5397864f25ebd7654d631bf6d445fef6ee4733de82582f9b12cb8cd . - _:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 . - _:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a . - _:cb22537d349c147ef9d8f188db844904b96f7ea210acc0858184a31419e78f74c9e . - _:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 . + _:c14n1 . + _:c14n14 . + _:c14n16 . + _:c14n19 . + _:c14n20 . + _:c14n5 . . . . @@ -76,163 +76,163 @@ . . "personinfo" . -_:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 . -_:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 "0"^^ . -_:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 . -_:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 . -_:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 "0"^^ . -_:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 . -_:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 . -_:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 "0"^^ . -_:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 . -_:cb1d30783b7a5397864f25ebd7654d631bf6d445fef6ee4733de82582f9b12cb8cd . -_:cb1d30783b7a5397864f25ebd7654d631bf6d445fef6ee4733de82582f9b12cb8cd . -_:cb1d30783b7a5397864f25ebd7654d631bf6d445fef6ee4733de82582f9b12cb8cd . -_:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf . -_:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf "1"^^ . -_:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf . -_:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 . -_:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 "1"^^ . -_:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 . -_:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda . -_:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda "1"^^ . -_:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda . -_:cb1f07ec28cdb8029f73418d769b10652eadf89c2930f7e5d948ba3665125ffdd3b . -_:cb1f07ec28cdb8029f73418d769b10652eadf89c2930f7e5d948ba3665125ffdd3b . -_:cb1f07ec28cdb8029f73418d769b10652eadf89c2930f7e5d948ba3665125ffdd3b . -_:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a . -_:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a "0"^^ . -_:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a . -_:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 . -_:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 "0"^^ . -_:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 . -_:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . -_:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . -_:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . -_:cb22537d349c147ef9d8f188db844904b96f7ea210acc0858184a31419e78f74c9e . -_:cb22537d349c147ef9d8f188db844904b96f7ea210acc0858184a31419e78f74c9e . -_:cb22537d349c147ef9d8f188db844904b96f7ea210acc0858184a31419e78f74c9e . -_:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 . -_:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 "1"^^ . -_:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 . -_:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 . -_:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 "0"^^ . -_:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 . -_:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 . -_:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 "1"^^ . -_:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 . -_:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e . -_:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e "0"^^ . -_:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e . -_:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . -_:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . -_:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . -_:cb26e0d87f901e35c7138955124b4f6c3cdc7262aa37e10fdd8e0173f74bfdff98d . -_:cb26e0d87f901e35c7138955124b4f6c3cdc7262aa37e10fdd8e0173f74bfdff98d . -_:cb26e0d87f901e35c7138955124b4f6c3cdc7262aa37e10fdd8e0173f74bfdff98d . -_:cb27102cb0c73e192ca1d4283cc7f20a32a15988266a2823e5828e304828d03a5c2 . -_:cb27102cb0c73e192ca1d4283cc7f20a32a15988266a2823e5828e304828d03a5c2 . -_:cb27102cb0c73e192ca1d4283cc7f20a32a15988266a2823e5828e304828d03a5c2 . -_:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 . -_:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 "0"^^ . -_:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 . -_:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 . -_:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 "1"^^ . -_:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 . -_:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 . -_:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 "1"^^ . -_:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 . -_:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba . -_:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba "0"^^ . -_:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba . -_:cb27e50cad98ec340969db736cbaf4bc5f6bbe583f92bac10dd75e1deb7cf54953f . -_:cb27e50cad98ec340969db736cbaf4bc5f6bbe583f92bac10dd75e1deb7cf54953f . -_:cb27e50cad98ec340969db736cbaf4bc5f6bbe583f92bac10dd75e1deb7cf54953f . -_:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 . -_:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 "0"^^ . -_:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 . -_:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 . -_:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 "0"^^ . -_:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 . -_:cb2af9ff61cc76b6f2a2dcf571b7a049921d1546c340489657e3942fb0a715a36fe . -_:cb2af9ff61cc76b6f2a2dcf571b7a049921d1546c340489657e3942fb0a715a36fe . -_:cb2af9ff61cc76b6f2a2dcf571b7a049921d1546c340489657e3942fb0a715a36fe . -_:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 . -_:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 "1"^^ . -_:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 . -_:cb2c3053af06dbc90a2856ed009dcc90fba35d63942c364ccd21e52d8bfb97df1ec . -_:cb2c3053af06dbc90a2856ed009dcc90fba35d63942c364ccd21e52d8bfb97df1ec . -_:cb2c3053af06dbc90a2856ed009dcc90fba35d63942c364ccd21e52d8bfb97df1ec . -_:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . -_:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . -_:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . -_:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 . -_:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 "1"^^ . -_:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 . -_:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b . -_:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b "0"^^ . -_:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b . -_:cb314417b22ec189a2eaf05c5bff52d506a25055a8a063d0e4dea9b52822b25605f . -_:cb314417b22ec189a2eaf05c5bff52d506a25055a8a063d0e4dea9b52822b25605f . -_:cb314417b22ec189a2eaf05c5bff52d506a25055a8a063d0e4dea9b52822b25605f . +_:c14n0 . +_:c14n0 . +_:c14n0 . +_:c14n1 . +_:c14n1 . +_:c14n1 . +_:c14n10 . +_:c14n10 . +_:c14n10 . +_:c14n11 . +_:c14n11 "0"^^ . +_:c14n11 . +_:c14n12 . +_:c14n12 "0"^^ . +_:c14n12 . +_:c14n13 . +_:c14n13 . +_:c14n13 . +_:c14n14 . +_:c14n14 . +_:c14n14 . +_:c14n15 . +_:c14n15 "0"^^ . +_:c14n15 . +_:c14n16 . +_:c14n16 "1"^^ . +_:c14n16 . +_:c14n17 . +_:c14n17 . +_:c14n17 . +_:c14n18 . +_:c14n18 "0"^^ . +_:c14n18 . +_:c14n19 . +_:c14n19 "1"^^ . +_:c14n19 . +_:c14n2 . +_:c14n2 "0"^^ . +_:c14n2 . +_:c14n20 . +_:c14n20 "0"^^ . +_:c14n20 . +_:c14n21 . +_:c14n21 "1"^^ . +_:c14n21 . +_:c14n22 . +_:c14n22 "0"^^ . +_:c14n22 . +_:c14n23 . +_:c14n23 . +_:c14n23 . +_:c14n24 . +_:c14n24 . +_:c14n24 . +_:c14n25 . +_:c14n25 "1"^^ . +_:c14n25 . +_:c14n26 . +_:c14n26 . +_:c14n26 . +_:c14n27 . +_:c14n27 "1"^^ . +_:c14n27 . +_:c14n28 . +_:c14n28 "1"^^ . +_:c14n28 . +_:c14n29 . +_:c14n29 "0"^^ . +_:c14n29 . +_:c14n3 . +_:c14n3 . +_:c14n3 . +_:c14n30 . +_:c14n30 . +_:c14n30 . +_:c14n31 . +_:c14n31 "0"^^ . +_:c14n31 . +_:c14n32 . +_:c14n32 . +_:c14n32 . +_:c14n4 . +_:c14n4 "1"^^ . +_:c14n4 . +_:c14n5 . +_:c14n5 "0"^^ . +_:c14n5 . +_:c14n6 . +_:c14n6 "1"^^ . +_:c14n6 . +_:c14n7 . +_:c14n7 "0"^^ . +_:c14n7 . +_:c14n8 . +_:c14n8 "0"^^ . +_:c14n8 . +_:c14n9 . +_:c14n9 "1"^^ . +_:c14n9 . # --- linkml_issue_384-True-True.owl --- . . "GeoAge" . - _:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 . - _:cb1def0490d3233d18bbcdc75ea440636f2bbe33bf0d9fd842e9ac6c85d56782eb1 . - _:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda . - _:cb2251a2cc284802be192c79b4968c5e3e0d0a6310ef22b3c5b7486c1426634bfd4 . - _:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 . - _:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 . + _:c14n10 . + _:c14n17 . + _:c14n20 . + _:c14n23 . + _:c14n26 . + _:c14n7 . . . . "GeoObject" . . - _:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 . - _:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf . - _:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . - _:cb266ac9ae64a083e9a8801a1402dd3b934dad4729f78a3a400cdb27cd817aefd45 . - _:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba . - _:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 . + _:c14n1 . + _:c14n13 . + _:c14n2 . + _:c14n24 . + _:c14n28 . + _:c14n3 . . . . "Organization" . . - _:cb2280f6fd5f67e623a7774cdf132efc33d1f1888d2169c7cdabd52865033586c09 . - _:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e . - _:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . - _:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 . - _:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 . + _:c14n12 . + _:c14n27 . + _:c14n29 . + _:c14n30 . + _:c14n4 . . . . "Person" . . - _:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 . - _:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 . - _:cb2437057497c9a38863099ba911a51798d2811dd43bf7614a1a792873f19481ee8 . - _:cb27a11dfb9f0596012dfa11a2e90982fcd3f563fae377f0b54b2c25a8d5fd2b833 . - _:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 . - _:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 . - _:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . - _:cb2cb4e1fec6eb5699f09380fe4a8fc707d2e8560f57a574cd07f0ad44fd17a26a6 . - _:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 . - _:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b . + _:c14n0 . + _:c14n11 . + _:c14n15 . + _:c14n16 . + _:c14n21 . + _:c14n25 . + _:c14n31 . + _:c14n6 . + _:c14n8 . + _:c14n9 . . . . . "Thing" . - _:cb18a14288127d647d54c91079b08a551d276c4665ae2feb1c07c9504c757817f14 . - _:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 . - _:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 . - _:cb1dc44781343e4bf0de94ad7dcf85f6baa016a27764022969adea0c36c1f4c12e5 . - _:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a . - _:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 . + _:c14n14 . + _:c14n18 . + _:c14n19 . + _:c14n22 . + _:c14n32 . + _:c14n5 . . . . @@ -266,103 +266,103 @@ _:cb314417b22ec189a2eaf05c5bff52d506a25055a8a063d0e4dea9b52822b25605f . . "personinfo" . -_:cb18a14288127d647d54c91079b08a551d276c4665ae2feb1c07c9504c757817f14 . -_:cb18a14288127d647d54c91079b08a551d276c4665ae2feb1c07c9504c757817f14 . -_:cb18a14288127d647d54c91079b08a551d276c4665ae2feb1c07c9504c757817f14 . -_:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 . -_:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 "0"^^ . -_:cb19bb3d4e5067478c4b42732ad7814ace5f746c27d7053c41587dd574fcf2f4606 . -_:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 . -_:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 "0"^^ . -_:cb1a0196aabf80e00feb710af29d4b2330953104cd23be4266ef6f0890e1e938a89 . -_:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 . -_:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 "0"^^ . -_:cb1a82d378de24ceee4d880fb97fa60edc01c846e778d2e8849eb068d68cf447011 . -_:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf . -_:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf "1"^^ . -_:cb1d750bf2fa9ce3471746e17effe6f486ba74b3a158ac58c7ec5d5b425f84df5cf . -_:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 . -_:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 "1"^^ . -_:cb1dbb654f69b67bcab7757946c5b0cce8f0314c46a5655eed834e8e5e447b23a52 . -_:cb1dc44781343e4bf0de94ad7dcf85f6baa016a27764022969adea0c36c1f4c12e5 . -_:cb1dc44781343e4bf0de94ad7dcf85f6baa016a27764022969adea0c36c1f4c12e5 . -_:cb1dc44781343e4bf0de94ad7dcf85f6baa016a27764022969adea0c36c1f4c12e5 . -_:cb1def0490d3233d18bbcdc75ea440636f2bbe33bf0d9fd842e9ac6c85d56782eb1 . -_:cb1def0490d3233d18bbcdc75ea440636f2bbe33bf0d9fd842e9ac6c85d56782eb1 . -_:cb1def0490d3233d18bbcdc75ea440636f2bbe33bf0d9fd842e9ac6c85d56782eb1 . -_:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda . -_:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda "1"^^ . -_:cb1e3ca21d885a6aa9198c7e0da80bb8945cc88e60fa7a050b328feea3ef8631fda . -_:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a . -_:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a "0"^^ . -_:cb1f249ba3e141c783753ca7f6bc46c4ce0ddb60ded99080b4958fc47b2e65e1e5a . -_:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 . -_:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 "0"^^ . -_:cb2005559eb2b21a3c9355da151f33d642e4af7b0d372076ce53935aec788fa6f67 . -_:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . -_:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . -_:cb223ace63a5d4c89c0969a4be05e62755cf1328abcf1fc6fdf5e09256462f70a2b . -_:cb2251a2cc284802be192c79b4968c5e3e0d0a6310ef22b3c5b7486c1426634bfd4 . -_:cb2251a2cc284802be192c79b4968c5e3e0d0a6310ef22b3c5b7486c1426634bfd4 . -_:cb2251a2cc284802be192c79b4968c5e3e0d0a6310ef22b3c5b7486c1426634bfd4 . -_:cb2280f6fd5f67e623a7774cdf132efc33d1f1888d2169c7cdabd52865033586c09 . -_:cb2280f6fd5f67e623a7774cdf132efc33d1f1888d2169c7cdabd52865033586c09 . -_:cb2280f6fd5f67e623a7774cdf132efc33d1f1888d2169c7cdabd52865033586c09 . -_:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 . -_:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 "1"^^ . -_:cb22de6a488b77633e4141164ae4ac6e8668dba8585b379d3b296f4a4890f7cce23 . -_:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 . -_:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 "0"^^ . -_:cb23b1f6eed54b7e50afd4742d834d2c517acf217864b10b109eee245892d46cb49 . -_:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 . -_:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 "1"^^ . -_:cb23bf24435ce7b5f75f5a486947997ffb3fafc286b8c79354e772e0b9db2191f30 . -_:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e . -_:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e "0"^^ . -_:cb23e14b200c6b61b63e1f4757ffefca473fb646f496f81f18937ae0a96fa6a777e . -_:cb2437057497c9a38863099ba911a51798d2811dd43bf7614a1a792873f19481ee8 . -_:cb2437057497c9a38863099ba911a51798d2811dd43bf7614a1a792873f19481ee8 . -_:cb2437057497c9a38863099ba911a51798d2811dd43bf7614a1a792873f19481ee8 . -_:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . -_:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . -_:cb24a85419af6cf0d15e7bae94c471eaf0632069a8e2af85f5833415d38d3e2a7c1 . -_:cb266ac9ae64a083e9a8801a1402dd3b934dad4729f78a3a400cdb27cd817aefd45 . -_:cb266ac9ae64a083e9a8801a1402dd3b934dad4729f78a3a400cdb27cd817aefd45 . -_:cb266ac9ae64a083e9a8801a1402dd3b934dad4729f78a3a400cdb27cd817aefd45 . -_:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 . -_:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 "0"^^ . -_:cb2766e399d6d56b5602562bcdfa8bcade0989eca8ed336f11b67f3c7ad7edf0c62 . -_:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 . -_:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 "1"^^ . -_:cb276bc5937f811a0b7bd8e281abb2d609d5cf68f1e658279732cdaa25f56657b12 . -_:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 . -_:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 "1"^^ . -_:cb279b19c4b6a0fd710a23b5ac285573ff9ab68e6e189f3b9f275a6676d23892747 . -_:cb27a11dfb9f0596012dfa11a2e90982fcd3f563fae377f0b54b2c25a8d5fd2b833 . -_:cb27a11dfb9f0596012dfa11a2e90982fcd3f563fae377f0b54b2c25a8d5fd2b833 . -_:cb27a11dfb9f0596012dfa11a2e90982fcd3f563fae377f0b54b2c25a8d5fd2b833 . -_:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba . -_:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba "0"^^ . -_:cb27cb1dd111a3ff7c3f28148cef9e09a6bb7205916d18918af480e011edec108ba . -_:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 . -_:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 "0"^^ . -_:cb2901721e4c091193c4a20c1bd5ca511041ba22625906480032d1dded426e4c3a8 . -_:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 . -_:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 "0"^^ . -_:cb2a3227bee2c818a432f61adb96aa923b9f4dccb58093bf6fc5490945bc59586f7 . -_:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 . -_:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 "1"^^ . -_:cb2b84ec75bbd99b370b2c82e11803b35f16724d0aeebfae11886065df507dfb883 . -_:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . -_:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . -_:cb2ca4bb2d727b7c18cdb247369b15b04322625d0ebc5721da8bb8c6e344edaf78b . -_:cb2cb4e1fec6eb5699f09380fe4a8fc707d2e8560f57a574cd07f0ad44fd17a26a6 . -_:cb2cb4e1fec6eb5699f09380fe4a8fc707d2e8560f57a574cd07f0ad44fd17a26a6 . -_:cb2cb4e1fec6eb5699f09380fe4a8fc707d2e8560f57a574cd07f0ad44fd17a26a6 . -_:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 . -_:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 "1"^^ . -_:cb2cbb40c2f63ead4e90a67a6ffe2ffac89cba69dbdaad6486c6b163baa50037371 . -_:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b . -_:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b "0"^^ . -_:cb2e15362173eed22c873b7b773750951b40ad1476cd33cc17ef9665896988c321b . +_:c14n0 . +_:c14n0 . +_:c14n0 . +_:c14n1 . +_:c14n1 . +_:c14n1 . +_:c14n10 . +_:c14n10 "1"^^ . +_:c14n10 . +_:c14n11 . +_:c14n11 "0"^^ . +_:c14n11 . +_:c14n12 . +_:c14n12 "0"^^ . +_:c14n12 . +_:c14n13 . +_:c14n13 "0"^^ . +_:c14n13 . +_:c14n14 . +_:c14n14 "1"^^ . +_:c14n14 . +_:c14n15 . +_:c14n15 . +_:c14n15 . +_:c14n16 . +_:c14n16 . +_:c14n16 . +_:c14n17 . +_:c14n17 "0"^^ . +_:c14n17 . +_:c14n18 . +_:c14n18 "1"^^ . +_:c14n18 . +_:c14n19 . +_:c14n19 "0"^^ . +_:c14n19 . +_:c14n2 . +_:c14n2 "0"^^ . +_:c14n2 . +_:c14n20 . +_:c14n20 "1"^^ . +_:c14n20 . +_:c14n21 . +_:c14n21 "0"^^ . +_:c14n21 . +_:c14n22 . +_:c14n22 . +_:c14n22 . +_:c14n23 . +_:c14n23 . +_:c14n23 . +_:c14n24 . +_:c14n24 . +_:c14n24 . +_:c14n25 . +_:c14n25 "1"^^ . +_:c14n25 . +_:c14n26 . +_:c14n26 . +_:c14n26 . +_:c14n27 . +_:c14n27 "1"^^ . +_:c14n27 . +_:c14n28 . +_:c14n28 "1"^^ . +_:c14n28 . +_:c14n29 . +_:c14n29 "0"^^ . +_:c14n29 . +_:c14n3 . +_:c14n3 "1"^^ . +_:c14n3 . +_:c14n30 . +_:c14n30 . +_:c14n30 . +_:c14n31 . +_:c14n31 "0"^^ . +_:c14n31 . +_:c14n32 . +_:c14n32 . +_:c14n32 . +_:c14n4 . +_:c14n4 . +_:c14n4 . +_:c14n5 . +_:c14n5 "0"^^ . +_:c14n5 . +_:c14n6 . +_:c14n6 "1"^^ . +_:c14n6 . +_:c14n7 . +_:c14n7 "0"^^ . +_:c14n7 . +_:c14n8 . +_:c14n8 "0"^^ . +_:c14n8 . +_:c14n9 . +_:c14n9 . +_:c14n9 . diff --git a/tests/linkml/test_issues/conftest.py b/tests/linkml/test_issues/conftest.py index 88d07118d9..ca763d7f7e 100644 --- a/tests/linkml/test_issues/conftest.py +++ b/tests/linkml/test_issues/conftest.py @@ -3,7 +3,8 @@ import pytest import rdflib -from rdflib.compare import to_canonical_graph + +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph @pytest.fixture @@ -150,7 +151,7 @@ def _normalize_snapshot_bundle_output(name: str, output: str) -> str: if name.endswith((".ttl", ".owl")): graph = rdflib.Graph() graph.parse(data=output, format="turtle") - normalized = to_canonical_graph(graph).serialize(format="nt") + normalized = canonicalize_rdf_graph(graph, output_format="nt") return "\n".join(sorted(line for line in normalized.splitlines() if line)) + "\n" if name.endswith((".json", ".schema.json", ".context.jsonld")): return json.dumps(json.loads(output), indent=2, sort_keys=True, ensure_ascii=False) + "\n" diff --git a/tests/linkml/test_metamodel_compat/input/metamodel/array.yaml b/tests/linkml/test_metamodel_compat/input/metamodel/array.yaml index 9afd12ed68..0fdb48fc4e 100644 --- a/tests/linkml/test_metamodel_compat/input/metamodel/array.yaml +++ b/tests/linkml/test_metamodel_compat/input/metamodel/array.yaml @@ -89,7 +89,7 @@ classes: - array_linearization_order slot_usage: array_linearization_order: - equals_string: COLUMN_MAJOR_ARRAY_ORDER + ifabsent: "string(COLUMN_MAJOR_ARRAY_ORDER)" RowOrderedArray: mixin: true @@ -100,7 +100,7 @@ classes: - array_linearization_order slot_usage: array_linearization_order: - equals_string: ROW_MAJOR_ARRAY_ORDER + ifabsent: "string(ROW_MAJOR_ARRAY_ORDER)" slots: dimensions: diff --git a/tests/linkml/test_metamodel_compat/input/metamodel/extensions.yaml b/tests/linkml/test_metamodel_compat/input/metamodel/extensions.yaml index 3c3ddb2bc1..e3d2eb549c 100644 --- a/tests/linkml/test_metamodel_compat/input/metamodel/extensions.yaml +++ b/tests/linkml/test_metamodel_compat/input/metamodel/extensions.yaml @@ -38,6 +38,8 @@ slots: alias: value required: true range: AnyValue + annotations: + simple_dict_value: true classes: diff --git a/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml b/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml index 2bad712ef5..f80f21922b 100644 --- a/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml +++ b/tests/linkml/test_metamodel_compat/input/metamodel/meta.yaml @@ -1,6 +1,7 @@ id: https://w3id.org/linkml/meta title: LinkML Schema Metamodel name: meta +metamodel_version: 1.11.0 description: |- The metamodel for schemas defined using the Linked Data Modeling Language framework. @@ -2822,7 +2823,7 @@ classes: match_query: description: >- - A query that is used on an enum expression to dynamically obtain a set of permissivle values via a query that + A query that is used on an enum expression to dynamically obtain a set of permissible values via a query that matches on properties of the external concepts. slots: - identifier_pattern diff --git a/tests/linkml/test_notebooks/input/examples.py b/tests/linkml/test_notebooks/input/examples.py index fa316632b3..ec8054a485 100644 --- a/tests/linkml/test_notebooks/input/examples.py +++ b/tests/linkml/test_notebooks/input/examples.py @@ -6,6 +6,7 @@ from linkml.generators.pythongen import PythonGenerator from linkml.generators.shexgen import ShExGenerator from linkml_runtime.dumpers import json_dumper +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph yaml = """ id: http://example.org/sample/example1 @@ -108,7 +109,7 @@ print(jsonld) g = Graph() g.parse(data=jsonld, format="json-ld") -print(g.serialize(format="turtle")) +print(canonicalize_rdf_graph(g, output_format="turtle")) shex = ShExGenerator(yaml).serialize(collections=False) diff --git a/tests/linkml/test_notebooks/test_notebooks.py b/tests/linkml/test_notebooks/test_notebooks.py index 039e3f7cb6..48aaf01b0a 100644 --- a/tests/linkml/test_notebooks/test_notebooks.py +++ b/tests/linkml/test_notebooks/test_notebooks.py @@ -1,6 +1,5 @@ import os import sys -from importlib.metadata import version from io import StringIO import nbformat @@ -32,11 +31,6 @@ def force_rewrite_comparator(expected: str, actual: str) -> str: sys.platform == "win32", reason="charset failure on windows in github actions. See https://github.com/linkml/linkml/issues/314", ) -@pytest.mark.skipif( - version("pyshexc") == "0.9.1", - reason="notebooks execute in their own environment, so we can't monkeypatch pyshexc's python3.13 incompatibility " - "without ruining the notebook", -) @pytest.mark.parametrize( "nbname", [filename for filename in os.listdir(NBBASEDIR) if not filename.startswith(".") and filename.endswith(".ipynb")], diff --git a/tests/linkml/test_scripts/test_gen_jsonld.py b/tests/linkml/test_scripts/test_gen_jsonld.py index eaeae15d7d..3b1305f254 100644 --- a/tests/linkml/test_scripts/test_gen_jsonld.py +++ b/tests/linkml/test_scripts/test_gen_jsonld.py @@ -7,6 +7,7 @@ from linkml import METAMODEL_NAMESPACE from linkml.generators.jsonldcontextgen import ContextGenerator from linkml.generators.jsonldgen import JSONLDGenerator, cli +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from tests.conftest import KITCHEN_SINK_PATH @@ -132,9 +133,10 @@ def test_meta_output(tmp_path_factory): # Convert JSON to TTL g = Graph() g.load(tmp_jsonld_path, format="json-ld") - g.serialize(tmp_rdf_path, format="ttl") + with open(tmp_rdf_path, "w", encoding="utf-8") as f: + f.write(canonicalize_rdf_graph(g, output_format="turtle")) g.bind("meta", METAMODEL_NAMESPACE) - new_ttl = g.serialize(format="turtle") + new_ttl = canonicalize_rdf_graph(g, output_format="turtle") # Make sure that the generated TTL matches the JSON-LD (probably not really needed, as this is more of a test # of rdflib than our tooling but it doesn't hurt diff --git a/tests/linkml/test_transformers/test_relmodel_transformer.py b/tests/linkml/test_transformers/test_relmodel_transformer.py index f3ac66b1c7..3f48a64ccd 100644 --- a/tests/linkml/test_transformers/test_relmodel_transformer.py +++ b/tests/linkml/test_transformers/test_relmodel_transformer.py @@ -1,5 +1,14 @@ -from linkml.transformers.relmodel_transformer import RelationalModelTransformer +import pytest + +from linkml.transformers.relmodel_transformer import ( + ForeignKeyPolicy, + RelationalAnnotations, + RelationalModelTransformer, + add_attribute, + get_primary_key_attributes, +) from linkml_runtime import SchemaView +from linkml_runtime.linkml_model import Annotation, ClassDefinition, SchemaDefinition, SlotDefinition from linkml_runtime.utils.schema_builder import SchemaBuilder @@ -67,3 +76,239 @@ def test_nested_key(): assert len(unique_keys) == 1 unique_key = unique_keys[0] assert sorted(unique_key.unique_key_slots) == ["Student_id", "name"] + + +# Tests for helper functions +def test_add_attribute() -> None: + """Test that add_attribute inserts a slot into an attributes dict keyed by slot name.""" + attrs: dict[str, SlotDefinition] = {} + slot = SlotDefinition(name="age", range="integer") + add_attribute(attrs, slot) + assert "age" in attrs + assert attrs["age"] is slot + + +def test_get_primary_key_attributes_empty() -> None: + """Test get_primary_key_attributes returns an empty list when no PK annotations exist.""" + cls = ClassDefinition(name="Person") + cls.attributes["name"] = SlotDefinition(name="name", range="string") + assert get_primary_key_attributes(cls) == [] + + +def test_get_primary_key_attributes_with_pk() -> None: + """Test get_primary_key_attributes returns the name of slots annotated as primary_key.""" + cls = ClassDefinition(name="Person") + pk_slot = SlotDefinition(name="id") + pk_slot.annotations[RelationalAnnotations.PRIMARY_KEY] = Annotation("primary_key", "true") + cls.attributes["id"] = pk_slot + cls.attributes["name"] = SlotDefinition(name="name") + assert get_primary_key_attributes(cls) == ["id"] + + +# Tests for RelationalModelTransformer.add_primary_key + + +@pytest.mark.parametrize( + "existing_attr_names, expected_pk_name", + [ + ([], "id"), + (["id"], "uid"), + (["id", "uid"], "identifier"), + (["id", "uid", "identifier"], "pk"), + ], +) +def test_add_primary_key_candidate_names(existing_attr_names: list[str], expected_pk_name: str) -> None: + """Test that add_primary_key uses the first available candidate name for the PK.""" + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="Person") + for attr_name in existing_attr_names: + cls.attributes[attr_name] = SlotDefinition(name=attr_name, range="string") + schema.classes["Person"] = cls + sv = SchemaView(schema) + + pk = RelationalModelTransformer.add_primary_key("Person", sv) + + assert pk.name == expected_pk_name + assert pk.identifier is True + assert pk.range == "integer" + assert expected_pk_name in sv.get_class("Person").attributes + + +def test_add_primary_key_all_candidates_taken() -> None: + """Test that ValueError is raised when all candidate PK names are already in use.""" + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="Person") + for attr_name in ["id", "uid", "identifier", "pk"]: + cls.attributes[attr_name] = SlotDefinition(name=attr_name, range="string") + schema.classes["Person"] = cls + sv = SchemaView(schema) + + with pytest.raises(ValueError, match="Cannot add primary key to class Person"): + RelationalModelTransformer.add_primary_key("Person", sv) + + +def test_add_primary_key_pk_at_start_of_attributes() -> None: + """Test that the injected PK is prepended as the first attribute of the class.""" + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="Person") + cls.attributes["name"] = SlotDefinition(name="name", range="string") + cls.attributes["age"] = SlotDefinition(name="age", range="integer") + schema.classes["Person"] = cls + sv = SchemaView(schema) + + pk = RelationalModelTransformer.add_primary_key("Person", sv) + + attr_names = list(sv.get_class("Person").attributes.keys()) + assert attr_names[0] == pk.name + assert set(attr_names) == {pk.name, "name", "age"} + + +def test_add_primary_key_does_not_call_set_modified() -> None: + """ + Verify that add_primary_key does NOT call sv.set_modified(). + + The caller is responsible for calling set_modified() once after all PKs are + injected in bulk (see the single target_sv.set_modified() in transform()). + Calling class_induced_slots() before add_primary_key fills the lru_cache; + after add_primary_key the cache entry is still stale (no identifier) until + set_modified() is explicitly called. + """ + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="Person") + schema.classes["Person"] = cls + sv = SchemaView(schema) + + # Prime the class_induced_slots cache — no identifier present yet. + assert sv.class_induced_slots("Person") == [] + + # add_primary_key modifies the class attributes dict without calling set_modified(). + RelationalModelTransformer.add_primary_key("Person", sv) + + # The class object is immediately updated … + assert "id" in sv.get_class("Person").attributes + + # … but the cached class_induced_slots result is still stale. + assert sv.class_induced_slots("Person") == [] + + # After an explicit set_modified() the cache is busted and the PK is reflected. + sv.set_modified() + induced = sv.class_induced_slots("Person") + assert any(s.name == "id" and s.identifier for s in induced) + + +# Tests for RelationalModelTransformer.get_direct_identifier_attribute + + +def test_get_direct_identifier_attribute_with_identifier() -> None: + """Test that get_direct_identifier_attribute returns the attribute with identifier=True.""" + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="Person") + cls.attributes["id"] = SlotDefinition(name="id", identifier=True) + cls.attributes["name"] = SlotDefinition(name="name", range="string") + schema.classes["Person"] = cls + sv = SchemaView(schema) + + result = RelationalModelTransformer.get_direct_identifier_attribute(sv, "Person") + assert result is not None + assert result.name == "id" + + +def test_get_direct_identifier_attribute_with_key() -> None: + """Test that get_direct_identifier_attribute returns the attribute with key=True.""" + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="ExamResult") + cls.attributes["name"] = SlotDefinition(name="name", key=True) + cls.attributes["score"] = SlotDefinition(name="score", range="integer") + schema.classes["ExamResult"] = cls + sv = SchemaView(schema) + + result = RelationalModelTransformer.get_direct_identifier_attribute(sv, "ExamResult") + assert result is not None + assert result.name == "name" + + +def test_get_direct_identifier_attribute_none() -> None: + """Test that get_direct_identifier_attribute returns None when no identifier or key exists.""" + schema = SchemaDefinition(id="test", name="test") + cls = ClassDefinition(name="Address") + cls.attributes["street"] = SlotDefinition(name="street", range="string") + schema.classes["Address"] = cls + sv = SchemaView(schema) + + assert RelationalModelTransformer.get_direct_identifier_attribute(sv, "Address") is None + + +# Tests for RelationalModelTransformer.transform with various FK policies + + +def test_transform_no_foreign_keys_policy() -> None: + """Test that NO_FOREIGN_KEYS policy skips surrogate PK injection and FK annotations.""" + sb = SchemaBuilder() + sb.add_slot("name", range="string") + sb.add_class("Person", ["name"]) + sb.add_defaults() + rmt = RelationalModelTransformer(foreign_key_policy=ForeignKeyPolicy.NO_FOREIGN_KEYS) + rmt.schemaview = SchemaView(sb.schema) + result = rmt.transform("test") + person = result.schema.classes["Person"] + + assert "id" not in person.attributes + assert not any(RelationalAnnotations.PRIMARY_KEY in a.annotations for a in person.attributes.values()) + + +def test_transform_multiple_classes_bulk_pk_injection() -> None: + """ + Test that transform correctly injects PKs for multiple classes via a single + set_modified() call after the bulk loop. + + add_primary_key is called once per class without calling set_modified() itself; + the transformer calls set_modified() once after the entire PK-injection loop. + All classes must still receive a properly annotated surrogate PK. + """ + sb = SchemaBuilder() + sb.add_slot("name", range="string") + sb.add_slot("score", range="integer") + for class_name in ["Alpha", "Beta", "Gamma"]: + sb.add_class(class_name, ["name", "score"]) + sb.add_defaults() + rmt = RelationalModelTransformer() + rmt.schemaview = SchemaView(sb.schema) + result = rmt.transform("test") + rel_schema = result.schema + + for class_name in ["Alpha", "Beta", "Gamma"]: + cls = rel_schema.classes[class_name] + pk_attrs = get_primary_key_attributes(cls) + assert len(pk_attrs) == 1, f"Expected exactly 1 PK for {class_name}, got {pk_attrs}" + + +def test_transform_inject_fk_for_all_refs_vs_nested() -> None: + """ + Test the distinction between INJECT_FK_FOR_ALL_REFS and INJECT_FK_FOR_NESTED. + + When the referenced class has its own identifier (so it is not "inlined"), + INJECT_FK_FOR_NESTED does NOT rename the referencing slot, while + INJECT_FK_FOR_ALL_REFS DOES rename it to ``_``. + """ + sb = SchemaBuilder() + sb.add_slot("id", identifier=True) + sb.add_slot("street", range="string") + sb.add_slot("name", range="string") + sb.add_slot("address", range="Address") # non-inlined; target has its own identifier + sb.add_class("Address", ["id", "street"]) + sb.add_class("Person", ["name", "address"]) + sb.add_defaults() + + # INJECT_FK_FOR_NESTED: address NOT renamed (Address has its own identifier → not inlined) + rmt_nested = RelationalModelTransformer(foreign_key_policy=ForeignKeyPolicy.INJECT_FK_FOR_NESTED) + rmt_nested.schemaview = SchemaView(sb.schema) + person_nested = rmt_nested.transform("test").schema.classes["Person"] + assert "address" in person_nested.attributes + assert "address_id" not in person_nested.attributes + + # INJECT_FK_FOR_ALL_REFS: address IS renamed to address_id + rmt_all = RelationalModelTransformer(foreign_key_policy=ForeignKeyPolicy.INJECT_FK_FOR_ALL_REFS) + rmt_all.schemaview = SchemaView(sb.schema) + person_all = rmt_all.transform("test").schema.classes["Person"] + assert "address_id" in person_all.attributes + assert "address" not in person_all.attributes diff --git a/tests/linkml/test_utils/test_uri_and_curie.py b/tests/linkml/test_utils/test_uri_and_curie.py index 3dba819c79..26accf5f23 100644 --- a/tests/linkml/test_utils/test_uri_and_curie.py +++ b/tests/linkml/test_utils/test_uri_and_curie.py @@ -10,6 +10,7 @@ from linkml.generators.jsonldgen import JSONLDGenerator from linkml.generators.pythongen import PythonGenerator from linkml_runtime.utils.compile_python import compile_python +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.yamlutils import as_rdf from tests.linkml.utils.compare_jsonld_context import CompareJsonldContext @@ -50,7 +51,7 @@ def test_uri_and_curie(input_path, snapshot, snapshot_path): instance_jsonld, ], ) - assert g.serialize(format="ttl") == snapshot(f"{model_name}.ttl") + assert canonicalize_rdf_graph(g, output_format="turtle") == snapshot(f"{model_name}.ttl") def test_issue_80_objectidentifier_roundtrip(input_path): @@ -72,7 +73,9 @@ def test_issue_80_objectidentifier_roundtrip(input_path): assert generated_context["Person"]["@id"] == "ex:PERSON" assert generated_context["age"]["@type"] == "xsd:integer" - rdf_output = as_rdf(example, contexts=json.dumps({"@context": generated_context})).serialize(format="turtle") + rdf_output = canonicalize_rdf_graph( + as_rdf(example, contexts=json.dumps({"@context": generated_context})), output_format="turtle" + ) graph = Graph() graph.parse(data=rdf_output, format="turtle") diff --git a/tests/linkml/test_validator/test_recommended_slots_plugin.py b/tests/linkml/test_validator/test_recommended_slots_plugin.py index 798a32faea..16cdf839bc 100644 --- a/tests/linkml/test_validator/test_recommended_slots_plugin.py +++ b/tests/linkml/test_validator/test_recommended_slots_plugin.py @@ -112,7 +112,7 @@ def test_missing_recommended_inlined(validation_context): def test_incorrect_type_in_multivalued_slot(validation_context): - """Data with non-inlined multivalued slot with class as range should not yield results. + """Data with wrong container types in multivalued class slots should not yield results. Type checking is not the responsibility of this plugin. But we want to make sure that the implementation of this plugin doesn't implicitly assume it will @@ -130,10 +130,6 @@ def test_incorrect_type_in_multivalued_slot(validation_context): "nested_inline_list": {"a": {"value1": "1"}, "b": {"value1": "2"}, "c": {"value2": "3"}}, } result_iter = plugin.process(instance, validation_context) - # nested_inline_list has inlined_as_list=True, which implies inlined=True. - # The dict-shaped data triggers inlined dict validation, finding a missing - # recommended slot on entry "c". - assert next(result_iter).message == "Slot 'value1' is recommended on class 'Inlined' in /nested_inline_list/c" with pytest.raises(StopIteration): next(result_iter) diff --git a/tests/linkml/utils/compare_rdf.py b/tests/linkml/utils/compare_rdf.py index 61c0c8aba2..509899abde 100644 --- a/tests/linkml/utils/compare_rdf.py +++ b/tests/linkml/utils/compare_rdf.py @@ -6,6 +6,7 @@ from rdflib.compare import IsomorphicGraph, graph_diff, to_isomorphic from linkml_runtime.linkml_model.meta import LINKML +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph # TODO: Find out why test_issue_namespace is emitting generation_date in the TYPE namespace from tests import SKIP_RDF_COMPARE, SKIP_RDF_COMPARE_REASON @@ -38,7 +39,7 @@ def print_triples(g: Graph) -> None: Print the contents of g into stdout :param g: graph to print """ - g_text = re.sub(r"@prefix.*\n", "", g.serialize(format="turtle")) + g_text = re.sub(r"@prefix.*\n", "", canonicalize_rdf_graph(g, output_format="turtle")) print(g_text) diff --git a/tests/linkml_runtime/support/compare_rdf.py b/tests/linkml_runtime/support/compare_rdf.py index ea6118d7f4..f09ee97fb2 100644 --- a/tests/linkml_runtime/support/compare_rdf.py +++ b/tests/linkml_runtime/support/compare_rdf.py @@ -7,6 +7,7 @@ from rdflib.compare import IsomorphicGraph, graph_diff, to_isomorphic from linkml_runtime import LINKML +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph # TODO: Find out why test_issue_namespace is emitting generation_date in the TYPE namespace from tests import SKIP_RDF_COMPARE, SKIP_RDF_COMPARE_REASON @@ -39,7 +40,7 @@ def print_triples(g: Graph) -> None: Print the contents of g into stdout :param g: graph to print """ - g_text = re.sub(r"@prefix.*\n", "", g.serialize(format="turtle")) + g_text = re.sub(r"@prefix.*\n", "", canonicalize_rdf_graph(g, output_format="turtle")) print(g_text) diff --git a/tests/linkml_runtime/test_utils/test_metamodelcore.py b/tests/linkml_runtime/test_utils/test_metamodelcore.py index 579662fd21..35a4457842 100644 --- a/tests/linkml_runtime/test_utils/test_metamodelcore.py +++ b/tests/linkml_runtime/test_utils/test_metamodelcore.py @@ -5,6 +5,7 @@ from jsonasobj2 import as_json from rdflib import RDF, XSD, Graph, Literal, Namespace +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph from linkml_runtime.utils.metamodelcore import ( URI, Bool, @@ -296,7 +297,7 @@ def __post_init__(self): rdfs:object "http://example.org/tests/child2" ; rdfs:subject "http://example.org/tests/descendant1" . -""" == as_rdf(y, context).serialize(format="turtle") +""" == canonicalize_rdf_graph(as_rdf(y, context), output_format="turtle") with pytest.raises(ValueError): y = Pair(s, s) diff --git a/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py b/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py new file mode 100644 index 0000000000..1ec4912ebe --- /dev/null +++ b/tests/linkml_runtime/test_utils/test_rdf_canonicalize.py @@ -0,0 +1,204 @@ +"""Tests for deterministic RDF serialization via pyoxigraph RDFC-1.0.""" + +import subprocess +import sys +import textwrap + +import rdflib +from rdflib import BNode, Graph, Literal, URIRef +from rdflib.namespace import RDF + +from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph + + +def _make_graph_with_bnodes() -> Graph: + """Create a graph with blank nodes for testing.""" + g = Graph() + g.bind("ex", "http://example.com/") + subj = URIRef("http://example.com/a") + bn = BNode() + g.add((subj, URIRef("http://example.com/p"), Literal("hello"))) + g.add((subj, URIRef("http://example.com/r"), bn)) + g.add((bn, URIRef("http://example.com/q"), Literal("blank_val"))) + return g + + +def test_determinism(): + """Same graph serialized multiple times produces byte-identical output.""" + g = _make_graph_with_bnodes() + results = [canonicalize_rdf_graph(g, output_format="turtle") for _ in range(5)] + assert all(r == results[0] for r in results), "Output was not deterministic across runs" + + +def test_round_trip_isomorphic(): + """Re-parsing canonicalized output produces an isomorphic graph.""" + g = _make_graph_with_bnodes() + ttl = canonicalize_rdf_graph(g, output_format="turtle") + g2 = Graph() + g2.parse(data=ttl, format="turtle") + assert rdflib.compare.isomorphic(g, g2), "Round-tripped graph is not isomorphic to original" + + +def test_blank_node_stability(): + """Blank node labels are stable across calls.""" + g = _make_graph_with_bnodes() + out1 = canonicalize_rdf_graph(g, output_format="turtle") + out2 = canonicalize_rdf_graph(g, output_format="turtle") + assert out1 == out2, "Blank node labels differ between calls" + + +def test_prefix_preservation(): + """Output Turtle contains expected @prefix declarations.""" + g = Graph() + g.bind("ex", "http://example.com/") + g.bind("foaf", "http://xmlns.com/foaf/0.1/") + g.add((URIRef("http://example.com/a"), URIRef("http://xmlns.com/foaf/0.1/name"), Literal("Alice"))) + ttl = canonicalize_rdf_graph(g, output_format="turtle") + assert "@prefix ex:" in ttl + assert "@prefix foaf:" in ttl + + +def test_ntriples_format(): + """N-Triples output is deterministic.""" + g = _make_graph_with_bnodes() + results = [canonicalize_rdf_graph(g, output_format="nt") for _ in range(5)] + assert all(r == results[0] for r in results) + # N-Triples should not contain @prefix + assert "@prefix" not in results[0] + + +def test_empty_graph(): + """Empty graph produces valid empty output.""" + g = Graph() + ttl = canonicalize_rdf_graph(g, output_format="turtle") + # Re-parsing should also be empty + g2 = Graph() + g2.parse(data=ttl, format="turtle") + assert len(g2) == 0 + + +def test_ordering_is_sorted(): + """Subjects appear in sorted order in the output.""" + g = Graph() + g.bind("ex", "http://example.com/") + g.add((URIRef("http://example.com/z"), RDF.type, URIRef("http://example.com/Thing"))) + g.add((URIRef("http://example.com/a"), RDF.type, URIRef("http://example.com/Thing"))) + g.add((URIRef("http://example.com/m"), RDF.type, URIRef("http://example.com/Thing"))) + ttl = canonicalize_rdf_graph(g, output_format="turtle") + # Find positions of subjects in the output + pos_a = ttl.index("ex:a") + pos_m = ttl.index("ex:m") + pos_z = ttl.index("ex:z") + assert pos_a < pos_m < pos_z, f"Subjects not in sorted order: a@{pos_a}, m@{pos_m}, z@{pos_z}" + + +def test_multiple_blank_nodes_deterministic(): + """Multiple blank nodes are canonicalized deterministically.""" + g = Graph() + g.bind("ex", "http://example.com/") + subj = URIRef("http://example.com/s") + bn1 = BNode() + bn2 = BNode() + g.add((subj, URIRef("http://example.com/p"), bn1)) + g.add((subj, URIRef("http://example.com/q"), bn2)) + g.add((bn1, URIRef("http://example.com/val"), Literal("first"))) + g.add((bn2, URIRef("http://example.com/val"), Literal("second"))) + results = [canonicalize_rdf_graph(g, output_format="turtle") for _ in range(5)] + assert all(r == results[0] for r in results) + + +def test_xsd_string_normalized(): + """pyoxigraph drops explicit ^^xsd:string per RDF 1.1; output is still semantically correct.""" + g = Graph() + g.bind("ex", "http://example.com/") + XSD = rdflib.Namespace("http://www.w3.org/2001/XMLSchema#") + g.add((URIRef("http://example.com/a"), URIRef("http://example.com/p"), Literal("hello", datatype=XSD.string))) + ttl = canonicalize_rdf_graph(g, output_format="turtle") + # pyoxigraph writes plain "hello" without ^^xsd:string + assert "xsd:string" not in ttl + # The triple is still present (rdflib reads it back as untyped Literal) + g2 = Graph() + g2.parse(data=ttl, format="turtle") + assert len(g2) == 1 + obj = list(g2.objects())[0] + assert str(obj) == "hello" + + +def test_iri_with_trailing_dot_round_trips(): + """IRIs whose local part ends in '.' are emitted as full form so rdflib can parse them. + + pyoxigraph emits ``prefix:local\\.`` per the Turtle PN_LOCAL_ESC rule, + but rdflib's notation3 parser rejects an escaped dot at the end of a + PN_LOCAL. The serializer rewrites such CURIEs to full IRI form to + preserve round-trip parseability. + """ + g = Graph() + g.bind("ex", "http://example.com/vocab/") + iri = URIRef("http://example.com/vocab/Strand#.") + g.add((iri, RDF.type, URIRef("http://example.com/vocab/Thing"))) + ttl = canonicalize_rdf_graph(g, output_format="turtle") + # CURIE form with trailing escaped dot must not appear; full IRI must + assert "ex:Strand\\#\\." not in ttl + assert "" in ttl + g2 = Graph() + g2.parse(data=ttl, format="turtle") + assert rdflib.compare.isomorphic(g, g2) + + +def test_sort_is_load_bearing(): + """Output is byte-identical across subprocesses with different PYTHONHASHSEED values. + + RDFC-1.0 stabilizes blank-node labels, but pyoxigraph's ``Dataset`` iteration + order is not lexicographic and varies across processes. Without the explicit + sort step in ``canonicalize_rdf_graph``, output would differ across runs in + ways that hash randomization can expose. This test runs the canonicalization + in two subprocesses with deliberately different hash seeds and asserts the + output is identical, guarding against accidental removal of the sort step or + introduction of ``id()``-keyed iteration anywhere in the path. + """ + program = textwrap.dedent( + """ + from rdflib import BNode, Graph, Literal, URIRef + from rdflib.namespace import RDF + from linkml_runtime.utils.rdf_canonicalize import canonicalize_rdf_graph + + g = Graph() + g.bind("ex", "http://example.com/") + for letter in ["z", "y", "x", "m", "f", "a"]: + s = URIRef(f"http://example.com/{letter}") + g.add((s, RDF.type, URIRef("http://example.com/Thing"))) + g.add((s, URIRef("http://example.com/p"), Literal(f"val_{letter}"))) + for i in range(3): + bn = BNode() + g.add((URIRef("http://example.com/x"), URIRef("http://example.com/has"), bn)) + g.add((bn, URIRef("http://example.com/q"), Literal(f"bn_{i}"))) + + print(canonicalize_rdf_graph(g, output_format="turtle"), end="") + """ + ) + + def run(seed: str) -> str: + env = {"PYTHONHASHSEED": seed, "PATH": "/usr/bin:/bin"} + result = subprocess.run( + [sys.executable, "-c", program], + check=True, + capture_output=True, + text=True, + env=env, + ) + return result.stdout + + out_a = run("0") + out_b = run("42") + assert out_a == out_b, "Canonical output differs across PYTHONHASHSEED values; sort step may be missing" + + +def test_fallback_on_invalid_rdf(): + """Graphs with literal predicates fall back to rdflib serializer.""" + g = Graph() + g.bind("ex", "http://example.com/") + # Add a triple with a Literal predicate (non-standard RDF) + g.add((URIRef("http://example.com/s"), Literal("not_a_predicate"), Literal("value"))) + # Should not raise, falls back to rdflib + result = canonicalize_rdf_graph(g, output_format="turtle") + assert "not_a_predicate" in result diff --git a/tests/linkml_runtime/test_utils/test_yaml_utils.py b/tests/linkml_runtime/test_utils/test_yaml_utils.py index 044e9ccc2d..ca23f51c7c 100644 --- a/tests/linkml_runtime/test_utils/test_yaml_utils.py +++ b/tests/linkml_runtime/test_utils/test_yaml_utils.py @@ -6,8 +6,9 @@ import hbreader import pytest import yaml +from jsonasobj2 import JsonObj -from linkml_runtime.linkml_model import SchemaDefinition +from linkml_runtime.linkml_model import Annotation, SchemaDefinition from linkml_runtime.utils.metamodelcore import empty_dict, empty_list from linkml_runtime.utils.yamlutils import DupCheckYamlLoader, TypedNode, YAMLRoot, extended_str, from_yaml from tests.linkml_runtime.test_utils.environment import env @@ -145,6 +146,24 @@ def test_read_dangling_name() -> None: assert "name" in schema.slots +def test_safe_dumper_handles_jsonobj_with_annotation_value() -> None: + """Regression test for JsonObj representer registration in yamlutils. + + Reproduces a crash path where a JsonObj containing Annotation values under + slot annotations raised yaml.representer.RepresenterError. + """ + fail_value = JsonObj(metadata_scheme=Annotation(tag="metadata_scheme", value=True)) + slot_payload = {"issuer": {"range": "string", "annotations": fail_value}} + + dumped = yaml.dump(slot_payload, Dumper=yaml.SafeDumper, sort_keys=False) + + assert "issuer:" in dumped + assert "annotations:" in dumped + assert "metadata_scheme:" in dumped + assert "tag: metadata_scheme" in dumped + assert "value: true" in dumped + + # --------------------------------------------------------------------------- # _normalize_inlined with inherited classes (issue #3244) # diff --git a/uv.lock b/uv.lock index a0d9d6942c..92164e315f 100644 --- a/uv.lock +++ b/uv.lock @@ -373,11 +373,45 @@ sdist = { url = "https://files.pythonhosted.org/packages/cb/51/3e7e021920cfe2f7d [[package]] name = "chardet" -version = "5.2.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/f7b6ab21ec75897ed80c17d79b15951a719226b9fababf1e40ea74d69079/chardet-5.2.0.tar.gz", hash = "sha256:1b3b6ff479a8c414bc3fa2c0852995695c4a026dcd6d0633b2dd092ca39c1cf7", size = 2069618, upload-time = "2023-08-01T19:23:02.662Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/38/6f/f5fbc992a329ee4e0f288c1fe0e2ad9485ed064cac731ed2fe47dcc38cbf/chardet-5.2.0-py3-none-any.whl", hash = "sha256:e1cf59446890a00105fe7b7912492ea04b6e6f06d4b742b2c788469e34c82970", size = 199385, upload-time = "2023-08-01T19:23:00.661Z" }, +version = "7.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/19/b6/9df434a8eeba2e6628c465a1dfa31034228ef79b26f76f46278f4ef7e49d/chardet-7.4.3.tar.gz", hash = "sha256:cc1d4eb92a4ec1c2df3b490836ffa46922e599d34ce0bb75cf41fd2bf6303d56", size = 784800, upload-time = "2026-04-13T21:33:39.803Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/1b/7f73766c119a1344eb69e31890ede7c5825ce03d69a9d29292d1bd1cfa1b/chardet-7.4.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0c79b13c9908ac7dfe0a74116ebc9a0f28b2319d23c32f3dfcdfbe1279c7eaf", size = 874121, upload-time = "2026-04-13T21:32:47.065Z" }, + { url = "https://files.pythonhosted.org/packages/8b/02/b677c8203d34dad6c2af48287bb1f8c5dff63db2094636fbe634b555b7fb/chardet-7.4.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bba8bea1b28d927b3e99e47deafe53658d34497c0a891d95ff1ba8ff6663f01c", size = 856900, upload-time = "2026-04-13T21:32:48.893Z" }, + { url = "https://files.pythonhosted.org/packages/c4/4b/1361a485a999d97cac4c895e615326f69a639532a52ef365a468bd09bad1/chardet-7.4.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:23163921dccf3103ce59540b0443c106d2c0a0ff2e0503e05196f5e6fdea453f", size = 876634, upload-time = "2026-04-13T21:32:50.238Z" }, + { url = "https://files.pythonhosted.org/packages/87/23/e31c8ad33aa448f0845fd58af5fc22da1626407616d09df4973b2b34f477/chardet-7.4.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfb54563fe5f130da17c44c6a4e2e8052ba628e5ab4eab7ef8190f736f0f8f72", size = 886497, upload-time = "2026-04-13T21:32:52.111Z" }, + { url = "https://files.pythonhosted.org/packages/18/ef/ea4edec8c87f7e6eda02673acc68fe48725e564fc5a1865782efb53d5598/chardet-7.4.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3990fffcc6a6045f2234ab72752ad037e3b2d48c72037f244d42738db397eb75", size = 881061, upload-time = "2026-04-13T21:32:53.755Z" }, + { url = "https://files.pythonhosted.org/packages/f2/11/fc10600da98541777d720ad9e6bc040c0e0af1adb92e27142e35158957cb/chardet-7.4.3-cp310-cp310-win_amd64.whl", hash = "sha256:c7116b0452994734ccff35e154b44240090eb0f4f74b9106292668133557c175", size = 942533, upload-time = "2026-04-13T21:32:55.134Z" }, + { url = "https://files.pythonhosted.org/packages/19/52/505c207f334d51e937cbaa27ff95776e16e2d120e13cbe491cd7b3a70b50/chardet-7.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:25a862cddc6a9ac07023e808aedd297115345fbaabc2690479481ddc0f980e09", size = 870747, upload-time = "2026-04-13T21:32:56.916Z" }, + { url = "https://files.pythonhosted.org/packages/14/4b/d3c79495dee4831b8bebca2790e72cb90f0c5849c940570a7c7e5b70b952/chardet-7.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7005c88da26fd95d8abb8acbe6281d833e9a9181b03cf49b4546c4555389bd97", size = 853210, upload-time = "2026-04-13T21:32:58.309Z" }, + { url = "https://files.pythonhosted.org/packages/b9/99/f6a822ad1bde25a4c38dc3e770485e78e0893dfd871cd6e18ed3ea3a795e/chardet-7.4.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:dc50f28bad067393cce0af9091052c3b8df7a23115afd8ba7b2e0947f0cef1f8", size = 873625, upload-time = "2026-04-13T21:32:59.606Z" }, + { url = "https://files.pythonhosted.org/packages/b1/10/31932775c94a86814f76b41c4a772b52abfb0e6125324f32c6da1196c297/chardet-7.4.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c3da294de1a681097848ab58bd3f2771a674f8039d2d87a5538b28856b815e9", size = 883436, upload-time = "2026-04-13T21:33:01.351Z" }, + { url = "https://files.pythonhosted.org/packages/6c/63/0f43e3acf2c436fdb32a0f904aeb03a2904d2126eed34a042a194d235926/chardet-7.4.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:93c45e116dd51b66226a53ade3f9f635e870de5399b90e00ce45dcc311093bf4", size = 876589, upload-time = "2026-04-13T21:33:02.636Z" }, + { url = "https://files.pythonhosted.org/packages/5d/a6/e9b8f8a3e99602792b01fa7d0a731737615ab56d8bfd0b52935a0ef88b85/chardet-7.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:ccc1f83ab4bcfb901cf39e0c4ba6bc6e726fc6264735f10e24ceb5cb47387578", size = 941866, upload-time = "2026-04-13T21:33:04.282Z" }, + { url = "https://files.pythonhosted.org/packages/61/33/29de185079e6675c3f375546e30a559b7ddc75ce972f18d6e566cd9ea4eb/chardet-7.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:75d3c65cc16bddf40b8da1fd25ba84fca5f8070f2b14e86083653c1c85aee971", size = 874870, upload-time = "2026-04-13T21:33:05.977Z" }, + { url = "https://files.pythonhosted.org/packages/9c/2f/4c5af01fd1a7506a1d5375403d68925eac70289229492db5aa68b58103d8/chardet-7.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:29af5999f654e8729d251f1724a62b538b1262d9292cccaefddf8a02aae1ef6a", size = 854859, upload-time = "2026-04-13T21:33:07.381Z" }, + { url = "https://files.pythonhosted.org/packages/36/21/edb36ad5dfa48d7f8eed97ab43931ecdaa8c15166c21b1d614967e49d681/chardet-7.4.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:626f00299ad62dfe937058a09572beed442ccc7b58f87aa667949b20fd3db235", size = 875032, upload-time = "2026-04-13T21:33:08.741Z" }, + { url = "https://files.pythonhosted.org/packages/e5/59/a32a241d861cf180853a11c8e5a67641cb1b2af13c3a5ccce83ec07e2c9f/chardet-7.4.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a4904dd5f071b7a7d7f50b4a67a86db3c902d243bf31708f1d5cde2f68239cb", size = 888283, upload-time = "2026-04-13T21:33:10.213Z" }, + { url = "https://files.pythonhosted.org/packages/87/2e/e1ee6a77abf3782c00e05b89c4d4328c8353bf9500661c4348df1dd68614/chardet-7.4.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5d2879598bc220689e8ce509fe9c3f37ad2fca53a36be9c9bd91abdd91dd364f", size = 879974, upload-time = "2026-04-13T21:33:11.448Z" }, + { url = "https://files.pythonhosted.org/packages/32/60/fca69c534602a7ced04280c952a246ad1edde2a6ca3a164f65d32ac41fe7/chardet-7.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:4b2799bd58e7245cfa8d4ab2e8ad1d76a5c3a5b1f32318eb6acca4c69a3e7101", size = 943973, upload-time = "2026-04-13T21:33:12.756Z" }, + { url = "https://files.pythonhosted.org/packages/7c/43/79ac9b4db5bc87020c9dbc419125371d80882d1d197e9c4765ba8682b605/chardet-7.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a9e4486df251b8962e86ea9f139ca235aa6e0542a00f7844c9a04160afb99aa9", size = 873769, upload-time = "2026-04-13T21:33:14.002Z" }, + { url = "https://files.pythonhosted.org/packages/55/5f/25bdec773905bff0ff6cf35ca73b17bd05593b4f87bd8c5fa43705f7167d/chardet-7.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4fbff1907925b0c5a1064cffb5e040cd5e338585c9c552625f30de6bc2f3107a", size = 853991, upload-time = "2026-04-13T21:33:15.564Z" }, + { url = "https://files.pythonhosted.org/packages/b4/07/a29380ee0b215d23d77733b5ad60c5c0c7969650e080c667acdf9462040d/chardet-7.4.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:365135eaf37ba65a828f8e668eb0a8c38c479dcbec724dc25f4dfd781049c357", size = 874024, upload-time = "2026-04-13T21:33:16.915Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b1/3338e121cbd4c8a126b8ccb1061170c2ce51a53f678c502793ea49c6fd6d/chardet-7.4.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bfc134b70c846c21ead8e43ada3ae1a805fff732f6922f8abcf2ff27b8f6493d", size = 887410, upload-time = "2026-04-13T21:33:18.368Z" }, + { url = "https://files.pythonhosted.org/packages/63/1c/44a9a9e0c59c185a5d307ceaeee8768afa1558f0a24f7a4b5fa11b67586b/chardet-7.4.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9acd9988a93e09390f3cd231201ea7166c415eb8da1b735928990ffc05cb9fbb", size = 879269, upload-time = "2026-04-13T21:33:20.377Z" }, + { url = "https://files.pythonhosted.org/packages/1b/b3/5d0e77ea774bd3224321c248880ea0c0379000ac5c2bb6d77609549de247/chardet-7.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:e1b98790c284ff813f18f7cf7de5f05ea2435a080030c7f1a8318f3a4f80b131", size = 944155, upload-time = "2026-04-13T21:33:21.694Z" }, + { url = "https://files.pythonhosted.org/packages/70/a8/bf0811d859e13801279a2ae64f37a408027b282f2047bc0001c75dd356ad/chardet-7.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d892d3dcd652fdef53e3d6327d39b17c0df40a899dfc919abaeb64c974497531", size = 872887, upload-time = "2026-04-13T21:33:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/51/ac/b9d68ebddfe1b02c77af5bf81120e12b036b4432dc6af7a303d90e2bc38b/chardet-7.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:acc46d1b8b7d5783216afe15db56d1c179b9a40e5a1558bc13164c4fd20674c4", size = 853964, upload-time = "2026-04-13T21:33:24.724Z" }, + { url = "https://files.pythonhosted.org/packages/2a/81/17fa103ea9caf5d325a5e4051ab2ba65996fd66baa60b81ee41af1f54e10/chardet-7.4.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0ac3bf11c645734a1701a3804e43eabd98851838192267d08c353a834ab79fea", size = 876006, upload-time = "2026-04-13T21:33:26.098Z" }, + { url = "https://files.pythonhosted.org/packages/c2/20/193faab46a68ea550587331a698c3dca8099f8901d10937c4443135c7ed9/chardet-7.4.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6e3bd9f936e04bae89c254262af08d9e5b98f805175ba1e29d454e6cba3107b7", size = 887680, upload-time = "2026-04-13T21:33:27.49Z" }, + { url = "https://files.pythonhosted.org/packages/40/c6/94a3c673327392652ee8bdea9a45bc8a5f5365197a7387d68f0eed007115/chardet-7.4.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:27cc23da03630cdecc9aa81a895aa86629c211f995cd57651f0fbc280717bf93", size = 879865, upload-time = "2026-04-13T21:33:29.052Z" }, + { url = "https://files.pythonhosted.org/packages/b1/2c/cad8b5e3623a987f3c930b68e2bdd06cfc388cd91cd42ed05f1227701b73/chardet-7.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:b95c934b9ad59e2ba8abb9be49df70d3ad1b0d95d864b9fdb7588d4fa8bd921c", size = 939594, upload-time = "2026-04-13T21:33:31.391Z" }, + { url = "https://files.pythonhosted.org/packages/33/e0/d06e42fd6f02a58e5e227e5106587751cb38adcff0aaf949add744b78b6e/chardet-7.4.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:c77867f0c1cb8bd819502249fcdc500364aedb07881e11b743726fa2148e7b6e", size = 889714, upload-time = "2026-04-13T21:33:32.772Z" }, + { url = "https://files.pythonhosted.org/packages/d4/ed/40d091954d48abea037baae6be8fb79905e5f78d34d12ea955132c7d8011/chardet-7.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cf1efeaf65a6ef2f5b9cc3a1df6f08ba2831b369ccaa4c7018eaf90aa757bb11", size = 872319, upload-time = "2026-04-13T21:33:34.427Z" }, + { url = "https://files.pythonhosted.org/packages/bb/77/82a46821dbfbdfe062710d2bf2ede13426304e3567a23c57d919c0c31630/chardet-7.4.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f3504c139a2ad544077dd2d9e412cd08b01786843d76997cd43bb6de311723c", size = 892021, upload-time = "2026-04-13T21:33:35.766Z" }, + { url = "https://files.pythonhosted.org/packages/49/57/42d30c562bda5b4a839766c1aad8d5856b798ad2a1c3247b72a679afec94/chardet-7.4.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457f619882ba66327d4d8d14c6c342269bdb1e4e1c38e8117df941d14d351b04", size = 902509, upload-time = "2026-04-13T21:33:37.096Z" }, + { url = "https://files.pythonhosted.org/packages/8c/6c/0a40afdb50a0fe041ab95553b835a8160b6cf0e81edf2ae2fe9f5224cbf9/chardet-7.4.3-py3-none-any.whl", hash = "sha256:1173b74051570cf08099d7429d92e4882d375ad4217f92a6e5240ccfb26f231e", size = 626562, upload-time = "2026-04-13T21:33:38.559Z" }, ] [[package]] @@ -886,43 +920,44 @@ wheels = [ [[package]] name = "duckdb" -version = "1.4.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ea/e7/21cf50a3d52ffceee1f0bcc3997fa96a5062e6bab705baee4f6c4e33cce5/duckdb-1.4.1.tar.gz", hash = "sha256:f903882f045d057ebccad12ac69975952832edfe133697694854bb784b8d6c76", size = 18461687, upload-time = "2025-10-07T10:37:28.605Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/68/cc/00a07de0e33d16763edd4132d7c8a2f9efd57a2f296a25a948f239a1fadf/duckdb-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:296b4fff3908fb4c47b0aa1d77bd1933375e75401009d2dc81af8e7a0b8a05b4", size = 29062814, upload-time = "2025-10-07T10:36:14.261Z" }, - { url = "https://files.pythonhosted.org/packages/17/ea/fb0fda8886d1928f1b2a53a1163ef94f6f4b41f6d8b29eee457acfc2fa67/duckdb-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0b4182800092115feee5d71a8691efb283d3c9f5eb0b36362b308ef007a12222", size = 16161652, upload-time = "2025-10-07T10:36:17.358Z" }, - { url = "https://files.pythonhosted.org/packages/b4/5f/052e6436a71f461e61cd3a982954c029145a84b58cefa1dfb3eb2d96e4fc/duckdb-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:67cc3b6c7f7ba07a69e9331b8ccea7a60cbcd4204bb473e5da9b71588bd2eca9", size = 13753030, upload-time = "2025-10-07T10:36:19.782Z" }, - { url = "https://files.pythonhosted.org/packages/c2/fd/3ae3c89d0f6ad54c0be4430e572306fbfc9f173c97b23c5025a540449325/duckdb-1.4.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0cef0cee7030b561640cb9af718f8841b19cdd2aa020d53561057b5743bea90b", size = 18487683, upload-time = "2025-10-07T10:36:22.375Z" }, - { url = "https://files.pythonhosted.org/packages/d4/3c/eef454cd7c3880c2d55b50e18a9c7a213bf91ded79efcfb573d8d6dd8a47/duckdb-1.4.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2bf93347f37a46bacce6ac859d651dbf5731e2c94a64ab358300425b09e3de23", size = 20487080, upload-time = "2025-10-07T10:36:24.692Z" }, - { url = "https://files.pythonhosted.org/packages/bb/5b/b619f4c986a1cb0b06315239da9ce5fd94a20c07a344d03e2635d56a6967/duckdb-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:2e60d2361f978908a3d96eebaf1f4b346f283afcc467351aae50ea45ca293a2b", size = 12324436, upload-time = "2025-10-07T10:36:27.458Z" }, - { url = "https://files.pythonhosted.org/packages/d9/52/606f13fa9669a24166d2fe523e28982d8ef9039874b4de774255c7806d1f/duckdb-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:605d563c1d5203ca992497cd33fb386ac3d533deca970f9dcf539f62a34e22a9", size = 29065894, upload-time = "2025-10-07T10:36:29.837Z" }, - { url = "https://files.pythonhosted.org/packages/84/57/138241952ece868b9577e607858466315bed1739e1fbb47205df4dfdfd88/duckdb-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d3305c7c4b70336171de7adfdb50431f23671c000f11839b580c4201d9ce6ef5", size = 16163720, upload-time = "2025-10-07T10:36:32.241Z" }, - { url = "https://files.pythonhosted.org/packages/a3/81/afa3a0a78498a6f4acfea75c48a70c5082032d9ac87822713d7c2d164af1/duckdb-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a063d6febbe34b32f1ad2e68822db4d0e4b1102036f49aaeeb22b844427a75df", size = 13756223, upload-time = "2025-10-07T10:36:34.673Z" }, - { url = "https://files.pythonhosted.org/packages/47/dd/5f6064fbd9248e37a3e806a244f81e0390ab8f989d231b584fb954f257fc/duckdb-1.4.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1ffcaaf74f7d1df3684b54685cbf8d3ce732781c541def8e1ced304859733ae", size = 18487022, upload-time = "2025-10-07T10:36:36.759Z" }, - { url = "https://files.pythonhosted.org/packages/a1/10/b54969a1c42fd9344ad39228d671faceb8aa9f144b67cd9531a63551757f/duckdb-1.4.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:685d3d1599dc08160e0fa0cf09e93ac4ff8b8ed399cb69f8b5391cd46b5b207c", size = 20491004, upload-time = "2025-10-07T10:36:39.318Z" }, - { url = "https://files.pythonhosted.org/packages/ed/d5/7332ae8f804869a4e895937821b776199a283f8d9fc775fd3ae5a0558099/duckdb-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:78f1d28a15ae73bd449c43f80233732adffa49be1840a32de8f1a6bb5b286764", size = 12327619, upload-time = "2025-10-07T10:36:41.509Z" }, - { url = "https://files.pythonhosted.org/packages/0e/6c/906a3fe41cd247b5638866fc1245226b528de196588802d4df4df1e6e819/duckdb-1.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:cd1765a7d180b7482874586859fc23bc9969d7d6c96ced83b245e6c6f49cde7f", size = 29076820, upload-time = "2025-10-07T10:36:43.782Z" }, - { url = "https://files.pythonhosted.org/packages/66/c7/01dd33083f01f618c2a29f6dd068baf16945b8cbdb132929d3766610bbbb/duckdb-1.4.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:8ed7a86725185470953410823762956606693c0813bb64e09c7d44dbd9253a64", size = 16167558, upload-time = "2025-10-07T10:36:46.003Z" }, - { url = "https://files.pythonhosted.org/packages/81/e2/f983b4b7ae1dfbdd2792dd31dee9a0d35f88554452cbfc6c9d65e22fdfa9/duckdb-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a189bdfc64cfb9cc1adfbe4f2dcfde0a4992ec08505ad8ce33c886e4813f0bf", size = 13762226, upload-time = "2025-10-07T10:36:48.55Z" }, - { url = "https://files.pythonhosted.org/packages/ed/34/fb69a7be19b90f573b3cc890961be7b11870b77514769655657514f10a98/duckdb-1.4.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9090089b6486f7319c92acdeed8acda022d4374032d78a465956f50fc52fabf", size = 18500901, upload-time = "2025-10-07T10:36:52.445Z" }, - { url = "https://files.pythonhosted.org/packages/e4/a5/1395d7b49d5589e85da9a9d7ffd8b50364c9d159c2807bef72d547f0ad1e/duckdb-1.4.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:142552ea3e768048e0e8c832077a545ca07792631c59edaee925e3e67401c2a0", size = 20514177, upload-time = "2025-10-07T10:36:55.358Z" }, - { url = "https://files.pythonhosted.org/packages/c0/21/08f10706d30252753349ec545833fc0cea67c11abd0b5223acf2827f1056/duckdb-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:567f3b3a785a9e8650612461893c49ca799661d2345a6024dda48324ece89ded", size = 12336422, upload-time = "2025-10-07T10:36:57.521Z" }, - { url = "https://files.pythonhosted.org/packages/d7/08/705988c33e38665c969f7876b3ca4328be578554aa7e3dc0f34158da3e64/duckdb-1.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:46496a2518752ae0c6c5d75d4cdecf56ea23dd098746391176dd8e42cf157791", size = 29077070, upload-time = "2025-10-07T10:36:59.83Z" }, - { url = "https://files.pythonhosted.org/packages/99/c5/7c9165f1e6b9069441bcda4da1e19382d4a2357783d37ff9ae238c5c41ac/duckdb-1.4.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1c65ae7e9b541cea07d8075343bcfebdecc29a3c0481aa6078ee63d51951cfcd", size = 16167506, upload-time = "2025-10-07T10:37:02.24Z" }, - { url = "https://files.pythonhosted.org/packages/38/46/267f4a570a0ee3ae6871ddc03435f9942884284e22a7ba9b7cb252ee69b6/duckdb-1.4.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:598d1a314e34b65d9399ddd066ccce1eeab6a60a2ef5885a84ce5ed62dbaf729", size = 13762330, upload-time = "2025-10-07T10:37:04.581Z" }, - { url = "https://files.pythonhosted.org/packages/15/7b/c4f272a40c36d82df20937d93a1780eb39ab0107fe42b62cba889151eab9/duckdb-1.4.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e2f16b8def782d484a9f035fc422bb6f06941ed0054b4511ddcdc514a7fb6a75", size = 18504687, upload-time = "2025-10-07T10:37:06.991Z" }, - { url = "https://files.pythonhosted.org/packages/17/fc/9b958751f0116d7b0406406b07fa6f5a10c22d699be27826d0b896f9bf51/duckdb-1.4.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a5a7d0aed068a5c33622a8848857947cab5cfb3f2a315b1251849bac2c74c492", size = 20513823, upload-time = "2025-10-07T10:37:09.349Z" }, - { url = "https://files.pythonhosted.org/packages/30/79/4f544d73fcc0513b71296cb3ebb28a227d22e80dec27204977039b9fa875/duckdb-1.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:280fd663dacdd12bb3c3bf41f3e5b2e5b95e00b88120afabb8b8befa5f335c6f", size = 12336460, upload-time = "2025-10-07T10:37:12.154Z" }, -] - -[[package]] -name = "elementpath" -version = "4.8.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ac/41/afdd82534c80e9675d1c51dc21d0889b72d023bfe395a2f5a44d751d3a73/elementpath-4.8.0.tar.gz", hash = "sha256:5822a2560d99e2633d95f78694c7ff9646adaa187db520da200a8e9479dc46ae", size = 358528, upload-time = "2025-03-03T20:51:08.397Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/45/95/615af832e7f507fe5ce4562b4be1bd2fec080c4ff6da88dcd0c2dbfca582/elementpath-4.8.0-py3-none-any.whl", hash = "sha256:5393191f84969bcf8033b05ec4593ef940e58622ea13cefe60ecefbbf09d58d9", size = 243271, upload-time = "2025-03-03T20:51:03.027Z" }, +version = "1.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0c/66/744b4931b799a42f8cb9bc7a6f169e7b8e51195b62b246db407fd90bf15f/duckdb-1.5.2.tar.gz", hash = "sha256:638da0d5102b6cb6f7d47f83d0600708ac1d3cb46c5e9aaabc845f9ba4d69246", size = 18017166, upload-time = "2026-04-13T11:30:09.065Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a3/00/03b96203d9bf4ff8637de4d42adeca5b43342a5050f656eccce1e69d6879/duckdb-1.5.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:63bf8687feefeed51adf45fa3b062ab8b1b1c350492b7518491b86bae68b1da1", size = 30017339, upload-time = "2026-04-13T11:28:36.134Z" }, + { url = "https://files.pythonhosted.org/packages/01/f4/2f4af0233489fc92822ff6021a2a4e05f7cd75fa1a352a163967fbeeab22/duckdb-1.5.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:84b193aca20565dedb3172de15f843c659c3a6c773bf14843a9bd781c850e7db", size = 15945057, upload-time = "2026-04-13T11:28:39.21Z" }, + { url = "https://files.pythonhosted.org/packages/34/0a/d41ee8cdeb63cf12f2ee9e6c8e17cc8bacff6468013be703e44fd2a22efa/duckdb-1.5.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5596bbfc31b1b259db69c8d847b42d036ce2c4804f9ccb28f9fc46a16de7bc53", size = 14199133, upload-time = "2026-04-13T11:28:41.791Z" }, + { url = "https://files.pythonhosted.org/packages/11/39/4da08139b109d7f84b12ecca202a5adfff5b1b20970c01bd82dc09d86a59/duckdb-1.5.2-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8dbd7e31e5dc157bfe8803fa7d2652336265c6c19926c5a4a9b40f8222868d08", size = 19285501, upload-time = "2026-04-13T11:28:44.208Z" }, + { url = "https://files.pythonhosted.org/packages/3c/cc/10a542561634408cbae951a836e645dda784ddc48eaa2ee72701a2992a8e/duckdb-1.5.2-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a9cd5e71702d446613750405cde03f66ed268f4c321da071b0472759dad19536", size = 21392488, upload-time = "2026-04-13T11:28:46.923Z" }, + { url = "https://files.pythonhosted.org/packages/1b/61/e9015ee2117f86c2e8396ad66b85c8338b2ecdc9a20eb5b099a537cf3c6a/duckdb-1.5.2-cp310-cp310-win_amd64.whl", hash = "sha256:ce17670bb392ea1b3650537db02bd720908776b5b95f6d2472d31a7de59d1dc1", size = 13096311, upload-time = "2026-04-13T11:28:49.635Z" }, + { url = "https://files.pythonhosted.org/packages/9a/b0/d13e7e396d86c245290b3e93f692a2d27c2fe99f857aaf9205003c00c978/duckdb-1.5.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7f69164b048e498b9e9140a24343108a5ae5f17bfb3485185f55fdf9b1aa924d", size = 30020978, upload-time = "2026-04-13T11:28:52.486Z" }, + { url = "https://files.pythonhosted.org/packages/70/7b/ae1ec7f516394aa55501d1949af1f731be8d9d7433f0acc3f4632a0ba484/duckdb-1.5.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:81fc4fbf0b5e25840b39ba2a10b78c6953c0314d5d0434191e7898f34ab1bba3", size = 15947821, upload-time = "2026-04-13T11:28:55.981Z" }, + { url = "https://files.pythonhosted.org/packages/8a/a5/cae0105e01a85f85ead61723bb42dab14c2f8ec49f91e67a2372c02574a4/duckdb-1.5.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56d38b3c4e0ef2abb58898d0fd423933999ed535c45e75e9d9f72e1d5fed69b8", size = 14201656, upload-time = "2026-04-13T11:28:58.316Z" }, + { url = "https://files.pythonhosted.org/packages/50/db/46c57e8813ac33762bddc9545610ed648751c5b6a379abf2dc6035505ce4/duckdb-1.5.2-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:376856066c65ccd55fcb3a380bbe33a71ce089fc4623d229ffc6e82251afdb6d", size = 19285181, upload-time = "2026-04-13T11:29:01.041Z" }, + { url = "https://files.pythonhosted.org/packages/dc/a2/67694010693ec8c8c975e6991f48ef886d35ecbdaa2f287234882a403c21/duckdb-1.5.2-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c69907354ffee94ba8cf782daf0480dab7557f21ce27fffa6c0ea8f74ed4b8e2", size = 21394852, upload-time = "2026-04-13T11:29:03.814Z" }, + { url = "https://files.pythonhosted.org/packages/52/9f/2b1618c5a93949a70dcf105293db7e27bb2b2cc4aeb1ff46b806f430ec81/duckdb-1.5.2-cp311-cp311-win_amd64.whl", hash = "sha256:d9b4f5430bf4f05d4c0dc4c55c75def3a5af4be0343be20fa2bfc577343fbfc9", size = 13095526, upload-time = "2026-04-13T11:29:06.265Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/cb39e0d94a32f5333e819112fd01439a31f541f9c56a31b66f9bd209704b/duckdb-1.5.2-cp311-cp311-win_arm64.whl", hash = "sha256:2323c1195c10fb2bb982fc0218c730b43d1b92a355d61e68e3c5f3ac9d44c34f", size = 13946215, upload-time = "2026-04-13T11:29:08.672Z" }, + { url = "https://files.pythonhosted.org/packages/41/de/ebe66bbe78125fc610f4fd415447a65349d94245950f3b3dfb31d028af02/duckdb-1.5.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:e6495b00cad16888384119842797c49316a96ae1cb132bb03856d980d95afee1", size = 30064950, upload-time = "2026-04-13T11:29:11.468Z" }, + { url = "https://files.pythonhosted.org/packages/2d/8a/3e25b5d03bcf1fb99d189912f8ce92b1db4f9c8778e1b1f55745973a855a/duckdb-1.5.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d72b8856b1839d35648f38301b058f6232f4d36b463fe4dc8f4d3fdff2df1a2e", size = 15969113, upload-time = "2026-04-13T11:29:14.139Z" }, + { url = "https://files.pythonhosted.org/packages/19/bb/58001f0815002b1a93431bf907f77854085c7d049b83d521814a07b9db0b/duckdb-1.5.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2a1de4f4d454b8c97aec546c82003fc834d3422ce4bc6a19902f3462ef293bed", size = 14224774, upload-time = "2026-04-13T11:29:16.758Z" }, + { url = "https://files.pythonhosted.org/packages/d3/2f/a7f0de9509d1cef35608aeb382919041cdd70f58c173865c3da6a0d87979/duckdb-1.5.2-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ce0b8141a10d37ecef729c45bc41d334854013f4389f1488bd6035c5579aaac1", size = 19313510, upload-time = "2026-04-13T11:29:19.574Z" }, + { url = "https://files.pythonhosted.org/packages/26/78/eb1e064ea8b9df3b87b167bfd7a407b2f615a4291e06cba756727adfa06c/duckdb-1.5.2-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c99ef73a277c8921bc0a1f16dee38d924484251d9cfd20951748c20fcd5ed855", size = 21429692, upload-time = "2026-04-13T11:29:22.575Z" }, + { url = "https://files.pythonhosted.org/packages/5b/12/05b0c47d14839925c5e35b79081d918ca82e3f236bb724a6f58409dd5291/duckdb-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:8d599758b4e48bf12e18c9b960cf491d219f0c4972d19a45489c05cc5ab36f83", size = 13107594, upload-time = "2026-04-13T11:29:25.43Z" }, + { url = "https://files.pythonhosted.org/packages/0b/2c/80558a82b236e044330e84a154b96aacddb343316b479f3d49be03ea11cb/duckdb-1.5.2-cp312-cp312-win_arm64.whl", hash = "sha256:fc85a5dbcbe6eccac1113c72370d1d3aacfdd49198d63950bdf7d8638a307f00", size = 13927537, upload-time = "2026-04-13T11:29:27.842Z" }, + { url = "https://files.pythonhosted.org/packages/98/f2/e3d742808f138d374be4bb516fade3d1f33749b813650810ab7885cdc363/duckdb-1.5.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:4420b3f47027a7849d0e1815532007f377fa95ee5810b47ea717d35525c12f79", size = 30064879, upload-time = "2026-04-13T11:29:30.763Z" }, + { url = "https://files.pythonhosted.org/packages/72/0d/f3dc1cf97e1267ca15e4307d456f96ce583961f0703fd75e62b2ad8d64fa/duckdb-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:bb42e6ed543902e14eae647850da24103a89f0bc2587dec5601b1c1f213bd2ed", size = 15969327, upload-time = "2026-04-13T11:29:33.481Z" }, + { url = "https://files.pythonhosted.org/packages/b1/e0/d5418def53ae4e05a63075705ff44ed5af5a1a5932627eb2b600c5df1c93/duckdb-1.5.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:98c0535cd6d901f61a5ea3c2e26a1fd28482953d794deb183daf568e3aa5dda6", size = 14225107, upload-time = "2026-04-13T11:29:35.882Z" }, + { url = "https://files.pythonhosted.org/packages/16/a7/15aaa59dbecc35e9711980fcdbf525b32a52470b32d18ef678193a146213/duckdb-1.5.2-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:486c862bf7f163c0110b6d85b3e5c031d224a671cca468f12ebb1d3a348f6b39", size = 19313433, upload-time = "2026-04-13T11:29:38.367Z" }, + { url = "https://files.pythonhosted.org/packages/bd/21/d903cc63a5140c822b7b62b373a87dc557e60c29b321dfb435061c5e67cf/duckdb-1.5.2-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70631c847ca918ee710ec874241b00cf9d2e5be90762cbb2a0389f17823c08f7", size = 21429837, upload-time = "2026-04-13T11:29:41.135Z" }, + { url = "https://files.pythonhosted.org/packages/e3/0a/b770d1f60c70597302130d6247f418549b7094251a02348fbaf1c7e147ae/duckdb-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:52a21823f3fbb52f0f0e5425e20b07391ad882464b955879499b5ff0b45a376b", size = 13107699, upload-time = "2026-04-13T11:29:43.905Z" }, + { url = "https://files.pythonhosted.org/packages/d9/cf/e200fe431d700962d1a908d2ce89f53ccee1cc8db260174ae663ba09686b/duckdb-1.5.2-cp313-cp313-win_arm64.whl", hash = "sha256:411ad438bd4140f189a10e7f515781335962c5d18bd07837dc6d202e3985253d", size = 13927646, upload-time = "2026-04-13T11:29:46.598Z" }, + { url = "https://files.pythonhosted.org/packages/83/a1/f6286c67726cc1ea60a6e3c0d9fbc66527dde24ae089a51bbe298b13ca78/duckdb-1.5.2-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:6b0fe75c148000f060aa1a27b293cacc0ea08cc1cad724fbf2143d56070a3785", size = 30078598, upload-time = "2026-04-13T11:29:49.828Z" }, + { url = "https://files.pythonhosted.org/packages/de/6a/59febb02f21a4a5c6b0b0099ef7c965fdd5e61e4904cf813809bb792e35f/duckdb-1.5.2-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:35579b8e3a064b5eaf15b0eafc558056a13f79a0a62e34cc4baf57119daecfec", size = 15975120, upload-time = "2026-04-13T11:29:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/09/70/ce750854d37bb5a45cccbb2c3cb04df4af56aea8fc30a2499bb643b4a9c0/duckdb-1.5.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ea58ff5b0880593a280cf5511734b17711b32ee1f58b47d726e8600848358160", size = 14227762, upload-time = "2026-04-13T11:29:55.564Z" }, + { url = "https://files.pythonhosted.org/packages/28/dc/ad45ac3c0b6c4687dc649e8f6cf01af1c8b0443932a39b2abb4ebcb3babd/duckdb-1.5.2-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef461bca07313412dc09961c4a4757a851f56b95ac01c58fac6007632b7b94f2", size = 19315668, upload-time = "2026-04-13T11:29:58.427Z" }, + { url = "https://files.pythonhosted.org/packages/cc/b1/1464f468d2e5813f5808de95df9d3113a645a5bfa2ffcaecbc542ddae272/duckdb-1.5.2-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:be37680ddb380015cb37318e378c53511c45c4f0d8fac5599d22b7d092b9217a", size = 21434056, upload-time = "2026-04-13T11:30:01.238Z" }, + { url = "https://files.pythonhosted.org/packages/ce/32/6673607e024722473fa7aafdd29c0e3dd231dd528f6cd8b5797fbeeb229d/duckdb-1.5.2-cp314-cp314-win_amd64.whl", hash = "sha256:0b291786014df1133f8f18b9df4d004484613146e858d71a21791e0fcca16cf4", size = 13633667, upload-time = "2026-04-13T11:30:04.05Z" }, + { url = "https://files.pythonhosted.org/packages/7a/e3/9d34173ec068631faea3ea6e73050700729363e7e33306a9a3218e5cdc61/duckdb-1.5.2-cp314-cp314-win_arm64.whl", hash = "sha256:c9f3e0b71b8a50fccfb42794899285d9d318ce2503782b9dd54868e5ecd0ad31", size = 14402513, upload-time = "2026-04-13T11:30:06.609Z" }, ] [[package]] @@ -964,55 +999,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, ] -[[package]] -name = "falcon" -version = "4.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/90/85/a4abc8357f6bc6b6b0b3d80e2c319c895900c518a3528279a222d7a53b7e/falcon-4.1.0.tar.gz", hash = "sha256:dbc3fa642b43e7662f121d0a7b5d7ea42a1a31fb22ae63572c42ee3ecd1f79d0", size = 659308, upload-time = "2025-08-06T16:08:20.905Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0c/9e/8168712ac4d9f585479b1516796e43669ddb4fde4d77dbac3d6d47a3cbaf/falcon-4.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c4aa85dbf9af10ee0d48f6c409551d7c7226953b2479a24eaad42d39c05bd4b2", size = 409465, upload-time = "2025-08-06T16:18:38.44Z" }, - { url = "https://files.pythonhosted.org/packages/0f/08/024972673db6706e23898a8f0daed7c5af747f3acd9f65eadcc712ace10d/falcon-4.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71ca6b380ddd09458127ddd5af73f302aad6de8da5690b610c9165209f5766bc", size = 406992, upload-time = "2025-08-06T16:18:40.76Z" }, - { url = "https://files.pythonhosted.org/packages/9d/80/694ec817bd338b41adfe0cb45f4181ac5e712ccd332c0ff3f061e44bde47/falcon-4.1.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a294092ff27ac6038a36169e99175af86ea03c5e054d60c5d219fab36ad6cec7", size = 803325, upload-time = "2025-08-06T16:18:42.496Z" }, - { url = "https://files.pythonhosted.org/packages/30/f7/4b2482f9f9e7f8ad366773c8b960ab8258df65f92c6e62906408a229774a/falcon-4.1.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:033b74c3e512441cef122cd7d9caa61571bf9cfef1cc60dc2c2c1c23bcf14727", size = 835781, upload-time = "2025-08-06T16:18:44.347Z" }, - { url = "https://files.pythonhosted.org/packages/de/11/20d9aca668d5c327f143306c21b4e81a39cd89185d157b24c77d1e40e31c/falcon-4.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a2a8324259cd47c1fe21f352a4b34b97ca29c064813115a1dddb8d95168ed154", size = 802545, upload-time = "2025-08-06T16:18:46.088Z" }, - { url = "https://files.pythonhosted.org/packages/cc/32/06c5ae5aedcf0f7d92755f273b4a6835c295423b9fc8929db7b73a04283c/falcon-4.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:758fcf3416842b8b431429873accbee34e92206600358a02e8d418e7a968983e", size = 797777, upload-time = "2025-08-06T16:18:47.951Z" }, - { url = "https://files.pythonhosted.org/packages/1f/ee/c4286c4261ccd10fac1c11708e1946dc363c6dc23cb9956d51860cfab1ee/falcon-4.1.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f783cfb370ed8ccaf658b0b6c766dad3ad945f1eaf27ee1f5016706618ac6f3c", size = 805584, upload-time = "2025-08-06T16:18:50.029Z" }, - { url = "https://files.pythonhosted.org/packages/f5/5a/2aaba3f41ff0dbb134a7bcb377a11f902edda8e512bc2b06df83fe9ca7c6/falcon-4.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:600183fecbd121fbe55590645618ae1af12e02a4ca6ac035d6857b628cbee5ca", size = 406475, upload-time = "2025-08-06T16:18:52.045Z" }, - { url = "https://files.pythonhosted.org/packages/98/c7/c4e39259046749fc4227ecb965484fa0d44e4f199e4cc591c2cddcb2120f/falcon-4.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a2105cd03cd7accad2f2a4b875a9f588d37293e9c202929762ea94e446bfb6ee", size = 410220, upload-time = "2025-08-06T16:18:53.831Z" }, - { url = "https://files.pythonhosted.org/packages/77/e7/405d54c3f81a8d869f0d7bdbefa45a35a6e225f12f809e823e02c67f85f0/falcon-4.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:589e9a1cde0f84c9cb25327f6431a017a1b17e9d2c42b4b927e0ffbde6e42315", size = 407669, upload-time = "2025-08-06T16:18:55.771Z" }, - { url = "https://files.pythonhosted.org/packages/7f/03/508d444bf71df55dd70c7f341abf681922a7a135e7a385c4ff77b2823f46/falcon-4.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c41a3f208e28d2ff59beaaa503900c57a4d59ab17ddb3946efbad0817a314936", size = 831283, upload-time = "2025-08-06T16:18:57.206Z" }, - { url = "https://files.pythonhosted.org/packages/7f/02/fe51c596da54854c38766b274c5cb827922bbdcfef5c53d1e7fc7c2a1867/falcon-4.1.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:43aed2194c804b64aeaf331384e2ef2ff69f29047cca65fb71e47d56f44c646f", size = 863284, upload-time = "2025-08-06T16:18:59.22Z" }, - { url = "https://files.pythonhosted.org/packages/ca/52/b80d409c712a0ec97c085fdd56997f71cedb284d4052eeb7f1ecc8db7a1d/falcon-4.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fdad618359822f577c3ae9db73107b511e22d55715ffd4543a5096559bf1f18f", size = 832109, upload-time = "2025-08-06T16:19:00.825Z" }, - { url = "https://files.pythonhosted.org/packages/3d/0c/fafa157e7a039d750b1f6f23aa98e27d60e6a18d11bfac11a0d5df22dc2e/falcon-4.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:eea2063c49e3b327a545dadb9e445e00bf44edbfd492b92f81de582e3ce461ca", size = 825371, upload-time = "2025-08-06T16:19:03.402Z" }, - { url = "https://files.pythonhosted.org/packages/76/6e/6980b8bfe107816f74cfc5f342a3f7c1d18af407e400c61eb64e78350eaa/falcon-4.1.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6e88c8a4f7bf125068d8f34bda094443ce7a2dd9bfef05c0da97a8eb5a8cb568", size = 833296, upload-time = "2025-08-06T16:19:05.79Z" }, - { url = "https://files.pythonhosted.org/packages/ce/fa/144de2c8725080495560ad6b9ef5140a7ace6fcdb0da98482aac8e6108fe/falcon-4.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:cda1a53580014f35f1314d66c74205f79e4cfb620dd1b952f581b81415477c60", size = 406723, upload-time = "2025-08-06T16:19:07.46Z" }, - { url = "https://files.pythonhosted.org/packages/02/af/e1e7109ae1a77076e2c690c04ce3dd95644ad77e8543ab08bebaec659666/falcon-4.1.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:971def6f088f433092538a8409431c7001ed4eb4a6c908d5bb932111749e36e9", size = 409594, upload-time = "2025-08-06T16:19:08.957Z" }, - { url = "https://files.pythonhosted.org/packages/5d/73/36c724f0fb825bc2172c72ec55377256543fb06283d3b228ec3e0663b575/falcon-4.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:76a6af9f8142b7e10cee1b835b5548d73b6c65f2a1dc71aa75786bb61f3db5aa", size = 406024, upload-time = "2025-08-06T16:19:10.72Z" }, - { url = "https://files.pythonhosted.org/packages/df/2e/a272d9b96d5c8f2b7144a6bae3a5b4a28c8a90f1f3db17382ad5f23a9222/falcon-4.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:85cf8446d54625e67b219a29ba1cd1d72a28166973c4ead07086a0a0991be161", size = 843815, upload-time = "2025-08-06T16:19:12.607Z" }, - { url = "https://files.pythonhosted.org/packages/92/2c/21a0aff6363095b0dc3694d4dc9880c4a18d82e7cf5c358b7dd7194e766b/falcon-4.1.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:41368d586b58d68bb39c672654baef0dcbc130b371e2c59e093f2699892637f2", size = 878483, upload-time = "2025-08-06T16:19:14.441Z" }, - { url = "https://files.pythonhosted.org/packages/82/46/5a3bc1c08e5302f9a84c52c0b3ac42ac032a25eb9299968a644f4a530432/falcon-4.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cece1561c6766b733136306c07a4198a1b760583651fd45bd071378d353b0fae", size = 850682, upload-time = "2025-08-06T16:19:16.236Z" }, - { url = "https://files.pythonhosted.org/packages/6f/68/f280840cd33fcd6b9dd632a628d2123b6d44ae69fba20d9b5d4a13b6eb83/falcon-4.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:27c27f7144d2c705a47c17de3e19b58d0d64bafc17006cbf57064c5a56c4c0f2", size = 832994, upload-time = "2025-08-06T16:19:17.723Z" }, - { url = "https://files.pythonhosted.org/packages/52/2e/135aed83a24c856f1200843efe4728408e1a6898532bcf84175954ff1ca1/falcon-4.1.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3ef8a4c30da27ae8707c1994d4b2728492e7e173c04e79dac49f22711db285bc", size = 846235, upload-time = "2025-08-06T16:19:19.486Z" }, - { url = "https://files.pythonhosted.org/packages/c7/38/3a2244f67e5b107732bdef184fcf5deb64116799918a6cca90a6e5569a64/falcon-4.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:6060146aad636931fdc88275740343e336fdb40c67b3ab43c40d48cb30964891", size = 406754, upload-time = "2025-08-06T16:19:21.772Z" }, - { url = "https://files.pythonhosted.org/packages/aa/5d/3b76f1582bb3cb17d21bd7d5187a6fa38ed43517569ee3235c94f0746b78/falcon-4.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8ea3954305fcf7ebc1aac90f36c01d26ce12b77b059281166b95a553b3cc9d45", size = 407931, upload-time = "2025-08-06T16:19:23.642Z" }, - { url = "https://files.pythonhosted.org/packages/60/1a/7bbd6f5d192a8ccd0a83f429740549f2d3308464982ea47bd4d9863bdb45/falcon-4.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:84063a5242696c4cd9040ca53d178604445e8ce8b0a112c9461465554784644b", size = 403950, upload-time = "2025-08-06T16:19:25.349Z" }, - { url = "https://files.pythonhosted.org/packages/1d/71/6c9a0335a35b1e914ca1a53a4520b6abce4f2b18c1a447a8d6e84c4e1c3f/falcon-4.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b3dbb2648f8d0670f48d5cdfa0b2b1decba6d1e505679291ffeaa5c4cb7e15df", size = 824177, upload-time = "2025-08-06T16:19:27.193Z" }, - { url = "https://files.pythonhosted.org/packages/fd/fc/527e46842af688d4f532573446399ec48872596b32d1273f9b467b009ee6/falcon-4.1.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b0c7cc2a2b3a715086a3b7877f6a6ddfcac7261c15ceb671c6a09f442b06ef66", size = 857963, upload-time = "2025-08-06T16:19:29.142Z" }, - { url = "https://files.pythonhosted.org/packages/ff/a3/97f7be3e4e47a3e5c4f417ca015feb3b4bfe70b77ce00e4fd2a5c4408095/falcon-4.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccc7302a0056f8a03b98c9aa9acb96ad4cae4aabf3aa857f0c9f1871b58ae799", size = 832928, upload-time = "2025-08-06T16:19:31.018Z" }, - { url = "https://files.pythonhosted.org/packages/5f/f1/ca585ad0848b664d1b4c34118140ef8aac2ee3c27a167463c5dcaadc5410/falcon-4.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06e554c1448fbad75de4747247d02a29a944b666f44279928efcac1324e941b4", size = 816075, upload-time = "2025-08-06T16:19:32.837Z" }, - { url = "https://files.pythonhosted.org/packages/a2/14/85b7026a265678b50cdbbb2efbafd106669b6347b1f8de5cd445d8f0e51e/falcon-4.1.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a01511d6ef24eeb228b4bd47ba05e8e74f50834b5530223e834be84c0eae506", size = 830746, upload-time = "2025-08-06T16:19:34.413Z" }, - { url = "https://files.pythonhosted.org/packages/db/94/65d8d73ee69e3934221aff6a5384a5eaf76f583450aa33573563f41e03e3/falcon-4.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:e3fefde1f590fff4ccd404dd932f10c9b91b42a1735e8205aa7551432a5e870a", size = 405271, upload-time = "2025-08-06T16:19:36.223Z" }, - { url = "https://files.pythonhosted.org/packages/aa/4f/2818c15070e693bcb85a4766397d6bb3b673b39fe3f154d2b6dd17cedc00/falcon-4.1.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:91e4dacdfc5681c13294d42caf951a2837a17b413539d3c71f21650ddf6b0b27", size = 408094, upload-time = "2025-08-06T16:19:37.866Z" }, - { url = "https://files.pythonhosted.org/packages/42/4e/2f9bf0c3a4621b6c5f4f4181e35791a17f0a6765fb6ef9d0af8360f7990b/falcon-4.1.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:214b437c03f9d0273f5b6f2e139e7d83b3f8748925d495ae9826e739608f6155", size = 404444, upload-time = "2025-08-06T16:19:40.232Z" }, - { url = "https://files.pythonhosted.org/packages/8c/60/e856790f93840bd75267e62405e6507e15d9fa60b502b05a8409ce1539be/falcon-4.1.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d569fde899c813a229108c689aa3bd88511db49d904dd35fc111949267d2ecd1", size = 824892, upload-time = "2025-08-06T16:19:41.84Z" }, - { url = "https://files.pythonhosted.org/packages/d4/8d/814cd47e6b5f9be2a0ae1c3b5f57306b63d5f1a80806ed31c5991c8c4991/falcon-4.1.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:c38afcbb1b475974572859c6cc48fbdcda9a5d4094d06fd0ce54f321b3490975", size = 854783, upload-time = "2025-08-06T16:19:43.676Z" }, - { url = "https://files.pythonhosted.org/packages/7d/47/157be9e4ffe6a3430f12b6c42be2badf34f4f8afc95a415b691ae0e8c0f6/falcon-4.1.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:903501f334d5135e6c74e11141a94f1dd0fbf80344b3dc96b57e8a1a3c5a62cb", size = 828502, upload-time = "2025-08-06T16:19:45.349Z" }, - { url = "https://files.pythonhosted.org/packages/9e/54/5423672a17525d8aa678cfc0d942ed8ae7c6b31afef7d49861887267fb6b/falcon-4.1.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:90cc61a36d3e0375042b3c6a28ead19e969f8ba238beed17a887784625b9ee78", size = 817282, upload-time = "2025-08-06T16:19:47.222Z" }, - { url = "https://files.pythonhosted.org/packages/0b/2c/c745aafe9f09ab0263a11fff2c7235db5bcc52717d993dc68e32a03ed9a1/falcon-4.1.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:aa12c4422ba789fdeb90f66f39fb5f9a359b5ddb4ff2c8d51d2e1f59277af7b9", size = 829284, upload-time = "2025-08-06T16:19:49.093Z" }, - { url = "https://files.pythonhosted.org/packages/60/bb/15816f6dbad103a277de19f924bcd370bf86330513c655c691f9ad883c63/falcon-4.1.0-cp314-cp314-win_amd64.whl", hash = "sha256:25be29328b39e384bd7fdd0cc46c0e86f232fcf37d9e3fb7033200df92cf1940", size = 407399, upload-time = "2025-08-06T16:19:50.888Z" }, - { url = "https://files.pythonhosted.org/packages/91/36/ee359d6d8d201ddafd124919ec65432d48796e4181537c991e9b1cb70a15/falcon-4.1.0-py3-none-any.whl", hash = "sha256:07cb9690525fd69ca48bcf52dca8f32cff823564e89f3d0a04a2674c4c598176", size = 323157, upload-time = "2025-08-06T16:08:18.421Z" }, -] - [[package]] name = "fastjsonschema" version = "2.21.2" @@ -1156,7 +1142,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7d/ed/6bfa4109fcb23a58819600392564fea69cdc6551ffd5e69ccf1d52a40cbc/greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c", size = 271061, upload-time = "2025-08-07T13:17:15.373Z" }, { url = "https://files.pythonhosted.org/packages/2a/fc/102ec1a2fc015b3a7652abab7acf3541d58c04d3d17a8d3d6a44adae1eb1/greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590", size = 629475, upload-time = "2025-08-07T13:42:54.009Z" }, { url = "https://files.pythonhosted.org/packages/c5/26/80383131d55a4ac0fb08d71660fd77e7660b9db6bdb4e8884f46d9f2cc04/greenlet-3.2.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f10fd42b5ee276335863712fa3da6608e93f70629c631bf77145021600abc23c", size = 640802, upload-time = "2025-08-07T13:45:25.52Z" }, - { url = "https://files.pythonhosted.org/packages/9f/7c/e7833dbcd8f376f3326bd728c845d31dcde4c84268d3921afcae77d90d08/greenlet-3.2.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c8c9e331e58180d0d83c5b7999255721b725913ff6bc6cf39fa2a45841a4fd4b", size = 636703, upload-time = "2025-08-07T13:53:12.622Z" }, { url = "https://files.pythonhosted.org/packages/e9/49/547b93b7c0428ede7b3f309bc965986874759f7d89e4e04aeddbc9699acb/greenlet-3.2.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58b97143c9cc7b86fc458f215bd0932f1757ce649e05b640fea2e79b54cedb31", size = 635417, upload-time = "2025-08-07T13:18:25.189Z" }, { url = "https://files.pythonhosted.org/packages/7f/91/ae2eb6b7979e2f9b035a9f612cf70f1bf54aad4e1d125129bef1eae96f19/greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d", size = 584358, upload-time = "2025-08-07T13:18:23.708Z" }, { url = "https://files.pythonhosted.org/packages/f7/85/433de0c9c0252b22b16d413c9407e6cb3b41df7389afc366ca204dbc1393/greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5", size = 1113550, upload-time = "2025-08-07T13:42:37.467Z" }, @@ -1167,7 +1152,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/de/f28ced0a67749cac23fecb02b694f6473f47686dff6afaa211d186e2ef9c/greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2", size = 272305, upload-time = "2025-08-07T13:15:41.288Z" }, { url = "https://files.pythonhosted.org/packages/09/16/2c3792cba130000bf2a31c5272999113f4764fd9d874fb257ff588ac779a/greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246", size = 632472, upload-time = "2025-08-07T13:42:55.044Z" }, { url = "https://files.pythonhosted.org/packages/ae/8f/95d48d7e3d433e6dae5b1682e4292242a53f22df82e6d3dda81b1701a960/greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3", size = 644646, upload-time = "2025-08-07T13:45:26.523Z" }, - { url = "https://files.pythonhosted.org/packages/d5/5e/405965351aef8c76b8ef7ad370e5da58d57ef6068df197548b015464001a/greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633", size = 640519, upload-time = "2025-08-07T13:53:13.928Z" }, { url = "https://files.pythonhosted.org/packages/25/5d/382753b52006ce0218297ec1b628e048c4e64b155379331f25a7316eb749/greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079", size = 639707, upload-time = "2025-08-07T13:18:27.146Z" }, { url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" }, { url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" }, @@ -1178,7 +1162,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079, upload-time = "2025-08-07T13:15:45.033Z" }, { url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997, upload-time = "2025-08-07T13:42:56.234Z" }, { url = "https://files.pythonhosted.org/packages/3b/16/035dcfcc48715ccd345f3a93183267167cdd162ad123cd93067d86f27ce4/greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968", size = 655185, upload-time = "2025-08-07T13:45:27.624Z" }, - { url = "https://files.pythonhosted.org/packages/31/da/0386695eef69ffae1ad726881571dfe28b41970173947e7c558d9998de0f/greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9", size = 649926, upload-time = "2025-08-07T13:53:15.251Z" }, { url = "https://files.pythonhosted.org/packages/68/88/69bf19fd4dc19981928ceacbc5fd4bb6bc2215d53199e367832e98d1d8fe/greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6", size = 651839, upload-time = "2025-08-07T13:18:30.281Z" }, { url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586, upload-time = "2025-08-07T13:18:28.544Z" }, { url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281, upload-time = "2025-08-07T13:42:39.858Z" }, @@ -1189,7 +1172,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31", size = 272814, upload-time = "2025-08-07T13:15:50.011Z" }, { url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945", size = 641073, upload-time = "2025-08-07T13:42:57.23Z" }, { url = "https://files.pythonhosted.org/packages/f7/0b/bc13f787394920b23073ca3b6c4a7a21396301ed75a655bcb47196b50e6e/greenlet-3.2.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:710638eb93b1fa52823aa91bf75326f9ecdfd5e0466f00789246a5280f4ba0fc", size = 655191, upload-time = "2025-08-07T13:45:29.752Z" }, - { url = "https://files.pythonhosted.org/packages/f2/d6/6adde57d1345a8d0f14d31e4ab9c23cfe8e2cd39c3baf7674b4b0338d266/greenlet-3.2.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c5111ccdc9c88f423426df3fd1811bfc40ed66264d35aa373420a34377efc98a", size = 649516, upload-time = "2025-08-07T13:53:16.314Z" }, { url = "https://files.pythonhosted.org/packages/7f/3b/3a3328a788d4a473889a2d403199932be55b1b0060f4ddd96ee7cdfcad10/greenlet-3.2.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76383238584e9711e20ebe14db6c88ddcedc1829a9ad31a584389463b5aa504", size = 652169, upload-time = "2025-08-07T13:18:32.861Z" }, { url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671", size = 610497, upload-time = "2025-08-07T13:18:31.636Z" }, { url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b", size = 1121662, upload-time = "2025-08-07T13:42:41.117Z" }, @@ -1200,7 +1182,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586, upload-time = "2025-08-07T13:16:08.004Z" }, { url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346, upload-time = "2025-08-07T13:42:59.944Z" }, { url = "https://files.pythonhosted.org/packages/c0/aa/687d6b12ffb505a4447567d1f3abea23bd20e73a5bed63871178e0831b7a/greenlet-3.2.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c17b6b34111ea72fc5a4e4beec9711d2226285f0386ea83477cbb97c30a3f3a5", size = 699218, upload-time = "2025-08-07T13:45:30.969Z" }, - { url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659, upload-time = "2025-08-07T13:53:17.759Z" }, { url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355, upload-time = "2025-08-07T13:18:34.517Z" }, { url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512, upload-time = "2025-08-07T13:18:33.969Z" }, { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" }, @@ -1517,15 +1498,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/73/07/02e16ed01e04a374e644b575638ec7987ae846d25ad97bcc9945a3ee4b0e/jsonpatch-1.33-py2.py3-none-any.whl", hash = "sha256:0ae28c0cd062bbd8b8ecc26d7d164fbbea9652a1a3693f3b956c1eae5145dade", size = 12898, upload-time = "2023-06-16T21:01:28.466Z" }, ] -[[package]] -name = "jsonpath-python" -version = "1.0.6" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b5/49/e582e50b0c54c1b47e714241c4a4767bf28758bf90212248aea8e1ce8516/jsonpath-python-1.0.6.tar.gz", hash = "sha256:dd5be4a72d8a2995c3f583cf82bf3cd1a9544cfdabf2d22595b67aff07349666", size = 18121, upload-time = "2022-03-14T02:35:01.877Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/16/8a/d63959f4eff03893a00e6e63592e3a9f15b9266ed8e0275ab77f8c7dbc94/jsonpath_python-1.0.6-py3-none-any.whl", hash = "sha256:1e3b78df579f5efc23565293612decee04214609208a2335884b3ee3f786b575", size = 7552, upload-time = "2022-03-14T02:34:59.754Z" }, -] - [[package]] name = "jsonpointer" version = "3.0.0" @@ -2007,13 +1979,13 @@ dev = [ { name = "black" }, { name = "chardet" }, { name = "coverage" }, + { name = "duckdb" }, { name = "gql" }, { name = "ipykernel" }, { name = "ipython-genutils" }, { name = "jsonpatch" }, { name = "jupyter" }, { name = "mock" }, - { name = "morph-kgc" }, { name = "myst-nb" }, { name = "nbconvert" }, { name = "nbformat" }, @@ -2061,7 +2033,7 @@ shacl = [ ] tests = [ { name = "black" }, - { name = "morph-kgc" }, + { name = "duckdb" }, { name = "numpydantic" }, { name = "pyshacl" }, ] @@ -2104,9 +2076,9 @@ requires-dist = [ { name = "prefixcommons", specifier = ">=0.1.7" }, { name = "prefixmaps", specifier = ">=0.2.2" }, { name = "pydantic", specifier = ">=2.0.0,<3.0.0" }, - { name = "pyjsg", specifier = ">=0.11.6" }, - { name = "pyshex", specifier = ">=0.7.20" }, - { name = "pyshexc", specifier = ">=0.8.3" }, + { name = "pyjsg", specifier = ">=0.12.3" }, + { name = "pyshex", specifier = ">=0.9.0" }, + { name = "pyshexc", specifier = ">=0.10.3" }, { name = "python-dateutil" }, { name = "pyyaml" }, { name = "rdflib", specifier = ">=6.0.0" }, @@ -2122,13 +2094,13 @@ dev = [ { name = "black", specifier = ">=24.0.0" }, { name = "chardet" }, { name = "coverage", specifier = ">=6.4.1" }, + { name = "duckdb", specifier = ">=1.5.2" }, { name = "gql", specifier = ">=4.0.0" }, { name = "ipykernel" }, { name = "ipython-genutils" }, { name = "jsonpatch", specifier = ">=1.33" }, { name = "jupyter" }, { name = "mock", specifier = ">=5.1.0" }, - { name = "morph-kgc", marker = "python_full_version >= '3.10'", specifier = ">=2.9.0" }, { name = "myst-nb", marker = "python_full_version >= '3.10'", specifier = ">=1.0.0" }, { name = "nbconvert" }, { name = "nbformat" }, @@ -2171,7 +2143,7 @@ pandera = [ shacl = [{ name = "pyshacl", specifier = ">=0.25.0" }] tests = [ { name = "black", specifier = ">=24.0.0" }, - { name = "morph-kgc", marker = "python_full_version >= '3.10'", specifier = ">=2.9.0" }, + { name = "duckdb", specifier = ">=1.5.2" }, { name = "numpydantic", specifier = ">=1.6.1" }, { name = "pyshacl", specifier = ">=0.25.0" }, ] @@ -2207,6 +2179,7 @@ dependencies = [ { name = "prefixcommons" }, { name = "prefixmaps" }, { name = "pydantic" }, + { name = "pyoxigraph" }, { name = "pyyaml" }, { name = "rdflib" }, { name = "requests" }, @@ -2238,6 +2211,7 @@ requires-dist = [ { name = "prefixcommons", specifier = ">=0.1.12" }, { name = "prefixmaps", specifier = ">=0.1.4" }, { name = "pydantic", specifier = ">=1.10.2,<3.0.0" }, + { name = "pyoxigraph", specifier = ">=0.5.6" }, { name = "pyyaml" }, { name = "rdflib", specifier = ">=6.0.0" }, { name = "requests" }, @@ -2501,25 +2475,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/bd/d9/617e6af809bf3a1d468e0d58c3997b1dc219a9a9202e650d30c2fc85d481/mock-5.2.0-py3-none-any.whl", hash = "sha256:7ba87f72ca0e915175596069dbbcc7c75af7b5e9b9bc107ad6349ede0819982f", size = 31617, upload-time = "2025-03-03T12:31:41.518Z" }, ] -[[package]] -name = "morph-kgc" -version = "2.10.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "duckdb" }, - { name = "elementpath" }, - { name = "falcon" }, - { name = "jsonpath-python" }, - { name = "pandas" }, - { name = "pyoxigraph" }, - { name = "rdflib" }, - { name = "ruamel-yaml" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/09/b1/2306c3bf858186c1cb1b872fbae45ad5b820a2af7d5755766b9ad91b087a/morph_kgc-2.10.0.tar.gz", hash = "sha256:a8d01d4c2118821ed46490bc6445d0d06f0f5dd23e29eeeee1da64ea99e1a124", size = 257627, upload-time = "2026-01-20T11:04:45.478Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/c9/c4/8edb7ec3b0602ffcfad2670cfb5eb2af2c40196695b440b636fc5a50b311/morph_kgc-2.10.0-py3-none-any.whl", hash = "sha256:8ce01d8db014a3cbe9d2e77f61c543ea8d19a7f9ec7cd6ad4abf203bd9ce9ba7", size = 72212, upload-time = "2026-01-20T11:04:44.446Z" }, -] - [[package]] name = "multidict" version = "6.7.0" @@ -3686,45 +3641,56 @@ wheels = [ [[package]] name = "pyjsg" -version = "0.11.10" +version = "0.12.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "antlr4-python3-runtime" }, { name = "jsonasobj" }, + { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/90/61/e001a4b679a171f84783deb8e215a91c9f614cb498807e24e4f73ea4e5ed/PyJSG-0.11.10.tar.gz", hash = "sha256:4bd6e3ff2833fa2b395bbe803a2d72a5f0bab5b7285bccd0da1a1bc0aee88bfa", size = 130742, upload-time = "2022-04-14T17:18:24.511Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c4/4e/192169ba1066454f016927fc46c7e595a6c701fd1173bd249efcf6de40b3/pyjsg-0.12.4.tar.gz", hash = "sha256:bb1c0ff1f50846d2b5185b182e28b0b6978eae51a2078ce3eb1e0f28dea7b9ab", size = 149852, upload-time = "2026-05-01T14:43:44.665Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/96/ee/370c3b1908327dac967841ff723db391a02f3637c95c6898160e5ffe1060/PyJSG-0.11.10-py3-none-any.whl", hash = "sha256:10af60ff42219be7e85bf7f11c19b648715b0b29eb2ddbd269e87069a7c3f26d", size = 80763, upload-time = "2022-04-14T17:18:23.169Z" }, + { url = "https://files.pythonhosted.org/packages/09/05/d129d016f5124adb882816bdaef44bb877e313ceb0a109abcf553f1ac90c/pyjsg-0.12.4-py3-none-any.whl", hash = "sha256:a57ae58bfd7192b32654a0024bc6462fb459d54e837f0b2b5cff0726aad2e557", size = 81728, upload-time = "2026-05-01T14:43:43.394Z" }, ] [[package]] name = "pyoxigraph" -version = "0.3.22" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/68/14/33446bc01926701595b0890811f96ab941fd61e89f257ae262368a3b90c5/pyoxigraph-0.3.22.tar.gz", hash = "sha256:430b18cb3cec37b8c71cee0f70ea10601b9e479f1b8c364861660ae9f8629fd9", size = 4306498, upload-time = "2023-12-01T14:37:34.573Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/94/73/4b196f0e7c7a6a92c6a61050a8af18d1ec56bd32e6778343db45d8a5cb9c/pyoxigraph-0.3.22-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:49609d3c8d6637193872181e8f9d8b85ae304b3d944b1d50a2e363bd4d3ad878", size = 6494143, upload-time = "2023-12-01T17:54:04.086Z" }, - { url = "https://files.pythonhosted.org/packages/8a/68/9d8608fe064976c4b6debcd74473a191f05d51956064ddc2adc1928b570b/pyoxigraph-0.3.22-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb0a0f2bd4348e9b92fbb92c71f449b7e42f6ac6fb67ce5797cbd8ab3b673c86", size = 6817401, upload-time = "2023-12-01T14:48:50.508Z" }, - { url = "https://files.pythonhosted.org/packages/1c/57/7e41261bd61f95d8aa8f85c03c9342fb247b83b2a99ec01bd9bc11c1bfb3/pyoxigraph-0.3.22-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5e9cd5931488feb3bdd189094a746d2d0c05c5364a2d93a1b748d2bb91145ab8", size = 6941539, upload-time = "2023-12-04T11:51:56.186Z" }, - { url = "https://files.pythonhosted.org/packages/9b/7d/4a40bb0f2e188354b4433a6ab7225d877eca68f21aaa65b937899dd8a7bf/pyoxigraph-0.3.22-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:95c43d3da6d43460368f0a5f4b497412b0d6509e55eb12245b0f173248118656", size = 7308576, upload-time = "2023-12-01T15:05:44.902Z" }, - { url = "https://files.pythonhosted.org/packages/97/c4/92050b91063458f48e3724ad4fc070c7552e005a18a9af6f45d81090a738/pyoxigraph-0.3.22-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9d466025962895e67a7c4a4ba303fe23a911f99d2158f5f53eb50f56949125f", size = 6494142, upload-time = "2023-12-01T17:54:06.663Z" }, - { url = "https://files.pythonhosted.org/packages/10/03/0c6f5c744d9cc03e606fa35b7f533846c4ba602f22db4a5cc38e7ea0e253/pyoxigraph-0.3.22-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90dc1e4010e2011c5440b7a3832153a14f52257e12a90a0d7fc6ed16e88a7961", size = 6817400, upload-time = "2023-12-01T14:48:52.531Z" }, - { url = "https://files.pythonhosted.org/packages/a0/44/6765ecd12c68b973cabeea8267cb17c21e4f74150075a6751fa6ba98dc4f/pyoxigraph-0.3.22-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:10c02f543fa83338e93308cad7868137ccadffc3330827deebac715333070091", size = 6941543, upload-time = "2023-12-04T11:51:58.401Z" }, - { url = "https://files.pythonhosted.org/packages/21/a4/f6ce53292ef2104dc098d979f293452916d6a5d076193497efa8411d2751/pyoxigraph-0.3.22-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:469039b1ed6a31fef59b8b6c2ef5c836dd147944aa7120b4f4e6db4fd5abf60a", size = 7308578, upload-time = "2023-12-01T15:05:47.378Z" }, - { url = "https://files.pythonhosted.org/packages/9e/54/bf0e750bcc9cc29813454a7e56b18cd611dcacfb6533e615c44af5f9d1d1/pyoxigraph-0.3.22-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2baadd8dba65ff91bdcdf85e57d928806d94612b85da58d64526f0f1d5cd4df", size = 6495789, upload-time = "2023-12-01T17:54:10.045Z" }, - { url = "https://files.pythonhosted.org/packages/b7/bc/339893be78df7ed09fc2a4c59028cfcdc6335d96eacf58a206ded042da35/pyoxigraph-0.3.22-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f7e217e82e541f7df4697705c7cbfbd62e019c50786669647cb261445d75215", size = 6821696, upload-time = "2023-12-01T14:48:55.074Z" }, - { url = "https://files.pythonhosted.org/packages/bb/be/2466aaf6b705952e5f87a758fff1dfd1fc213650fb0b0c812f6b1968b81a/pyoxigraph-0.3.22-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:963bc825e34d7238bffb942572ac0e59a6512e7d33ec8f898f495964a8dac1de", size = 6941181, upload-time = "2023-12-04T11:52:00.908Z" }, - { url = "https://files.pythonhosted.org/packages/81/2d/6847756fc2b0d21f1a674268ac476c86de961c83dca0ab04b0b46a045f06/pyoxigraph-0.3.22-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c99cd7d305a5f154d6fa7eca3a93b153ac94ad2a4aff6c404ec56db38d538ea4", size = 7312588, upload-time = "2023-12-01T15:05:49.69Z" }, - { url = "https://files.pythonhosted.org/packages/01/6b/7bcebf6e590db0384cb56b0ac76385cea3b51ea37170da849214d1d9b1cf/pyoxigraph-0.3.22-cp37-abi3-macosx_10_14_x86_64.macosx_11_0_arm64.macosx_10_14_universal2.whl", hash = "sha256:32d5630c9fb3d7b819a25401b3afdbd01dbfc9624b1519d41216622fe3af52e6", size = 10561197, upload-time = "2023-12-01T15:17:42.567Z" }, - { url = "https://files.pythonhosted.org/packages/4d/05/141746d5b1a8e6210613317d6cb772ab5bfe931a3ebdb98a92fa6ed59c39/pyoxigraph-0.3.22-cp37-abi3-macosx_10_14_x86_64.whl", hash = "sha256:6368f24bc236a6055171f4a80cb63b9ad76fcbdbcb4a3ef981eb6d86d8975c11", size = 5478410, upload-time = "2023-12-01T15:17:45.497Z" }, - { url = "https://files.pythonhosted.org/packages/15/ef/85854115c9a8a08eea3d9e46317ca9774566dacd33964b41acd30a8156cd/pyoxigraph-0.3.22-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:821e1103cf1e8f12d0738cf1b2625c8374758e33075ca67161ead3669f53e4cb", size = 5092580, upload-time = "2023-12-01T15:17:48.102Z" }, - { url = "https://files.pythonhosted.org/packages/7f/96/ad8b73eb8c649a089d07cbe323034e8d09cdabcdab44194786c4c2faee28/pyoxigraph-0.3.22-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:630f1090d67d1199c86f358094289816e0c00a21000164cfe06499c8689f8b9e", size = 6493664, upload-time = "2023-12-01T17:54:12.064Z" }, - { url = "https://files.pythonhosted.org/packages/a9/08/a185a89bf7832e7377b0d9c961073731c0e5e13beaf2b91d93adaec13baa/pyoxigraph-0.3.22-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1aca511243209005da32470bbfec9e023ac31095bbeaa8cedabe0a652adce38c", size = 6816344, upload-time = "2023-12-01T14:48:57.322Z" }, - { url = "https://files.pythonhosted.org/packages/45/b4/37f7114c4a21b1ee210505e953fdda533b6ff9a458570905ebfe53588cf2/pyoxigraph-0.3.22-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:ab329df388865afa9a934f1eac2e75264b220962a21bbcded6cb7ead96d1f1dd", size = 6940281, upload-time = "2023-12-04T11:52:02.933Z" }, - { url = "https://files.pythonhosted.org/packages/91/d3/7bff379c8075bb46301c29027e355f8a6f6388252e8626636619c2dbca19/pyoxigraph-0.3.22-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:60b7f13331b91827e2edfa8633ffb7e3bfc8630b708578fb0bc8d43c76754f20", size = 7308086, upload-time = "2023-12-01T15:05:51.979Z" }, - { url = "https://files.pythonhosted.org/packages/9d/7d/dd2d8c606633c2da157e7dd5a7c92b7bfdef1866bd4f382763ff17454431/pyoxigraph-0.3.22-cp37-abi3-win_amd64.whl", hash = "sha256:9a4ffd8ce28c3e8ce888662e0d9e9155e5226ecd8cd967f3c46391cf266c4c1d", size = 4716868, upload-time = "2023-12-01T14:51:37.776Z" }, - { url = "https://files.pythonhosted.org/packages/f6/78/9ae20f0e465b0cb1babd65ce6c563792f68b54baa48e55e8a83026e7eded/pyoxigraph-0.3.22-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55322d5b9b852c4813c293575aa5e676cec19c617d0aad5ae7ce47c49b113f0b", size = 6493901, upload-time = "2023-12-01T17:54:20.748Z" }, - { url = "https://files.pythonhosted.org/packages/b9/e7/3331a426874c82ed6bbeffcc2e83d9c330644c72ec10e0b6b017cf958756/pyoxigraph-0.3.22-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3397138f3a6d2c3299250ebde2bca7c95a25b58b29009eb0b29c2f5d1438d954", size = 6818107, upload-time = "2023-12-01T14:49:05.339Z" }, +version = "0.5.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/fd/21f10f55194b527348005c54ea87612d1af795be63db19e0abe6530d9920/pyoxigraph-0.5.8.tar.gz", hash = "sha256:c9fd2e3537fdd96d3895af259aefdc6f40b86a3f969d68fd3fe3cbf9f707f462", size = 5305516, upload-time = "2026-04-28T20:43:18.665Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/6c/422277e8d788e0b706928f1b25aa582fd3581b7f1f052ef258d10f5099e0/pyoxigraph-0.5.8-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a14fce7014892b2b85b0350903197cccdab9d4c8b889c77c6e748426a7cd5c5b", size = 7702836, upload-time = "2026-04-28T20:42:13.216Z" }, + { url = "https://files.pythonhosted.org/packages/59/d8/fad202f86e9bcd7ea2512d0d086405f5b77b47b634640a61e99ad5e755ad/pyoxigraph-0.5.8-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3aecd4f5bde22c4cae03b398b0144411745940787e174e0d2690abbb486c4688", size = 8220927, upload-time = "2026-04-28T20:42:15.744Z" }, + { url = "https://files.pythonhosted.org/packages/e0/49/1cfb1cbbd60164b543547a5c538fe7ab46bce461764a2a19daeae33f404a/pyoxigraph-0.5.8-cp310-cp310-win_amd64.whl", hash = "sha256:14e34a8d83b2b3f1abb99de322bd31f158d1a59f690317201e7cf43b297523c3", size = 5446377, upload-time = "2026-04-28T20:42:17.329Z" }, + { url = "https://files.pythonhosted.org/packages/17/9f/b5eb3254b63661b9f7f7d12bded5e70148fb5d56bac0fae3b529ce2cdb16/pyoxigraph-0.5.8-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:164b9b41769cdc5ac93ff37f1dd418fe2970a839e6bb283a5f095224a10bae3f", size = 7702679, upload-time = "2026-04-28T20:42:19.24Z" }, + { url = "https://files.pythonhosted.org/packages/41/dd/8ad52b1ae147c948bd2f217fc9c71cd02211a5570dc9e43ecb04b19cf3fa/pyoxigraph-0.5.8-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d7aa10a7c3e00cfccae819bbf040cef396db5304d5ea9890317fd8031e844684", size = 8220803, upload-time = "2026-04-28T20:42:21.13Z" }, + { url = "https://files.pythonhosted.org/packages/1b/3e/1c2e36999ac1884fd4a335c6c6c7aa68e3cb0038599386f7acb75dd0374c/pyoxigraph-0.5.8-cp311-cp311-win_amd64.whl", hash = "sha256:b43865ffdbc86bf8a48d3184272a5e3b1097c5105d9a4f444a6dda1e76763f88", size = 5446937, upload-time = "2026-04-28T20:42:23.056Z" }, + { url = "https://files.pythonhosted.org/packages/f8/58/3bd1419d9264b6027dc758340007951a7b3842dcb7f420c53da62ded33af/pyoxigraph-0.5.8-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:fa823ed87c34d21331f17c3ff6cd62b2ef188b945b70d741f0a7429d671aa3c9", size = 7704079, upload-time = "2026-04-28T20:42:25.362Z" }, + { url = "https://files.pythonhosted.org/packages/0d/d0/8ef9a7582373e106a4159a7ac59f908a92f6fa1ea776b8bd2289fdebd764/pyoxigraph-0.5.8-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:567618c3595c27caa64dff479a679592bc455af6b4afc3b24ca120fb2eed8327", size = 8224731, upload-time = "2026-04-28T20:42:27.323Z" }, + { url = "https://files.pythonhosted.org/packages/61/88/68ae76c58171bde3c66b6c019e5b6367f83783a9a44fc5a95bf6b2928f58/pyoxigraph-0.5.8-cp312-cp312-win_amd64.whl", hash = "sha256:7903f0168f6313cacbf0815221dbedbb54606f172a6a3c4623caba42ae64702c", size = 5449186, upload-time = "2026-04-28T20:42:29.498Z" }, + { url = "https://files.pythonhosted.org/packages/b9/02/1759261c7b20c4671a6837083de9ded8122ee6a4cd9b3e9efdbf2ce3dbab/pyoxigraph-0.5.8-cp312-cp312-win_arm64.whl", hash = "sha256:07153608e35514368a157f7427aef6d9be4fcb3b32a0b2edc0c849d85627d981", size = 5073598, upload-time = "2026-04-28T20:42:31.32Z" }, + { url = "https://files.pythonhosted.org/packages/11/90/6bc32bc00d49b86047cc42b0afbdd804da2e0f8d512c14c35d3eef1095c0/pyoxigraph-0.5.8-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:0bcaa1b7a4c5a2521f5f0fe4d837f29ddd40d3be1ad26e4220ac839eea657a52", size = 7705136, upload-time = "2026-04-28T20:42:32.893Z" }, + { url = "https://files.pythonhosted.org/packages/82/b2/98dc78bbe6c9fe407c04dcf92281eaa58e5b3a9d5a5d31a62b09d004d6b4/pyoxigraph-0.5.8-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:bd1cfedd6bc7ea0502bb86449881afa4b9b89015aae6608cedcb4e1fd0749924", size = 8225560, upload-time = "2026-04-28T20:42:34.856Z" }, + { url = "https://files.pythonhosted.org/packages/b6/23/562c411d1c55a1e08a645b569980c97f24b8b8effbbaec56a94702e08056/pyoxigraph-0.5.8-cp313-cp313-win_amd64.whl", hash = "sha256:5236e59f26ff1606eb05941df24b9d470a183d11bc904a5722aac23aa8dd1b01", size = 5449722, upload-time = "2026-04-28T20:42:37.186Z" }, + { url = "https://files.pythonhosted.org/packages/0a/18/50e3793b65965a8006f45b8c01839b6f280e3dbcc82098b62108a6d3510f/pyoxigraph-0.5.8-cp313-cp313-win_arm64.whl", hash = "sha256:d324d334379b361646952da7d82cfc0bfb1e411f0e8a1f25f78a301c3bf41137", size = 5074183, upload-time = "2026-04-28T20:42:38.722Z" }, + { url = "https://files.pythonhosted.org/packages/6e/c7/c13220b5e9e12dbcbb8f8c221ae892854e28e600658db7c69d1cfd5bdf1e/pyoxigraph-0.5.8-cp313-cp313t-win_amd64.whl", hash = "sha256:a40b7449d5406aa1c0f6a3511191c484b333f7debaac48e3fcfc804b529dcb84", size = 5447293, upload-time = "2026-04-28T20:42:40.675Z" }, + { url = "https://files.pythonhosted.org/packages/ba/19/640f52f219eda8fa7d40498eaad2b7392e913cea37c31d4389b74037509f/pyoxigraph-0.5.8-cp314-cp314-manylinux_2_28_aarch64.whl", hash = "sha256:914355bdd92455e5538938aeeb15dedfe80ceb2bf7d576e67e00abc3c7a23ce1", size = 7701324, upload-time = "2026-04-28T20:42:42.329Z" }, + { url = "https://files.pythonhosted.org/packages/b1/80/9fa0bd17d17a73e2a14359ba9135fd1721d4d64fe3b38d8625e78a02a484/pyoxigraph-0.5.8-cp314-cp314-manylinux_2_28_x86_64.whl", hash = "sha256:97f9589fdf8b02acd9342b71f118352740012ae97f559eed65c3452d2555ca26", size = 8220766, upload-time = "2026-04-28T20:42:44.07Z" }, + { url = "https://files.pythonhosted.org/packages/b7/f1/e865421c48252992105fda37b78ba82be50abeeee89096b1fb87f56325d0/pyoxigraph-0.5.8-cp314-cp314-win_amd64.whl", hash = "sha256:23d89e6aa3810084b3d9e405a13440e8196d55c3df5d747d4f0307331ee61f11", size = 5447875, upload-time = "2026-04-28T20:42:46.095Z" }, + { url = "https://files.pythonhosted.org/packages/cd/61/d21ed60790aa0a373d8e7761edb042cd494527a7f9ad9d9ff05a276fe8ed/pyoxigraph-0.5.8-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:598e409ddf0440734259ff5d30a9d20eb1867c635031188c1cc923e8773289ae", size = 7694353, upload-time = "2026-04-28T20:42:48.288Z" }, + { url = "https://files.pythonhosted.org/packages/83/3e/f41c3fda4b67d1edd534cbc75529071f7e64359404f54e70cb99f4591f1d/pyoxigraph-0.5.8-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:8a76d9473ccf0a866443ce2be384ac83b97113345a2929a520c7aab583ce7364", size = 8218478, upload-time = "2026-04-28T20:42:50.147Z" }, + { url = "https://files.pythonhosted.org/packages/57/dd/53be335381c373816e290f445325a7d444f1dbb1d98a00b15b5c93775128/pyoxigraph-0.5.8-cp314-cp314t-win_amd64.whl", hash = "sha256:9e81f6afebcc115c9f43d8b86869f5167f0d52eccb8ca3e5d359905e9a989fad", size = 5441788, upload-time = "2026-04-28T20:42:52.137Z" }, + { url = "https://files.pythonhosted.org/packages/ca/32/9e2dacd0ee4a88e6fb190ac97d7f4832829451e48f993027359fe32f3078/pyoxigraph-0.5.8-cp38-abi3-macosx_10_14_x86_64.whl", hash = "sha256:b925ab74ad7cecab359896964278448d45f777fde94b22df99808f2c52e18376", size = 6328777, upload-time = "2026-04-28T20:42:54.039Z" }, + { url = "https://files.pythonhosted.org/packages/3f/ec/14ec2530f6b96df3199afc0cf67fd79492106530d740d65517fb81d80ec8/pyoxigraph-0.5.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:88dac8561fbe1bcfe3c2193f5526bc297a3fd03545cd94da6581f7d12d788628", size = 5805509, upload-time = "2026-04-28T20:42:56.206Z" }, + { url = "https://files.pythonhosted.org/packages/83/fa/eab9c5729e31f5e64b7bc54f2be3a6581a446f01690c7c66e9bb9c5f598c/pyoxigraph-0.5.8-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:af7e42484d8e636ea9dfd12e39862b84067624b62be59f21c16c7e36fff74dfc", size = 7706347, upload-time = "2026-04-28T20:42:57.91Z" }, + { url = "https://files.pythonhosted.org/packages/12/71/7be1d3cfe9fa4e31eb5bea0286e099d24ded457bd2b63da192fe3af72ab8/pyoxigraph-0.5.8-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:108f6a8c7129ed678bdf12906328e9fea38a88c604b55677b5cb32a3f68daede", size = 8226169, upload-time = "2026-04-28T20:42:59.46Z" }, + { url = "https://files.pythonhosted.org/packages/74/5f/a7165e1d8b9d3797a51a78d190da0a6d3933eccb58f5b502e412ef4ed5ad/pyoxigraph-0.5.8-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:bc943aebf424e1cd4b00b46f732078d028c365edcb3fc097e802ace8a612fb75", size = 8889357, upload-time = "2026-04-28T20:43:01.206Z" }, + { url = "https://files.pythonhosted.org/packages/7a/46/782e87e77f1a41cba553823f3fb39c2ed77bfb4ae4a39ed68f946a373c48/pyoxigraph-0.5.8-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a6d1bc051ea2676495efc25931bd309efb830199150d72948c1c14e94624af8a", size = 9433564, upload-time = "2026-04-28T20:43:04.103Z" }, + { url = "https://files.pythonhosted.org/packages/40/79/3704d8b2013d8de7cc30ee3b12ad142d23e9c779523b0f821114e684aa04/pyoxigraph-0.5.8-cp38-abi3-win_amd64.whl", hash = "sha256:901e711f590945295214868c9ad01118ae89da610fabd4deeef2665e0ecda256", size = 5448135, upload-time = "2026-04-28T20:43:06.188Z" }, + { url = "https://files.pythonhosted.org/packages/c2/88/b881b7a8dc92ae6fb302bcb18f18b15c1782a3c86557a9c0e55bcdb9a146/pyoxigraph-0.5.8-cp38-abi3-win_arm64.whl", hash = "sha256:eb39a617dd0573f2e3a37a86614eaeac974caf77db1243d3fe7148841d0329c9", size = 5072423, upload-time = "2026-04-28T20:43:08.116Z" }, + { url = "https://files.pythonhosted.org/packages/60/f7/748e1229f933012905114cec4d484b1d799f374b6b94e06c209cd103aab1/pyoxigraph-0.5.8-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ede43c55336fe8bae1607cb2d1586ac3fe29dcf63761616d3aee45cb42395b22", size = 7703814, upload-time = "2026-04-28T20:43:13.253Z" }, + { url = "https://files.pythonhosted.org/packages/ad/0f/6e1bfb7c642c3d0a81e57cbc8b1b539cc7d2fb451eccd975705f5a0978ab/pyoxigraph-0.5.8-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:d42dfd064be0a3f66c2301a0c8501d2079b570625d279e4aabba0e10a9102151", size = 8220892, upload-time = "2026-04-28T20:43:14.881Z" }, + { url = "https://files.pythonhosted.org/packages/fd/d6/69b9e9a9a1bd7124391cae5f71bf3063c30708ea563dad3674dfecb9db98/pyoxigraph-0.5.8-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:9676f2adad8468cdceb05a72a7b2bcc37683af3ddb37f595c370946f7d9f1543", size = 5446016, upload-time = "2026-04-28T20:43:17.016Z" }, ] [[package]] @@ -3767,7 +3733,7 @@ wheels = [ [[package]] name = "pyshex" -version = "0.8.1" +version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cfgraph" }, @@ -3780,14 +3746,14 @@ dependencies = [ { name = "sparqlwrapper" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/d7/420ce2df4e8688e06fa8e1fc353fdf3875eb70f6fc2e17493d0526d778ff/PyShEx-0.8.1.tar.gz", hash = "sha256:3c5c4d45fe27faaadae803cb008c41acf8ee784da7868b04fd84967e75be70d0", size = 475611, upload-time = "2022-04-14T21:14:58.769Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/ca/f0e6ecd16e65318f69fe5937982955c340a9e5828dcb391371100577c174/pyshex-0.9.0.tar.gz", hash = "sha256:87288b5e5613f734f55f0085334558218ff618fb1061aabdcee19841092b3eca", size = 508959, upload-time = "2026-05-07T12:55:05.188Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/48/efb1b1d3f3aee8cfc9f256738ca6e79ec362edbfc3a3abecbaf84db04643/PyShEx-0.8.1-py3-none-any.whl", hash = "sha256:6da1b10123e191abf8dcb6bf3e54aa3e1fcf771df5d1a0ed453217c8900c8e6a", size = 51861, upload-time = "2022-04-14T21:14:57.254Z" }, + { url = "https://files.pythonhosted.org/packages/40/ea/66c21d1f5fec82e6218a70b5672870f76878f41bf3b9570235b4e7223118/pyshex-0.9.0-py3-none-any.whl", hash = "sha256:d81344deed686b7c169f23156221ae281225e2ba02b14fe9810335afdefffa9d", size = 54742, upload-time = "2026-05-07T12:55:03.803Z" }, ] [[package]] name = "pyshexc" -version = "0.9.1" +version = "0.10.3.post1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "antlr4-python3-runtime" }, @@ -3797,9 +3763,9 @@ dependencies = [ { name = "rdflib-shim" }, { name = "shexjsg" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2a/31/95c590e8ed6e8cff141b6dd2a3de93b540f9dc3fba54621a20fd1cdb11e4/PyShExC-0.9.1.tar.gz", hash = "sha256:35a9975d4b9afeb20ef710fb6680871756381d0c39fbb5470b3b506581a304d3", size = 96070, upload-time = "2022-04-14T18:51:45.979Z" } +sdist = { url = "https://files.pythonhosted.org/packages/36/c5/81196cd2ab23953c4a8d39c7627437984bf8566eae896c5745356a7de7c8/pyshexc-0.10.3.post1.tar.gz", hash = "sha256:80d9d067c80af9a796e3c1c47d2207edf2e9a9fc39d3ca0ce5dd2019334ea915", size = 130019, upload-time = "2026-05-01T11:34:19.23Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/7d/ff5000e0882f2b3995bef20b667945d3faa9289b556295e4cc5d2e91f104/PyShExC-0.9.1-py2.py3-none-any.whl", hash = "sha256:efc55ed5cb2453e9df569b03e282505e96bb06597934288f3b23dd980ef10028", size = 69792, upload-time = "2022-04-14T18:51:44.148Z" }, + { url = "https://files.pythonhosted.org/packages/5e/1d/d8d5be9e72e518b42f544e196de9c07161b0933143c9d0e4e2e33de60d79/pyshexc-0.10.3.post1-py3-none-any.whl", hash = "sha256:5d247f2822ef9864152545935d93a07dce66640608ea9414c96f69da7fe7a168", size = 71730, upload-time = "2026-05-01T11:34:17.836Z" }, ] [[package]] @@ -4354,72 +4320,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ed/d2/4a73b18821fd4669762c855fd1f4e80ceb66fb72d71162d14da58444a763/rpds_py-0.28.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5d0145edba8abd3db0ab22b5300c99dc152f5c9021fab861be0f0544dc3cbc5f", size = 552199, upload-time = "2025-10-22T22:24:26.54Z" }, ] -[[package]] -name = "ruamel-yaml" -version = "0.18.16" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "ruamel-yaml-clib", marker = "python_full_version < '3.14' and platform_python_implementation == 'CPython'" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/9f/c7/ee630b29e04a672ecfc9b63227c87fd7a37eb67c1bf30fe95376437f897c/ruamel.yaml-0.18.16.tar.gz", hash = "sha256:a6e587512f3c998b2225d68aa1f35111c29fad14aed561a26e73fab729ec5e5a", size = 147269, upload-time = "2025-10-22T17:54:02.346Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/73/bb1bc2529f852e7bf64a2dec885e89ff9f5cc7bbf6c9340eed30ff2c69c5/ruamel.yaml-0.18.16-py3-none-any.whl", hash = "sha256:048f26d64245bae57a4f9ef6feb5b552a386830ef7a826f235ffb804c59efbba", size = 119858, upload-time = "2025-10-22T17:53:59.012Z" }, -] - -[[package]] -name = "ruamel-yaml-clib" -version = "0.2.14" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/e9/39ec4d4b3f91188fad1842748f67d4e749c77c37e353c4e545052ee8e893/ruamel.yaml.clib-0.2.14.tar.gz", hash = "sha256:803f5044b13602d58ea378576dd75aa759f52116a0232608e8fdada4da33752e", size = 225394, upload-time = "2025-09-22T19:51:23.753Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/b4/56/35a0a752415ae01992c68f5a6513bdef0e1b6fbdb60d7619342ce12346a0/ruamel.yaml.clib-0.2.14-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f8b2acb0ffdd2ce8208accbec2dca4a06937d556fdcaefd6473ba1b5daa7e3c4", size = 269216, upload-time = "2025-09-23T14:24:09.742Z" }, - { url = "https://files.pythonhosted.org/packages/98/6a/9a68184ab93619f4607ff1675e4ef01e8accfcbff0d482f4ca44c10d8eab/ruamel.yaml.clib-0.2.14-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:aef953f3b8bd0b50bd52a2e52fb54a6a2171a1889d8dea4a5959d46c6624c451", size = 137092, upload-time = "2025-09-22T19:50:26.906Z" }, - { url = "https://files.pythonhosted.org/packages/2b/3f/cfed5f088628128a9ec66f46794fd4d165642155c7b78c26d83b16c6bf7b/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:a0ac90efbc7a77b0d796c03c8cc4e62fd710b3f1e4c32947713ef2ef52e09543", size = 633768, upload-time = "2025-09-22T19:50:31.228Z" }, - { url = "https://files.pythonhosted.org/packages/3a/d5/5ce2cc156c1da48160171968d91f066d305840fbf930ee955a509d025a44/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9bf6b699223afe6c7fe9f2ef76e0bfa6dd892c21e94ce8c957478987ade76cd8", size = 721253, upload-time = "2025-09-22T19:50:28.776Z" }, - { url = "https://files.pythonhosted.org/packages/2b/71/d0b56bc902b38ebe4be8e270f730f929eec4edaf8a0fa7028f4ef64fa950/ruamel.yaml.clib-0.2.14-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d73a0187718f6eec5b2f729b0f98e4603f7bd9c48aa65d01227d1a5dcdfbe9e8", size = 683823, upload-time = "2025-09-22T19:50:29.993Z" }, - { url = "https://files.pythonhosted.org/packages/4b/db/1f37449dd89c540218598316ccafc1a0aed60215e72efa315c5367cfd015/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:81f6d3b19bc703679a5705c6a16dabdc79823c71d791d73c65949be7f3012c02", size = 690370, upload-time = "2025-09-23T18:42:46.797Z" }, - { url = "https://files.pythonhosted.org/packages/5d/53/c498b30f35efcd9f47cb084d7ad9374f2b907470f73913dec6396b81397d/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b28caeaf3e670c08cb7e8de221266df8494c169bd6ed8875493fab45be9607a4", size = 703578, upload-time = "2025-09-22T19:50:32.531Z" }, - { url = "https://files.pythonhosted.org/packages/34/79/492cfad9baed68914840c39e5f3c1cc251f51a897ddb3f532601215cbb12/ruamel.yaml.clib-0.2.14-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:94f3efb718f8f49b031f2071ec7a27dd20cbfe511b4dfd54ecee54c956da2b31", size = 722544, upload-time = "2025-09-22T19:50:34.157Z" }, - { url = "https://files.pythonhosted.org/packages/ca/f5/479ebfd5ba396e209ade90f7282d84b90c57b3e07be8dc6fcd02a6df7ffc/ruamel.yaml.clib-0.2.14-cp310-cp310-win32.whl", hash = "sha256:27c070cf3888e90d992be75dd47292ff9aa17dafd36492812a6a304a1aedc182", size = 100375, upload-time = "2025-09-22T19:50:36.832Z" }, - { url = "https://files.pythonhosted.org/packages/57/31/a044520fdb3bd409889f67f1efebda0658033c7ab3f390cee37531cc9a9e/ruamel.yaml.clib-0.2.14-cp310-cp310-win_amd64.whl", hash = "sha256:4f4a150a737fccae13fb51234d41304ff2222e3b7d4c8e9428ed1a6ab48389b8", size = 118129, upload-time = "2025-09-22T19:50:35.545Z" }, - { url = "https://files.pythonhosted.org/packages/b3/9f/3c51e9578b8c36fcc4bdd271a1a5bb65963a74a4b6ad1a989768a22f6c2a/ruamel.yaml.clib-0.2.14-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5bae1a073ca4244620425cd3d3aa9746bde590992b98ee8c7c8be8c597ca0d4e", size = 270207, upload-time = "2025-09-23T14:24:11.445Z" }, - { url = "https://files.pythonhosted.org/packages/4a/16/cb02815bc2ae9c66760c0c061d23c7358f9ba51dae95ac85247662b7fbe2/ruamel.yaml.clib-0.2.14-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:0a54e5e40a7a691a426c2703b09b0d61a14294d25cfacc00631aa6f9c964df0d", size = 137780, upload-time = "2025-09-22T19:50:37.734Z" }, - { url = "https://files.pythonhosted.org/packages/31/c6/fc687cd1b93bff8e40861eea46d6dc1a6a778d9a085684e4045ff26a8e40/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:10d9595b6a19778f3269399eff6bab642608e5966183abc2adbe558a42d4efc9", size = 641590, upload-time = "2025-09-22T19:50:41.978Z" }, - { url = "https://files.pythonhosted.org/packages/45/5d/65a2bc08b709b08576b3f307bf63951ee68a8e047cbbda6f1c9864ecf9a7/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dba72975485f2b87b786075e18a6e5d07dc2b4d8973beb2732b9b2816f1bad70", size = 738090, upload-time = "2025-09-22T19:50:39.152Z" }, - { url = "https://files.pythonhosted.org/packages/fb/d0/a70a03614d9a6788a3661ab1538879ed2aae4e84d861f101243116308a37/ruamel.yaml.clib-0.2.14-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:29757bdb7c142f9595cc1b62ec49a3d1c83fab9cef92db52b0ccebaad4eafb98", size = 700744, upload-time = "2025-09-22T19:50:40.811Z" }, - { url = "https://files.pythonhosted.org/packages/77/30/c93fa457611f79946d5cb6cc97493ca5425f3f21891d7b1f9b44eaa1b38e/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:557df28dbccf79b152fe2d1b935f6063d9cc431199ea2b0e84892f35c03bb0ee", size = 742321, upload-time = "2025-09-23T18:42:48.916Z" }, - { url = "https://files.pythonhosted.org/packages/40/85/e2c54ad637117cd13244a4649946eaa00f32edcb882d1f92df90e079ab00/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:26a8de280ab0d22b6e3ec745b4a5a07151a0f74aad92dd76ab9c8d8d7087720d", size = 743805, upload-time = "2025-09-22T19:50:43.58Z" }, - { url = "https://files.pythonhosted.org/packages/81/50/f899072c38877d8ef5382e0b3d47f8c4346226c1f52d6945d6f64fec6a2f/ruamel.yaml.clib-0.2.14-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e501c096aa3889133d674605ebd018471bc404a59cbc17da3c5924421c54d97c", size = 769529, upload-time = "2025-09-22T19:50:45.707Z" }, - { url = "https://files.pythonhosted.org/packages/99/7c/96d4b5075e30c65ea2064e40c2d657c7c235d7b6ef18751cf89a935b9041/ruamel.yaml.clib-0.2.14-cp311-cp311-win32.whl", hash = "sha256:915748cfc25b8cfd81b14d00f4bfdb2ab227a30d6d43459034533f4d1c207a2a", size = 100256, upload-time = "2025-09-22T19:50:48.26Z" }, - { url = "https://files.pythonhosted.org/packages/7d/8c/73ee2babd04e8bfcf1fd5c20aa553d18bf0ebc24b592b4f831d12ae46cc0/ruamel.yaml.clib-0.2.14-cp311-cp311-win_amd64.whl", hash = "sha256:4ccba93c1e5a40af45b2f08e4591969fa4697eae951c708f3f83dcbf9f6c6bb1", size = 118234, upload-time = "2025-09-22T19:50:47.019Z" }, - { url = "https://files.pythonhosted.org/packages/b4/42/ccfb34a25289afbbc42017e4d3d4288e61d35b2e00cfc6b92974a6a1f94b/ruamel.yaml.clib-0.2.14-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:6aeadc170090ff1889f0d2c3057557f9cd71f975f17535c26a5d37af98f19c27", size = 271775, upload-time = "2025-09-23T14:24:12.771Z" }, - { url = "https://files.pythonhosted.org/packages/82/73/e628a92e80197ff6a79ab81ec3fa00d4cc082d58ab78d3337b7ba7043301/ruamel.yaml.clib-0.2.14-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5e56ac47260c0eed992789fa0b8efe43404a9adb608608631a948cee4fc2b052", size = 138842, upload-time = "2025-09-22T19:50:49.156Z" }, - { url = "https://files.pythonhosted.org/packages/2b/c5/346c7094344a60419764b4b1334d9e0285031c961176ff88ffb652405b0c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:a911aa73588d9a8b08d662b9484bc0567949529824a55d3885b77e8dd62a127a", size = 647404, upload-time = "2025-09-22T19:50:52.921Z" }, - { url = "https://files.pythonhosted.org/packages/df/99/65080c863eb06d4498de3d6c86f3e90595e02e159fd8529f1565f56cfe2c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a05ba88adf3d7189a974b2de7a9d56731548d35dc0a822ec3dc669caa7019b29", size = 753141, upload-time = "2025-09-22T19:50:50.294Z" }, - { url = "https://files.pythonhosted.org/packages/3d/e3/0de85f3e3333f8e29e4b10244374a202a87665d1131798946ee22cf05c7c/ruamel.yaml.clib-0.2.14-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fb04c5650de6668b853623eceadcdb1a9f2fee381f5d7b6bc842ee7c239eeec4", size = 703477, upload-time = "2025-09-22T19:50:51.508Z" }, - { url = "https://files.pythonhosted.org/packages/d9/25/0d2f09d8833c7fd77ab8efeff213093c16856479a9d293180a0d89f6bed9/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:df3ec9959241d07bc261f4983d25a1205ff37703faf42b474f15d54d88b4f8c9", size = 741157, upload-time = "2025-09-23T18:42:50.408Z" }, - { url = "https://files.pythonhosted.org/packages/d3/8c/959f10c2e2153cbdab834c46e6954b6dd9e3b109c8f8c0a3cf1618310985/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:fbc08c02e9b147a11dfcaa1ac8a83168b699863493e183f7c0c8b12850b7d259", size = 745859, upload-time = "2025-09-22T19:50:54.497Z" }, - { url = "https://files.pythonhosted.org/packages/ed/6b/e580a7c18b485e1a5f30a32cda96b20364b0ba649d9d2baaf72f8bd21f83/ruamel.yaml.clib-0.2.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c099cafc1834d3c5dac305865d04235f7c21c167c8dd31ebc3d6bbc357e2f023", size = 770200, upload-time = "2025-09-22T19:50:55.718Z" }, - { url = "https://files.pythonhosted.org/packages/ef/44/3455eebc761dc8e8fdced90f2b0a3fa61e32ba38b50de4130e2d57db0f21/ruamel.yaml.clib-0.2.14-cp312-cp312-win32.whl", hash = "sha256:b5b0f7e294700b615a3bcf6d28b26e6da94e8eba63b079f4ec92e9ba6c0d6b54", size = 98829, upload-time = "2025-09-22T19:50:58.895Z" }, - { url = "https://files.pythonhosted.org/packages/76/ab/5121f7f3b651db93de546f8c982c241397aad0a4765d793aca1dac5eadee/ruamel.yaml.clib-0.2.14-cp312-cp312-win_amd64.whl", hash = "sha256:a37f40a859b503304dd740686359fcf541d6fb3ff7fc10f539af7f7150917c68", size = 115570, upload-time = "2025-09-22T19:50:57.981Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ae/e3811f05415594025e96000349d3400978adaed88d8f98d494352d9761ee/ruamel.yaml.clib-0.2.14-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:7e4f9da7e7549946e02a6122dcad00b7c1168513acb1f8a726b1aaf504a99d32", size = 269205, upload-time = "2025-09-23T14:24:15.06Z" }, - { url = "https://files.pythonhosted.org/packages/72/06/7d51f4688d6d72bb72fa74254e1593c4f5ebd0036be5b41fe39315b275e9/ruamel.yaml.clib-0.2.14-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:dd7546c851e59c06197a7c651335755e74aa383a835878ca86d2c650c07a2f85", size = 137417, upload-time = "2025-09-22T19:50:59.82Z" }, - { url = "https://files.pythonhosted.org/packages/5a/08/b4499234a420ef42960eeb05585df5cc7eb25ccb8c980490b079e6367050/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:1c1acc3a0209ea9042cc3cfc0790edd2eddd431a2ec3f8283d081e4d5018571e", size = 642558, upload-time = "2025-09-22T19:51:03.388Z" }, - { url = "https://files.pythonhosted.org/packages/b6/ba/1975a27dedf1c4c33306ee67c948121be8710b19387aada29e2f139c43ee/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2070bf0ad1540d5c77a664de07ebcc45eebd1ddcab71a7a06f26936920692beb", size = 744087, upload-time = "2025-09-22T19:51:00.897Z" }, - { url = "https://files.pythonhosted.org/packages/20/15/8a19a13d27f3bd09fa18813add8380a29115a47b553845f08802959acbce/ruamel.yaml.clib-0.2.14-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bd8fe07f49c170e09d76773fb86ad9135e0beee44f36e1576a201b0676d3d1d", size = 699709, upload-time = "2025-09-22T19:51:02.075Z" }, - { url = "https://files.pythonhosted.org/packages/19/ee/8d6146a079ad21e534b5083c9ee4a4c8bec42f79cf87594b60978286b39a/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ff86876889ea478b1381089e55cf9e345707b312beda4986f823e1d95e8c0f59", size = 708926, upload-time = "2025-09-23T18:42:51.707Z" }, - { url = "https://files.pythonhosted.org/packages/a9/f5/426b714abdc222392e68f3b8ad323930d05a214a27c7e7a0f06c69126401/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1f118b707eece8cf84ecbc3e3ec94d9db879d85ed608f95870d39b2d2efa5dca", size = 740202, upload-time = "2025-09-22T19:51:04.673Z" }, - { url = "https://files.pythonhosted.org/packages/3d/ac/3c5c2b27a183f4fda8a57c82211721c016bcb689a4a175865f7646db9f94/ruamel.yaml.clib-0.2.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b30110b29484adc597df6bd92a37b90e63a8c152ca8136aad100a02f8ba6d1b6", size = 765196, upload-time = "2025-09-22T19:51:05.916Z" }, - { url = "https://files.pythonhosted.org/packages/92/2e/06f56a71fd55021c993ed6e848c9b2e5e9cfce180a42179f0ddd28253f7c/ruamel.yaml.clib-0.2.14-cp313-cp313-win32.whl", hash = "sha256:f4e97a1cf0b7a30af9e1d9dad10a5671157b9acee790d9e26996391f49b965a2", size = 98635, upload-time = "2025-09-22T19:51:08.183Z" }, - { url = "https://files.pythonhosted.org/packages/51/79/76aba16a1689b50528224b182f71097ece338e7a4ab55e84c2e73443b78a/ruamel.yaml.clib-0.2.14-cp313-cp313-win_amd64.whl", hash = "sha256:090782b5fb9d98df96509eecdbcaffd037d47389a89492320280d52f91330d78", size = 115238, upload-time = "2025-09-22T19:51:07.081Z" }, - { url = "https://files.pythonhosted.org/packages/21/e2/a59ff65c26aaf21a24eb38df777cb9af5d87ba8fc8107c163c2da9d1e85e/ruamel.yaml.clib-0.2.14-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:7df6f6e9d0e33c7b1d435defb185095386c469109de723d514142632a7b9d07f", size = 271441, upload-time = "2025-09-23T14:24:16.498Z" }, - { url = "https://files.pythonhosted.org/packages/6b/fa/3234f913fe9a6525a7b97c6dad1f51e72b917e6872e051a5e2ffd8b16fbb/ruamel.yaml.clib-0.2.14-cp314-cp314-macosx_15_0_arm64.whl", hash = "sha256:70eda7703b8126f5e52fcf276e6c0f40b0d314674f896fc58c47b0aef2b9ae83", size = 137970, upload-time = "2025-09-22T19:51:09.472Z" }, - { url = "https://files.pythonhosted.org/packages/ef/ec/4edbf17ac2c87fa0845dd366ef8d5852b96eb58fcd65fc1ecf5fe27b4641/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a0cb71ccc6ef9ce36eecb6272c81afdc2f565950cdcec33ae8e6cd8f7fc86f27", size = 739639, upload-time = "2025-09-22T19:51:10.566Z" }, - { url = "https://files.pythonhosted.org/packages/15/18/b0e1fafe59051de9e79cdd431863b03593ecfa8341c110affad7c8121efc/ruamel.yaml.clib-0.2.14-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e7cb9ad1d525d40f7d87b6df7c0ff916a66bc52cb61b66ac1b2a16d0c1b07640", size = 764456, upload-time = "2025-09-22T19:51:11.736Z" }, - { url = "https://files.pythonhosted.org/packages/e7/cd/150fdb96b8fab27fe08d8a59fe67554568727981806e6bc2677a16081ec7/ruamel_yaml_clib-0.2.14-cp314-cp314-win32.whl", hash = "sha256:9b4104bf43ca0cd4e6f738cb86326a3b2f6eef00f417bd1e7efb7bdffe74c539", size = 102394, upload-time = "2025-11-14T21:57:36.703Z" }, - { url = "https://files.pythonhosted.org/packages/bd/e6/a3fa40084558c7e1dc9546385f22a93949c890a8b2e445b2ba43935f51da/ruamel_yaml_clib-0.2.14-cp314-cp314-win_amd64.whl", hash = "sha256:13997d7d354a9890ea1ec5937a219817464e5cc344805b37671562a401ca3008", size = 122673, upload-time = "2025-11-14T21:57:38.177Z" }, -] - [[package]] name = "send2trash" version = "1.8.3" @@ -4440,14 +4340,14 @@ wheels = [ [[package]] name = "shexjsg" -version = "0.8.2" +version = "0.9.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyjsg" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/30/c9/34224e3c8fd9d466535626e3c2f6e01f6adae3e82acaed353d42add509ec/ShExJSG-0.8.2.tar.gz", hash = "sha256:f17a629fc577fa344382bdee143cd9ff86588537f9f811f66cea6f63cdbcd0b6", size = 33550, upload-time = "2022-04-14T20:23:13.75Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/d6/6e948660a888a37a5100e7bf7109e89b249ed526df430b674da12950de17/shexjsg-0.9.0.tar.gz", hash = "sha256:750016fabdb5487b27e2e714145f3602cd3ac4eb0dd9b7d7751d0cde62c0d1d8", size = 65164, upload-time = "2026-05-04T13:34:38.537Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/6e/d23bcde21d4ef0250a74e7505d2990d429f862be65810a3b650a69def7f0/ShExJSG-0.8.2-py2.py3-none-any.whl", hash = "sha256:3b0d8432dd313bee9e1343382c5e02e9908dd941a7dd7342bf8c0200fe523766", size = 14381, upload-time = "2022-04-14T20:23:12.515Z" }, + { url = "https://files.pythonhosted.org/packages/86/72/b03ca1560615933f079ba7d291d3532ed95c2a3205911fe71d192654acaa/shexjsg-0.9.0-py3-none-any.whl", hash = "sha256:abf18db2d9895bc46740f68ae699b2ccfe08c783f6e0c038e6077293ad01c0a5", size = 15344, upload-time = "2026-05-04T13:34:36.955Z" }, ] [[package]]