diff --git a/.copier-answers.yml b/.copier-answers.yml index 40679914..09e84e2e 100644 --- a/.copier-answers.yml +++ b/.copier-answers.yml @@ -2,7 +2,7 @@ _commit: v0.4.1 _src_path: https://github.com/linkml/linkml-project-copier add_example: false -copyright_year: '2025' +copyright_year: "2025" email: robert.carroll@vumc.org full_name: Robert Carroll gh_action_docs_preview: true diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3641b7a6..c65351b2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,14 +1,13 @@ ---- # https://pre-commit.com/ + +#exclude: "^(project/|generated/|target/|docs/|src/linkml/schema/submodules/|src/common_access_model/datamodel/|tests/)" +exclude: "^(project|src/common_access_model/datamodel/|tests/)" repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v5.0.0 hooks: - id: check-toml - id: check-yaml - - id: end-of-file-fixer - - id: trailing-whitespace - args: [--markdown-linebreak-ext=md] - repo: https://github.com/adrienverge/yamllint.git rev: v1.37.0 @@ -16,12 +15,19 @@ repos: - id: yamllint args: [-c=.yamllint.yaml] - - repo: https://github.com/codespell-project/codespell - rev: v2.4.1 + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v4.0.0-alpha.8 hooks: - - id: codespell - additional_dependencies: - - tomli + - id: prettier + types_or: [yaml] + language_version: "20.11.0" + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace + args: [--markdown-linebreak-ext=md] - repo: https://github.com/crate-ci/typos rev: v1.31.1 @@ -29,17 +35,13 @@ repos: - id: typos - repo: https://github.com/astral-sh/ruff-pre-commit - # Ruff version. - rev: v0.11.3 + rev: v0.16.3 # Upgraded version hooks: - # Run the linter. - - id: ruff + - id: ruff-check # Works perfectly here args: [--fix, --exit-non-zero-on-fix] - # Run the formatter. - id: ruff-format - repo: https://github.com/astral-sh/uv-pre-commit - # uv version. rev: 0.6.12 hooks: - id: uv-lock diff --git a/.yamllint.yaml b/.yamllint.yaml index f44a825d..7a956cf7 100644 --- a/.yamllint.yaml +++ b/.yamllint.yaml @@ -3,10 +3,10 @@ extends: default rules: - document-start: disable # Don't check if document has a start marker (---). + document-start: disable # Don't check if document has a start marker (---). line-length: max: 80 level: warning allow-non-breakable-words: true allow-non-breakable-inline-mappings: true - new-lines: disable # Don't check for type of new line characters. + new-lines: disable # Don't check for type of new line characters. diff --git a/COLLABORATORS.md b/COLLABORATORS.md new file mode 100644 index 00000000..2c653e2e --- /dev/null +++ b/COLLABORATORS.md @@ -0,0 +1,155 @@ +## Welcome to the Common Access Model 🚀 + +This repository represents the core model, Common Access Model (CAM). In order +to allow downstream models to extend a common set of classes and their +properties, those models should adhere to use this model as a Git submodule. + +## Key Integration Guidelines + +All changes to this model should be made with the understanding that those +changes are completely valid for all or many of the downstream models. Those +changes should be made directly within this repository and not as changes to the +versions from the submodules themselves. + +Please see the following notes when integrating this model as a submodule within +one of the downtream modules: + +- Do Not Modify the Submodule from within this repository: All foundational + classes, slots, and enums live in the core submodule. Any program-specific + customizations must happen strictly in your downstream files. +- Leverage Imports: At this time, the current model imports the + common_access_model.yaml directly within the main model definition. +- Extend via Inheritance: Use the is_a or mixins keys to create program-specific + subclasses that inherit core slots while allowing you to add local attributes. +- Refine via Slot Usage: If you need to restrict or change the behavior of an + inherited core slot just for your program's classes, use the slot_usage + feature. + +## Getting Started + +If you aren't already familiar with working with submodules, there are just a +couple of key takeaways to keep in mind: + +- The submodule has been pinned to a specific git commit hash to avoid + unexpected changes the CAM creeping into downstream model interfering with + local builds, CI/CD scripts, etc. +- The submodule itself should only be updated by deliberate action with the + expectation that downstream model changes may be required to reflect incoming + updates. + +### Initializing the submodule + +Before you can actually compile the model on a new machine, you'll need to pull +the submodule's content down. A convenient just recipe has been created for +exactly that: + +```bash +just init-submodule +``` + +or, if you prefer to do it directly yourself: + +```bash +git submodule update --init --recursive +# make sure nothing is broken +just lint && just test +``` + +Subsequent calls can drop the init if you know for a fact that no other +submodules have been added. The just recipe does call the linter and runs the +linkml test as a subsequent dependency, in case there are upstream changes that +invalidate the downstream model. + +### Updating the pinned hash + +Once it has been decided that it is time to update the CAM to use the latest +version, the maintainer should run the following commands to fetch, test and +lock the new version into the downstream model's main. + +```bash +# Navigate into the submodule directory +cd src/kf_access_model/schema/common_access_model + +# Fetch and check out the desired remote target (e.g., main branch) +git fetch origin +git checkout origin/main + +# Move back to the repository root +cd - + +# Run linter and tests +just lint && just test + + +# Commit the new submodule hash pointer to this repository +git add src/kf_access_model/schema/common_access_model +git commit -m "chore: update common_access_model submodule to latest hash" +``` + +## Release Artifacts + +There are a number of artifacts which are used by various scripts including the +dbt utilities which are built via github actions during release. To trigger the +build, create releases linked to a semantic version preceded with a v (i.e. +v1.0.1). + +These artifacts include: + +- SQL Alchemy model +- dbt model yml file +- SQL Schema +- data dictionary conformant to the current FTD spec +- enumerations csv file extracted from all of the permissible values + +The last two are used by this group's dbt utilities tooling. The SQL Alchemy +model is used by a handful of other scripts. + +## Beautification + +### Code Quality & Formatting with pre-commit + +We use `pre-commit` to catch minor issues automatically before your changes +reach code review. This saves you time by automating formatting and linting +tasks, allowing code reviews to focus strictly on functionality and logic rather +than style choices. + +The hooks automatically run the following optimizations when you execute a +`git commit`: + +- **Formatting:** Standardizes Python code via **Ruff** and YAML configurations + via **Prettier** (matching the default styling behavior of editors like Zed). +- **Linting:** Analyzes code patterns and auto-fixes formatting anomalies on the + fly. +- **Checks:** Verifies structural syntax sanity for TOML/YAML layouts, removes + trailing whitespace, and forces trailing newlines. + +#### Getting Started (First-Time Setup) + +If you are setting up the repository for the first time, you don't even need to +install `pre-commit` globally on your system. You can handle everything through +**`uv`**: + +1. **Register the Git hook scripts** inside the local `.git/` directory using + `uv run`: + ```bash + uv run pre-commit install + ``` + +--- + +#### Subsequent Uses & Everyday Workflow + +Once registered, the tool seamlessly hooks into your normal Git workflow without +any manual intervention: + +- **Automatic Execution:** Every time you run `git commit`, the hooks + automatically run against your _staged changes_. `uv` will transparently + manage the tool environments in the background. +- **If a hook modifies a file (or fails):** The commit is safely aborted so you + can inspect the adjustments. Simply stage the updated files (`git add .`) and + run your `git commit` command again. +- **Manual Repository Check:** If you ever want to force formatting across the + entire repository manually without creating a commit, run: + ```bash + uv run pre-commit run --all-files + ``` diff --git a/config.yaml b/config.yaml index c0382816..ab35ac62 100644 --- a/config.yaml +++ b/config.yaml @@ -59,5 +59,4 @@ generator_args: typescript: mergeimports: true metadata: true - ... diff --git a/mkdocs.yml b/mkdocs.yml index 79be33a5..42359dd9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -25,7 +25,7 @@ watch: - src/common_access_model/schema nav: -# - Home: index.md + # - Home: index.md - Schema: elements/index.md - ER Diagram: elements/erdiagram.md - About: about.md diff --git a/src/common_access_model/_version.py b/src/common_access_model/_version.py index 786f3aaf..e2cfd55c 100644 --- a/src/common_access_model/_version.py +++ b/src/common_access_model/_version.py @@ -1,4 +1,4 @@ -from importlib.metadata import version, PackageNotFoundError +from importlib.metadata import PackageNotFoundError, version try: __version__ = version(__name__) diff --git a/src/common_access_model/datamodel/__init__.py b/src/common_access_model/datamodel/__init__.py index 7a6f89fa..616a5d08 100644 --- a/src/common_access_model/datamodel/__init__.py +++ b/src/common_access_model/datamodel/__init__.py @@ -1,4 +1,5 @@ from pathlib import Path + from .common_access_model import * THIS_PATH = Path(__file__).parent diff --git a/src/common_access_model/datamodel/include_access_model.py b/src/common_access_model/datamodel/include_access_model.py index 418af815..f2228cba 100644 --- a/src/common_access_model/datamodel/include_access_model.py +++ b/src/common_access_model/datamodel/include_access_model.py @@ -6,85 +6,61 @@ # description: LinkML Schema for the Common Access Model # license: MIT -import dataclasses -import re from dataclasses import dataclass -from datetime import ( - date, - datetime, - time -) -from typing import ( - Any, - ClassVar, - Dict, - List, - Optional, - Union -) +from typing import Any, ClassVar, Optional, Union -from jsonasobj2 import ( - JsonObj, - as_dict -) -from linkml_runtime.linkml_model.meta import ( - EnumDefinition, - PermissibleValue, - PvFormulaOptions -) +from jsonasobj2 import as_dict +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.formatutils import ( - camelcase, - sfx, - underscore -) -from linkml_runtime.utils.metamodelcore import ( - bnode, - empty_dict, - empty_list -) +from linkml_runtime.utils.metamodelcore import URI, URIorCURIE, empty_list from linkml_runtime.utils.slot import Slot -from linkml_runtime.utils.yamlutils import ( - YAMLRoot, - extended_float, - extended_int, - extended_str -) -from rdflib import ( - Namespace, - URIRef -) - -from linkml_runtime.linkml_model.types import Float, Integer, String, Uri, Uriorcurie -from linkml_runtime.utils.metamodelcore import URI, URIorCURIE +from linkml_runtime.utils.yamlutils import YAMLRoot, extended_str +from rdflib import URIRef metamodel_version = "1.7.0" version = None # Namespaces -DUO = CurieNamespace('DUO', 'http://purl.obolibrary.org/obo/DUO_') -HP = CurieNamespace('HP', 'http://purl.obolibrary.org/obo/HP_') -MONDO = CurieNamespace('MONDO', 'http://purl.obolibrary.org/obo/MONDO_') -NCIT = CurieNamespace('NCIT', 'http://purl.obolibrary.org/obo/NCIT_') -PATO = CurieNamespace('PATO', 'http://purl.obolibrary.org/obo/PATO_') -CAM = CurieNamespace('cam', 'https://includedcc.org/common-access-model/') -CDC_RACE_ETH = CurieNamespace('cdc_race_eth', 'urn:oid:2.16.840.1.113883.6.238/') -HL7_NULL = CurieNamespace('hl7_null', 'http://terminology.hl7.org/CodeSystem/v3-NullFlavor/') -IG2_BIOSPECIMEN_AVAILABILITY = CurieNamespace('ig2_biospecimen_availability', 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/biospecimen-availability/') -IG2DAC = CurieNamespace('ig2dac', 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-code/') -IG2DAT = CurieNamespace('ig2dat', 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-type/') -IG_DOB_METHOD = CurieNamespace('ig_dob_method', 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-date-of-birth-method/') -IGCONDTYPE = CurieNamespace('igcondtype', 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/condition-type/') -LINKML = CurieNamespace('linkml', 'https://w3id.org/linkml/') -MESH = CurieNamespace('mesh', 'http://id.nlm.nih.gov/mesh/') -SCHEMA = CurieNamespace('schema', 'http://schema.org/') -SNOMED_CT = CurieNamespace('snomed_ct', 'http://snomed.info/id/') +DUO = CurieNamespace("DUO", "http://purl.obolibrary.org/obo/DUO_") +HP = CurieNamespace("HP", "http://purl.obolibrary.org/obo/HP_") +MONDO = CurieNamespace("MONDO", "http://purl.obolibrary.org/obo/MONDO_") +NCIT = CurieNamespace("NCIT", "http://purl.obolibrary.org/obo/NCIT_") +PATO = CurieNamespace("PATO", "http://purl.obolibrary.org/obo/PATO_") +CAM = CurieNamespace("cam", "https://includedcc.org/common-access-model/") +CDC_RACE_ETH = CurieNamespace("cdc_race_eth", "urn:oid:2.16.840.1.113883.6.238/") +HL7_NULL = CurieNamespace( + "hl7_null", "http://terminology.hl7.org/CodeSystem/v3-NullFlavor/" +) +IG2_BIOSPECIMEN_AVAILABILITY = CurieNamespace( + "ig2_biospecimen_availability", + "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/biospecimen-availability/", +) +IG2DAC = CurieNamespace( + "ig2dac", + "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-code/", +) +IG2DAT = CurieNamespace( + "ig2dat", + "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-type/", +) +IG_DOB_METHOD = CurieNamespace( + "ig_dob_method", + "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-date-of-birth-method/", +) +IGCONDTYPE = CurieNamespace( + "igcondtype", "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/condition-type/" +) +LINKML = CurieNamespace("linkml", "https://w3id.org/linkml/") +MESH = CurieNamespace("mesh", "http://id.nlm.nih.gov/mesh/") +SCHEMA = CurieNamespace("schema", "http://schema.org/") +SNOMED_CT = CurieNamespace("snomed_ct", "http://snomed.info/id/") DEFAULT_ = CAM # Types + # Class references class AccessPolicyAccessPolicyId(extended_str): pass @@ -171,6 +147,7 @@ class Record(YAMLRoot): """ One row / entity within the database """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Record"] @@ -178,16 +155,24 @@ class Record(YAMLRoot): class_name: ClassVar[str] = "Record" class_model_uri: ClassVar[URIRef] = CAM.Record - external_id: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list() + external_id: Optional[ + Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] + ] = empty_list() access_policy_id: Optional[Union[str, AccessPolicyAccessPolicyId]] = None study_id: Optional[Union[str, StudyStudyId]] = None def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.external_id, list): - self.external_id = [self.external_id] if self.external_id is not None else [] - self.external_id = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.external_id] - - if self.access_policy_id is not None and not isinstance(self.access_policy_id, AccessPolicyAccessPolicyId): + self.external_id = ( + [self.external_id] if self.external_id is not None else [] + ) + self.external_id = [ + v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.external_id + ] + + if self.access_policy_id is not None and not isinstance( + self.access_policy_id, AccessPolicyAccessPolicyId + ): self.access_policy_id = AccessPolicyAccessPolicyId(self.access_policy_id) if self.study_id is not None and not isinstance(self.study_id, StudyStudyId): @@ -201,6 +186,7 @@ class AccessPolicy(YAMLRoot): """ The access policy that describes the controls around use of data """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["AccessPolicy"] @@ -222,13 +208,19 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.access_policy_id, AccessPolicyAccessPolicyId): self.access_policy_id = AccessPolicyAccessPolicyId(self.access_policy_id) - if self.data_use_accession is not None and not isinstance(self.data_use_accession, URIorCURIE): + if self.data_use_accession is not None and not isinstance( + self.data_use_accession, URIorCURIE + ): self.data_use_accession = URIorCURIE(self.data_use_accession) - if self.disease_limitation is not None and not isinstance(self.disease_limitation, str): + if self.disease_limitation is not None and not isinstance( + self.disease_limitation, str + ): self.disease_limitation = str(self.disease_limitation) - if self.access_description is not None and not isinstance(self.access_description, str): + if self.access_description is not None and not isinstance( + self.access_description, str + ): self.access_description = str(self.access_description) if self.website is not None and not isinstance(self.website, URI): @@ -242,6 +234,7 @@ class Study(Record): """ Study Metadata """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Study"] @@ -253,14 +246,20 @@ class Study(Record): study_title: str = None study_code: str = None program: Union[Union[str, "EnumProgram"], list[Union[str, "EnumProgram"]]] = None - principal_investigator: Union[Union[dict, "Investigator"], list[Union[dict, "Investigator"]]] = None - contact: Union[Union[dict, "Investigator"], list[Union[dict, "Investigator"]]] = None + principal_investigator: Union[ + Union[dict, "Investigator"], list[Union[dict, "Investigator"]] + ] = None + contact: Union[Union[dict, "Investigator"], list[Union[dict, "Investigator"]]] = ( + None + ) study_description: str = None parent_study: Optional[Union[str, StudyStudyId]] = None study_short_name: Optional[str] = None funding_source: Optional[Union[str, list[str]]] = empty_list() website: Optional[Union[str, URI]] = None - publication: Optional[Union[Union[dict, "Publication"], list[Union[dict, "Publication"]]]] = empty_list() + publication: Optional[ + Union[Union[dict, "Publication"], list[Union[dict, "Publication"]]] + ] = empty_list() acknowledgments: Optional[str] = None citation_statement: Optional[str] = None do_id: Optional[Union[str, DOIDoId]] = None @@ -285,46 +284,75 @@ def __post_init__(self, *_: str, **kwargs: Any): self.MissingRequiredField("program") if not isinstance(self.program, list): self.program = [self.program] if self.program is not None else [] - self.program = [v if isinstance(v, EnumProgram) else EnumProgram(v) for v in self.program] + self.program = [ + v if isinstance(v, EnumProgram) else EnumProgram(v) for v in self.program + ] if self._is_empty(self.principal_investigator): self.MissingRequiredField("principal_investigator") if not isinstance(self.principal_investigator, list): - self.principal_investigator = [self.principal_investigator] if self.principal_investigator is not None else [] - self.principal_investigator = [v if isinstance(v, Investigator) else Investigator(**as_dict(v)) for v in self.principal_investigator] + self.principal_investigator = ( + [self.principal_investigator] + if self.principal_investigator is not None + else [] + ) + self.principal_investigator = [ + v if isinstance(v, Investigator) else Investigator(**as_dict(v)) + for v in self.principal_investigator + ] if self._is_empty(self.contact): self.MissingRequiredField("contact") if not isinstance(self.contact, list): self.contact = [self.contact] if self.contact is not None else [] - self.contact = [v if isinstance(v, Investigator) else Investigator(**as_dict(v)) for v in self.contact] + self.contact = [ + v if isinstance(v, Investigator) else Investigator(**as_dict(v)) + for v in self.contact + ] if self._is_empty(self.study_description): self.MissingRequiredField("study_description") if not isinstance(self.study_description, str): self.study_description = str(self.study_description) - if self.parent_study is not None and not isinstance(self.parent_study, StudyStudyId): + if self.parent_study is not None and not isinstance( + self.parent_study, StudyStudyId + ): self.parent_study = StudyStudyId(self.parent_study) - if self.study_short_name is not None and not isinstance(self.study_short_name, str): + if self.study_short_name is not None and not isinstance( + self.study_short_name, str + ): self.study_short_name = str(self.study_short_name) if not isinstance(self.funding_source, list): - self.funding_source = [self.funding_source] if self.funding_source is not None else [] - self.funding_source = [v if isinstance(v, str) else str(v) for v in self.funding_source] + self.funding_source = ( + [self.funding_source] if self.funding_source is not None else [] + ) + self.funding_source = [ + v if isinstance(v, str) else str(v) for v in self.funding_source + ] if self.website is not None and not isinstance(self.website, URI): self.website = URI(self.website) if not isinstance(self.publication, list): - self.publication = [self.publication] if self.publication is not None else [] - self.publication = [v if isinstance(v, Publication) else Publication(**as_dict(v)) for v in self.publication] - - if self.acknowledgments is not None and not isinstance(self.acknowledgments, str): + self.publication = ( + [self.publication] if self.publication is not None else [] + ) + self.publication = [ + v if isinstance(v, Publication) else Publication(**as_dict(v)) + for v in self.publication + ] + + if self.acknowledgments is not None and not isinstance( + self.acknowledgments, str + ): self.acknowledgments = str(self.acknowledgments) - if self.citation_statement is not None and not isinstance(self.citation_statement, str): + if self.citation_statement is not None and not isinstance( + self.citation_statement, str + ): self.citation_statement = str(self.citation_statement) if self.do_id is not None and not isinstance(self.do_id, DOIDoId): @@ -338,6 +366,7 @@ class StudyMetadata(Record): """ Additional features about studies that may not apply to all studies """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["StudyMetadata"] @@ -346,11 +375,23 @@ class StudyMetadata(Record): class_model_uri: ClassVar[URIRef] = CAM.StudyMetadata study_id: Union[str, StudyMetadataStudyId] = None - participant_lifespan_stage: Union[Union[str, "EnumParticipantLifespanStage"], list[Union[str, "EnumParticipantLifespanStage"]]] = None - study_design: Union[Union[str, "EnumStudyDesign"], list[Union[str, "EnumStudyDesign"]]] = None - clinical_data_source_type: Union[Union[str, "EnumClinicalDataSourceType"], list[Union[str, "EnumClinicalDataSourceType"]]] = None - data_category: Union[Union[str, "EnumDataCategory"], list[Union[str, "EnumDataCategory"]]] = None - research_domain: Union[Union[str, "EnumResearchDomain"], list[Union[str, "EnumResearchDomain"]]] = None + participant_lifespan_stage: Union[ + Union[str, "EnumParticipantLifespanStage"], + list[Union[str, "EnumParticipantLifespanStage"]], + ] = None + study_design: Union[ + Union[str, "EnumStudyDesign"], list[Union[str, "EnumStudyDesign"]] + ] = None + clinical_data_source_type: Union[ + Union[str, "EnumClinicalDataSourceType"], + list[Union[str, "EnumClinicalDataSourceType"]], + ] = None + data_category: Union[ + Union[str, "EnumDataCategory"], list[Union[str, "EnumDataCategory"]] + ] = None + research_domain: Union[ + Union[str, "EnumResearchDomain"], list[Union[str, "EnumResearchDomain"]] + ] = None expected_number_of_participants: int = None actual_number_of_participants: int = None selection_criteria: Optional[str] = None @@ -365,47 +406,86 @@ def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.participant_lifespan_stage): self.MissingRequiredField("participant_lifespan_stage") if not isinstance(self.participant_lifespan_stage, list): - self.participant_lifespan_stage = [self.participant_lifespan_stage] if self.participant_lifespan_stage is not None else [] - self.participant_lifespan_stage = [v if isinstance(v, EnumParticipantLifespanStage) else EnumParticipantLifespanStage(v) for v in self.participant_lifespan_stage] + self.participant_lifespan_stage = ( + [self.participant_lifespan_stage] + if self.participant_lifespan_stage is not None + else [] + ) + self.participant_lifespan_stage = [ + v + if isinstance(v, EnumParticipantLifespanStage) + else EnumParticipantLifespanStage(v) + for v in self.participant_lifespan_stage + ] if self._is_empty(self.study_design): self.MissingRequiredField("study_design") if not isinstance(self.study_design, list): - self.study_design = [self.study_design] if self.study_design is not None else [] - self.study_design = [v if isinstance(v, EnumStudyDesign) else EnumStudyDesign(v) for v in self.study_design] + self.study_design = ( + [self.study_design] if self.study_design is not None else [] + ) + self.study_design = [ + v if isinstance(v, EnumStudyDesign) else EnumStudyDesign(v) + for v in self.study_design + ] if self._is_empty(self.clinical_data_source_type): self.MissingRequiredField("clinical_data_source_type") if not isinstance(self.clinical_data_source_type, list): - self.clinical_data_source_type = [self.clinical_data_source_type] if self.clinical_data_source_type is not None else [] - self.clinical_data_source_type = [v if isinstance(v, EnumClinicalDataSourceType) else EnumClinicalDataSourceType(v) for v in self.clinical_data_source_type] + self.clinical_data_source_type = ( + [self.clinical_data_source_type] + if self.clinical_data_source_type is not None + else [] + ) + self.clinical_data_source_type = [ + v + if isinstance(v, EnumClinicalDataSourceType) + else EnumClinicalDataSourceType(v) + for v in self.clinical_data_source_type + ] if self._is_empty(self.data_category): self.MissingRequiredField("data_category") if not isinstance(self.data_category, list): - self.data_category = [self.data_category] if self.data_category is not None else [] - self.data_category = [v if isinstance(v, EnumDataCategory) else EnumDataCategory(v) for v in self.data_category] + self.data_category = ( + [self.data_category] if self.data_category is not None else [] + ) + self.data_category = [ + v if isinstance(v, EnumDataCategory) else EnumDataCategory(v) + for v in self.data_category + ] if self._is_empty(self.research_domain): self.MissingRequiredField("research_domain") if not isinstance(self.research_domain, list): - self.research_domain = [self.research_domain] if self.research_domain is not None else [] - self.research_domain = [v if isinstance(v, EnumResearchDomain) else EnumResearchDomain(v) for v in self.research_domain] + self.research_domain = ( + [self.research_domain] if self.research_domain is not None else [] + ) + self.research_domain = [ + v if isinstance(v, EnumResearchDomain) else EnumResearchDomain(v) + for v in self.research_domain + ] if self._is_empty(self.expected_number_of_participants): self.MissingRequiredField("expected_number_of_participants") if not isinstance(self.expected_number_of_participants, int): - self.expected_number_of_participants = int(self.expected_number_of_participants) + self.expected_number_of_participants = int( + self.expected_number_of_participants + ) if self._is_empty(self.actual_number_of_participants): self.MissingRequiredField("actual_number_of_participants") if not isinstance(self.actual_number_of_participants, int): self.actual_number_of_participants = int(self.actual_number_of_participants) - if self.selection_criteria is not None and not isinstance(self.selection_criteria, str): + if self.selection_criteria is not None and not isinstance( + self.selection_criteria, str + ): self.selection_criteria = str(self.selection_criteria) - if self.vbr_id is not None and not isinstance(self.vbr_id, VirtualBiorepositoryVbrId): + if self.vbr_id is not None and not isinstance( + self.vbr_id, VirtualBiorepositoryVbrId + ): self.vbr_id = VirtualBiorepositoryVbrId(self.vbr_id) super().__post_init__(**kwargs) @@ -416,6 +496,7 @@ class VirtualBiorepository(Record): """ An organization that can provide access to specimen for further analysis. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["VirtualBiorepository"] @@ -424,7 +505,9 @@ class VirtualBiorepository(Record): class_model_uri: ClassVar[URIRef] = CAM.VirtualBiorepository vbr_id: Union[str, VirtualBiorepositoryVbrId] = None - contact: Union[Union[dict, "Investigator"], list[Union[dict, "Investigator"]]] = None + contact: Union[Union[dict, "Investigator"], list[Union[dict, "Investigator"]]] = ( + None + ) name: Optional[str] = None institution: Optional[str] = None website: Optional[Union[str, URI]] = None @@ -440,7 +523,10 @@ def __post_init__(self, *_: str, **kwargs: Any): self.MissingRequiredField("contact") if not isinstance(self.contact, list): self.contact = [self.contact] if self.contact is not None else [] - self.contact = [v if isinstance(v, Investigator) else Investigator(**as_dict(v)) for v in self.contact] + self.contact = [ + v if isinstance(v, Investigator) else Investigator(**as_dict(v)) + for v in self.contact + ] if self.name is not None and not isinstance(self.name, str): self.name = str(self.name) @@ -462,6 +548,7 @@ class DOI(Record): """ A DOI is a permanent reference with metadata about a digital object. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["DOI"] @@ -478,7 +565,9 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.do_id, DOIDoId): self.do_id = DOIDoId(self.do_id) - if self.bibliographic_reference is not None and not isinstance(self.bibliographic_reference, str): + if self.bibliographic_reference is not None and not isinstance( + self.bibliographic_reference, str + ): self.bibliographic_reference = str(self.bibliographic_reference) super().__post_init__(**kwargs) @@ -489,6 +578,7 @@ class Investigator(Record): """ An individual who made contributions to the collection, analysis, or sharing of data. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Investigator"] @@ -508,7 +598,9 @@ def __post_init__(self, *_: str, **kwargs: Any): if self.institution is not None and not isinstance(self.institution, str): self.institution = str(self.institution) - if self.investigator_title is not None and not isinstance(self.investigator_title, str): + if self.investigator_title is not None and not isinstance( + self.investigator_title, str + ): self.investigator_title = str(self.investigator_title) if self.email is not None and not isinstance(self.email, str): @@ -522,6 +614,7 @@ class Publication(Record): """ Information about a specific publication. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Publication"] @@ -533,7 +626,9 @@ class Publication(Record): website: Optional[Union[str, URI]] = None def __post_init__(self, *_: str, **kwargs: Any): - if self.bibliographic_reference is not None and not isinstance(self.bibliographic_reference, str): + if self.bibliographic_reference is not None and not isinstance( + self.bibliographic_reference, str + ): self.bibliographic_reference = str(self.bibliographic_reference) if self.website is not None and not isinstance(self.website, URI): @@ -548,6 +643,7 @@ class Subject(Record): This entity is the subject about which data or references are recorded. This includes the idea of a human participant in a study, a cell line, an animal model, or any other similar entity. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Subject"] @@ -570,7 +666,9 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.subject_type, EnumSubjectType): self.subject_type = EnumSubjectType(self.subject_type) - if self.organism_type is not None and not isinstance(self.organism_type, URIorCURIE): + if self.organism_type is not None and not isinstance( + self.organism_type, URIorCURIE + ): self.organism_type = URIorCURIE(self.organism_type) super().__post_init__(**kwargs) @@ -581,6 +679,7 @@ class Demographics(Record): """ Basic participant demographics summary """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Demographics"] @@ -617,10 +716,14 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.ethnicity, EnumEthnicity): self.ethnicity = EnumEthnicity(self.ethnicity) - if self.age_at_last_vital_status is not None and not isinstance(self.age_at_last_vital_status, int): + if self.age_at_last_vital_status is not None and not isinstance( + self.age_at_last_vital_status, int + ): self.age_at_last_vital_status = int(self.age_at_last_vital_status) - if self.vital_status is not None and not isinstance(self.vital_status, EnumVitalStatus): + if self.vital_status is not None and not isinstance( + self.vital_status, EnumVitalStatus + ): self.vital_status = EnumVitalStatus(self.vital_status) super().__post_init__(**kwargs) @@ -631,6 +734,7 @@ class IncludeParticipant(Demographics): """ Information specific to INCLUDE participants """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["IncludeParticipant"] @@ -654,9 +758,13 @@ def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.down_syndrome_status): self.MissingRequiredField("down_syndrome_status") if not isinstance(self.down_syndrome_status, EnumDownSyndromeStatus): - self.down_syndrome_status = EnumDownSyndromeStatus(self.down_syndrome_status) + self.down_syndrome_status = EnumDownSyndromeStatus( + self.down_syndrome_status + ) - if self.age_at_first_engagement is not None and not isinstance(self.age_at_first_engagement, int): + if self.age_at_first_engagement is not None and not isinstance( + self.age_at_first_engagement, int + ): self.age_at_first_engagement = int(self.age_at_first_engagement) super().__post_init__(**kwargs) @@ -667,6 +775,7 @@ class Family(Record): """ A group of individuals of some relation who are grouped together in a study. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Family"] @@ -686,16 +795,24 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.family_id, FamilyFamilyId): self.family_id = FamilyFamilyId(self.family_id) - if self.family_type is not None and not isinstance(self.family_type, EnumFamilyType): + if self.family_type is not None and not isinstance( + self.family_type, EnumFamilyType + ): self.family_type = EnumFamilyType(self.family_type) - if self.family_description is not None and not isinstance(self.family_description, str): + if self.family_description is not None and not isinstance( + self.family_description, str + ): self.family_description = str(self.family_description) - if self.consanguinity is not None and not isinstance(self.consanguinity, EnumConsanguinityAssertion): + if self.consanguinity is not None and not isinstance( + self.consanguinity, EnumConsanguinityAssertion + ): self.consanguinity = EnumConsanguinityAssertion(self.consanguinity) - if self.family_study_focus is not None and not isinstance(self.family_study_focus, URIorCURIE): + if self.family_study_focus is not None and not isinstance( + self.family_study_focus, URIorCURIE + ): self.family_study_focus = URIorCURIE(self.family_study_focus) super().__post_init__(**kwargs) @@ -707,6 +824,7 @@ class FamilyRelationship(Record): A relationship between two Subjects. Directed as follows """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["FamilyRelationship"] @@ -722,8 +840,12 @@ class FamilyRelationship(Record): def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.family_relationship_id): self.MissingRequiredField("family_relationship_id") - if not isinstance(self.family_relationship_id, FamilyRelationshipFamilyRelationshipId): - self.family_relationship_id = FamilyRelationshipFamilyRelationshipId(self.family_relationship_id) + if not isinstance( + self.family_relationship_id, FamilyRelationshipFamilyRelationshipId + ): + self.family_relationship_id = FamilyRelationshipFamilyRelationshipId( + self.family_relationship_id + ) if self._is_empty(self.family_member_id): self.MissingRequiredField("family_member_id") @@ -748,6 +870,7 @@ class FamilyMember(Record): """ Designates a Subject as a member of a family with a specified role. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["FamilyMember"] @@ -770,7 +893,9 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.subject_id, SubjectSubjectId): self.subject_id = SubjectSubjectId(self.subject_id) - if self.family_role is not None and not isinstance(self.family_role, URIorCURIE): + if self.family_role is not None and not isinstance( + self.family_role, URIorCURIE + ): self.family_role = URIorCURIE(self.family_role) super().__post_init__(**kwargs) @@ -781,6 +906,7 @@ class SubjectAssertion(Record): """ Assertion about a particular Subject. May include Conditions, Measurements, etc. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["SubjectAssertion"] @@ -795,9 +921,13 @@ class SubjectAssertion(Record): age_at_assertion: Optional[int] = None age_at_event: Optional[int] = None age_at_resolution: Optional[int] = None - concept: Optional[Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]]] = empty_list() + concept: Optional[ + Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]] + ] = empty_list() concept_source: Optional[str] = None - value_concept: Optional[Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]]] = empty_list() + value_concept: Optional[ + Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]] + ] = empty_list() value_number: Optional[float] = None value_source: Optional[str] = None value_unit: Optional[Union[str, ConceptConceptCurie]] = None @@ -809,34 +939,54 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.assertion_id, SubjectAssertionAssertionId): self.assertion_id = SubjectAssertionAssertionId(self.assertion_id) - if self.subject_id is not None and not isinstance(self.subject_id, SubjectSubjectId): + if self.subject_id is not None and not isinstance( + self.subject_id, SubjectSubjectId + ): self.subject_id = SubjectSubjectId(self.subject_id) - if self.encounter_id is not None and not isinstance(self.encounter_id, EncounterEncounterId): + if self.encounter_id is not None and not isinstance( + self.encounter_id, EncounterEncounterId + ): self.encounter_id = EncounterEncounterId(self.encounter_id) - if self.assertion_provenance is not None and not isinstance(self.assertion_provenance, EnumAssertionProvenance): - self.assertion_provenance = EnumAssertionProvenance(self.assertion_provenance) + if self.assertion_provenance is not None and not isinstance( + self.assertion_provenance, EnumAssertionProvenance + ): + self.assertion_provenance = EnumAssertionProvenance( + self.assertion_provenance + ) - if self.age_at_assertion is not None and not isinstance(self.age_at_assertion, int): + if self.age_at_assertion is not None and not isinstance( + self.age_at_assertion, int + ): self.age_at_assertion = int(self.age_at_assertion) if self.age_at_event is not None and not isinstance(self.age_at_event, int): self.age_at_event = int(self.age_at_event) - if self.age_at_resolution is not None and not isinstance(self.age_at_resolution, int): + if self.age_at_resolution is not None and not isinstance( + self.age_at_resolution, int + ): self.age_at_resolution = int(self.age_at_resolution) if not isinstance(self.concept, list): self.concept = [self.concept] if self.concept is not None else [] - self.concept = [v if isinstance(v, ConceptConceptCurie) else ConceptConceptCurie(v) for v in self.concept] + self.concept = [ + v if isinstance(v, ConceptConceptCurie) else ConceptConceptCurie(v) + for v in self.concept + ] if self.concept_source is not None and not isinstance(self.concept_source, str): self.concept_source = str(self.concept_source) if not isinstance(self.value_concept, list): - self.value_concept = [self.value_concept] if self.value_concept is not None else [] - self.value_concept = [v if isinstance(v, ConceptConceptCurie) else ConceptConceptCurie(v) for v in self.value_concept] + self.value_concept = ( + [self.value_concept] if self.value_concept is not None else [] + ) + self.value_concept = [ + v if isinstance(v, ConceptConceptCurie) else ConceptConceptCurie(v) + for v in self.value_concept + ] if self.value_number is not None and not isinstance(self.value_number, float): self.value_number = float(self.value_number) @@ -844,10 +994,14 @@ def __post_init__(self, *_: str, **kwargs: Any): if self.value_source is not None and not isinstance(self.value_source, str): self.value_source = str(self.value_source) - if self.value_unit is not None and not isinstance(self.value_unit, ConceptConceptCurie): + if self.value_unit is not None and not isinstance( + self.value_unit, ConceptConceptCurie + ): self.value_unit = ConceptConceptCurie(self.value_unit) - if self.value_unit_source is not None and not isinstance(self.value_unit_source, str): + if self.value_unit_source is not None and not isinstance( + self.value_unit_source, str + ): self.value_unit_source = str(self.value_unit_source) super().__post_init__(**kwargs) @@ -858,6 +1012,7 @@ class Concept(YAMLRoot): """ A standardized concept with display information. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Concept"] @@ -885,6 +1040,7 @@ class Sample(Record): """ A functionally equivalent specimen taken from a participant or processed from such a sample. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Sample"] @@ -894,11 +1050,17 @@ class Sample(Record): sample_id: Union[str, SampleSampleId] = None sample_type: Union[str, URIorCURIE] = None - biospecimen_collection_id: Optional[Union[str, BiospecimenCollectionBiospecimenCollectionId]] = None + biospecimen_collection_id: Optional[ + Union[str, BiospecimenCollectionBiospecimenCollectionId] + ] = None parent_sample_id: Optional[Union[str, SampleSampleId]] = None - processing: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list() - availablity_status: Optional[Union[str, "EnumAvailabilityStatus"]] = None - storage_method: Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]] = empty_list() + processing: Optional[ + Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] + ] = empty_list() + availability_status: Optional[Union[str, "EnumAvailabilityStatus"]] = None + storage_method: Optional[ + Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]] + ] = empty_list() quantity_number: Optional[float] = None quantity_unit: Optional[Union[str, ConceptConceptCurie]] = None @@ -913,27 +1075,48 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.sample_type, URIorCURIE): self.sample_type = URIorCURIE(self.sample_type) - if self.biospecimen_collection_id is not None and not isinstance(self.biospecimen_collection_id, BiospecimenCollectionBiospecimenCollectionId): - self.biospecimen_collection_id = BiospecimenCollectionBiospecimenCollectionId(self.biospecimen_collection_id) - - if self.parent_sample_id is not None and not isinstance(self.parent_sample_id, SampleSampleId): + if self.biospecimen_collection_id is not None and not isinstance( + self.biospecimen_collection_id, BiospecimenCollectionBiospecimenCollectionId + ): + self.biospecimen_collection_id = ( + BiospecimenCollectionBiospecimenCollectionId( + self.biospecimen_collection_id + ) + ) + + if self.parent_sample_id is not None and not isinstance( + self.parent_sample_id, SampleSampleId + ): self.parent_sample_id = SampleSampleId(self.parent_sample_id) if not isinstance(self.processing, list): self.processing = [self.processing] if self.processing is not None else [] - self.processing = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.processing] + self.processing = [ + v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.processing + ] - if self.availablity_status is not None and not isinstance(self.availablity_status, EnumAvailabilityStatus): - self.availablity_status = EnumAvailabilityStatus(self.availablity_status) + if self.availability_status is not None and not isinstance( + self.availability_status, EnumAvailabilityStatus + ): + self.availability_status = EnumAvailabilityStatus(self.availability_status) if not isinstance(self.storage_method, list): - self.storage_method = [self.storage_method] if self.storage_method is not None else [] - self.storage_method = [v if isinstance(v, URIorCURIE) else URIorCURIE(v) for v in self.storage_method] - - if self.quantity_number is not None and not isinstance(self.quantity_number, float): + self.storage_method = ( + [self.storage_method] if self.storage_method is not None else [] + ) + self.storage_method = [ + v if isinstance(v, URIorCURIE) else URIorCURIE(v) + for v in self.storage_method + ] + + if self.quantity_number is not None and not isinstance( + self.quantity_number, float + ): self.quantity_number = float(self.quantity_number) - if self.quantity_unit is not None and not isinstance(self.quantity_unit, ConceptConceptCurie): + if self.quantity_unit is not None and not isinstance( + self.quantity_unit, ConceptConceptCurie + ): self.quantity_unit = ConceptConceptCurie(self.quantity_unit) super().__post_init__(**kwargs) @@ -944,6 +1127,7 @@ class BiospecimenCollection(Record): """ A biospecimen collection event which yields one or more Samples. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["BiospecimenCollection"] @@ -951,7 +1135,9 @@ class BiospecimenCollection(Record): class_name: ClassVar[str] = "BiospecimenCollection" class_model_uri: ClassVar[URIRef] = CAM.BiospecimenCollection - biospecimen_collection_id: Union[str, BiospecimenCollectionBiospecimenCollectionId] = None + biospecimen_collection_id: Union[ + str, BiospecimenCollectionBiospecimenCollectionId + ] = None age_at_collection: Optional[float] = None method: Optional[Union[str, "EnumSampleCollectionMethod"]] = None site: Optional[Union[str, "EnumSite"]] = None @@ -962,13 +1148,23 @@ class BiospecimenCollection(Record): def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.biospecimen_collection_id): self.MissingRequiredField("biospecimen_collection_id") - if not isinstance(self.biospecimen_collection_id, BiospecimenCollectionBiospecimenCollectionId): - self.biospecimen_collection_id = BiospecimenCollectionBiospecimenCollectionId(self.biospecimen_collection_id) - - if self.age_at_collection is not None and not isinstance(self.age_at_collection, float): + if not isinstance( + self.biospecimen_collection_id, BiospecimenCollectionBiospecimenCollectionId + ): + self.biospecimen_collection_id = ( + BiospecimenCollectionBiospecimenCollectionId( + self.biospecimen_collection_id + ) + ) + + if self.age_at_collection is not None and not isinstance( + self.age_at_collection, float + ): self.age_at_collection = float(self.age_at_collection) - if self.encounter_id is not None and not isinstance(self.encounter_id, EncounterEncounterId): + if self.encounter_id is not None and not isinstance( + self.encounter_id, EncounterEncounterId + ): self.encounter_id = EncounterEncounterId(self.encounter_id) super().__post_init__(**kwargs) @@ -979,6 +1175,7 @@ class Aliquot(Record): """ A specific tube or amount of a biospecimen associated with a Sample. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Aliquot"] @@ -988,7 +1185,7 @@ class Aliquot(Record): aliquot_id: Union[str, AliquotAliquotId] = None sample_id: Optional[Union[str, SampleSampleId]] = None - availablity_status: Optional[Union[str, "EnumAvailabilityStatus"]] = None + availability_status: Optional[Union[str, "EnumAvailabilityStatus"]] = None quantity_number: Optional[float] = None quantity_unit: Optional[Union[str, ConceptConceptCurie]] = None concentration_number: Optional[float] = None @@ -1000,22 +1197,34 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.aliquot_id, AliquotAliquotId): self.aliquot_id = AliquotAliquotId(self.aliquot_id) - if self.sample_id is not None and not isinstance(self.sample_id, SampleSampleId): + if self.sample_id is not None and not isinstance( + self.sample_id, SampleSampleId + ): self.sample_id = SampleSampleId(self.sample_id) - if self.availablity_status is not None and not isinstance(self.availablity_status, EnumAvailabilityStatus): - self.availablity_status = EnumAvailabilityStatus(self.availablity_status) + if self.availability_status is not None and not isinstance( + self.availability_status, EnumAvailabilityStatus + ): + self.availability_status = EnumAvailabilityStatus(self.availability_status) - if self.quantity_number is not None and not isinstance(self.quantity_number, float): + if self.quantity_number is not None and not isinstance( + self.quantity_number, float + ): self.quantity_number = float(self.quantity_number) - if self.quantity_unit is not None and not isinstance(self.quantity_unit, ConceptConceptCurie): + if self.quantity_unit is not None and not isinstance( + self.quantity_unit, ConceptConceptCurie + ): self.quantity_unit = ConceptConceptCurie(self.quantity_unit) - if self.concentration_number is not None and not isinstance(self.concentration_number, float): + if self.concentration_number is not None and not isinstance( + self.concentration_number, float + ): self.concentration_number = float(self.concentration_number) - if self.concentration_unit is not None and not isinstance(self.concentration_unit, ConceptConceptCurie): + if self.concentration_unit is not None and not isinstance( + self.concentration_unit, ConceptConceptCurie + ): self.concentration_unit = ConceptConceptCurie(self.concentration_unit) super().__post_init__(**kwargs) @@ -1027,6 +1236,7 @@ class Encounter(Record): An event at which data was collected about a participant, an intervention was made, or information about a participant was recorded. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Encounter"] @@ -1036,7 +1246,9 @@ class Encounter(Record): encounter_id: Union[str, EncounterEncounterId] = None subject_id: Optional[Union[str, SubjectSubjectId]] = None - encounter_definition_id: Optional[Union[str, EncounterDefinitionEncounterDefinitionId]] = None + encounter_definition_id: Optional[ + Union[str, EncounterDefinitionEncounterDefinitionId] + ] = None age_at_event: Optional[int] = None def __post_init__(self, *_: str, **kwargs: Any): @@ -1045,11 +1257,17 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.encounter_id, EncounterEncounterId): self.encounter_id = EncounterEncounterId(self.encounter_id) - if self.subject_id is not None and not isinstance(self.subject_id, SubjectSubjectId): + if self.subject_id is not None and not isinstance( + self.subject_id, SubjectSubjectId + ): self.subject_id = SubjectSubjectId(self.subject_id) - if self.encounter_definition_id is not None and not isinstance(self.encounter_definition_id, EncounterDefinitionEncounterDefinitionId): - self.encounter_definition_id = EncounterDefinitionEncounterDefinitionId(self.encounter_definition_id) + if self.encounter_definition_id is not None and not isinstance( + self.encounter_definition_id, EncounterDefinitionEncounterDefinitionId + ): + self.encounter_definition_id = EncounterDefinitionEncounterDefinitionId( + self.encounter_definition_id + ) if self.age_at_event is not None and not isinstance(self.age_at_event, int): self.age_at_event = int(self.age_at_event) @@ -1064,6 +1282,7 @@ class EncounterDefinition(Record): intervention was made, or information about a participant was recorded. This may be something planned by a study or a type of data collection. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["EncounterDefinition"] @@ -1074,13 +1293,22 @@ class EncounterDefinition(Record): encounter_definition_id: Union[str, EncounterDefinitionEncounterDefinitionId] = None name: Optional[str] = None description: Optional[str] = None - activity_definition_id: Optional[Union[Union[str, ActivityDefinitionActivityDefinitionId], list[Union[str, ActivityDefinitionActivityDefinitionId]]]] = empty_list() + activity_definition_id: Optional[ + Union[ + Union[str, ActivityDefinitionActivityDefinitionId], + list[Union[str, ActivityDefinitionActivityDefinitionId]], + ] + ] = empty_list() def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.encounter_definition_id): self.MissingRequiredField("encounter_definition_id") - if not isinstance(self.encounter_definition_id, EncounterDefinitionEncounterDefinitionId): - self.encounter_definition_id = EncounterDefinitionEncounterDefinitionId(self.encounter_definition_id) + if not isinstance( + self.encounter_definition_id, EncounterDefinitionEncounterDefinitionId + ): + self.encounter_definition_id = EncounterDefinitionEncounterDefinitionId( + self.encounter_definition_id + ) if self.name is not None and not isinstance(self.name, str): self.name = str(self.name) @@ -1089,8 +1317,17 @@ def __post_init__(self, *_: str, **kwargs: Any): self.description = str(self.description) if not isinstance(self.activity_definition_id, list): - self.activity_definition_id = [self.activity_definition_id] if self.activity_definition_id is not None else [] - self.activity_definition_id = [v if isinstance(v, ActivityDefinitionActivityDefinitionId) else ActivityDefinitionActivityDefinitionId(v) for v in self.activity_definition_id] + self.activity_definition_id = ( + [self.activity_definition_id] + if self.activity_definition_id is not None + else [] + ) + self.activity_definition_id = [ + v + if isinstance(v, ActivityDefinitionActivityDefinitionId) + else ActivityDefinitionActivityDefinitionId(v) + for v in self.activity_definition_id + ] super().__post_init__(**kwargs) @@ -1100,6 +1337,7 @@ class ActivityDefinition(Record): """ A definition of an activity in this study, eg, a biospecimen collection, intervention, survey, or assessment. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["ActivityDefinition"] @@ -1114,8 +1352,12 @@ class ActivityDefinition(Record): def __post_init__(self, *_: str, **kwargs: Any): if self._is_empty(self.activity_definition_id): self.MissingRequiredField("activity_definition_id") - if not isinstance(self.activity_definition_id, ActivityDefinitionActivityDefinitionId): - self.activity_definition_id = ActivityDefinitionActivityDefinitionId(self.activity_definition_id) + if not isinstance( + self.activity_definition_id, ActivityDefinitionActivityDefinitionId + ): + self.activity_definition_id = ActivityDefinitionActivityDefinitionId( + self.activity_definition_id + ) if self.name is not None and not isinstance(self.name, str): self.name = str(self.name) @@ -1131,6 +1373,7 @@ class File(Record): """ File """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["File"] @@ -1139,8 +1382,12 @@ class File(Record): class_model_uri: ClassVar[URIRef] = CAM.File file_id: Union[str, FileFileId] = None - subject_id: Optional[Union[Union[str, SubjectSubjectId], list[Union[str, SubjectSubjectId]]]] = empty_list() - sample_id: Optional[Union[Union[str, SampleSampleId], list[Union[str, SampleSampleId]]]] = empty_list() + subject_id: Optional[ + Union[Union[str, SubjectSubjectId], list[Union[str, SubjectSubjectId]]] + ] = empty_list() + sample_id: Optional[ + Union[Union[str, SampleSampleId], list[Union[str, SampleSampleId]]] + ] = empty_list() filename: Optional[str] = None format: Optional[Union[str, "EnumEDAMFormats"]] = None data_category: Optional[Union[str, "EnumDataCategory"]] = None @@ -1159,25 +1406,37 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.subject_id, list): self.subject_id = [self.subject_id] if self.subject_id is not None else [] - self.subject_id = [v if isinstance(v, SubjectSubjectId) else SubjectSubjectId(v) for v in self.subject_id] + self.subject_id = [ + v if isinstance(v, SubjectSubjectId) else SubjectSubjectId(v) + for v in self.subject_id + ] if not isinstance(self.sample_id, list): self.sample_id = [self.sample_id] if self.sample_id is not None else [] - self.sample_id = [v if isinstance(v, SampleSampleId) else SampleSampleId(v) for v in self.sample_id] + self.sample_id = [ + v if isinstance(v, SampleSampleId) else SampleSampleId(v) + for v in self.sample_id + ] if self.filename is not None and not isinstance(self.filename, str): self.filename = str(self.filename) - if self.data_category is not None and not isinstance(self.data_category, EnumDataCategory): + if self.data_category is not None and not isinstance( + self.data_category, EnumDataCategory + ): self.data_category = EnumDataCategory(self.data_category) if self.size is not None and not isinstance(self.size, int): self.size = int(self.size) - if self.staging_url is not None and not isinstance(self.staging_url, URIorCURIE): + if self.staging_url is not None and not isinstance( + self.staging_url, URIorCURIE + ): self.staging_url = URIorCURIE(self.staging_url) - if self.release_url is not None and not isinstance(self.release_url, URIorCURIE): + if self.release_url is not None and not isinstance( + self.release_url, URIorCURIE + ): self.release_url = URIorCURIE(self.release_url) if self.drs_uri is not None and not isinstance(self.drs_uri, URIorCURIE): @@ -1194,6 +1453,7 @@ class FileHash(YAMLRoot): """ Type and value of a file content hash. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["FileHash"] @@ -1205,7 +1465,9 @@ class FileHash(YAMLRoot): hash_value: Optional[str] = None def __post_init__(self, *_: str, **kwargs: Any): - if self.hash_type is not None and not isinstance(self.hash_type, EnumFileHashType): + if self.hash_type is not None and not isinstance( + self.hash_type, EnumFileHashType + ): self.hash_type = EnumFileHashType(self.hash_type) if self.hash_value is not None and not isinstance(self.hash_value, str): @@ -1219,6 +1481,7 @@ class Dataset(YAMLRoot): """ Set of files grouped together for release. """ + _inherited_slots: ClassVar[list[str]] = [] class_class_uri: ClassVar[URIRef] = CAM["Dataset"] @@ -1230,8 +1493,12 @@ class Dataset(YAMLRoot): name: Optional[str] = None description: Optional[str] = None do_id: Optional[Union[str, DOIDoId]] = None - file_id: Optional[Union[Union[str, FileFileId], list[Union[str, FileFileId]]]] = empty_list() - publication: Optional[Union[Union[dict, Publication], list[Union[dict, Publication]]]] = empty_list() + file_id: Optional[Union[Union[str, FileFileId], list[Union[str, FileFileId]]]] = ( + empty_list() + ) + publication: Optional[ + Union[Union[dict, Publication], list[Union[dict, Publication]]] + ] = empty_list() data_collection_start: Optional[str] = None data_collection_end: Optional[str] = None @@ -1252,16 +1519,27 @@ def __post_init__(self, *_: str, **kwargs: Any): if not isinstance(self.file_id, list): self.file_id = [self.file_id] if self.file_id is not None else [] - self.file_id = [v if isinstance(v, FileFileId) else FileFileId(v) for v in self.file_id] + self.file_id = [ + v if isinstance(v, FileFileId) else FileFileId(v) for v in self.file_id + ] if not isinstance(self.publication, list): - self.publication = [self.publication] if self.publication is not None else [] - self.publication = [v if isinstance(v, Publication) else Publication(**as_dict(v)) for v in self.publication] - - if self.data_collection_start is not None and not isinstance(self.data_collection_start, str): + self.publication = ( + [self.publication] if self.publication is not None else [] + ) + self.publication = [ + v if isinstance(v, Publication) else Publication(**as_dict(v)) + for v in self.publication + ] + + if self.data_collection_start is not None and not isinstance( + self.data_collection_start, str + ): self.data_collection_start = str(self.data_collection_start) - if self.data_collection_end is not None and not isinstance(self.data_collection_end, str): + if self.data_collection_end is not None and not isinstance( + self.data_collection_end, str + ): self.data_collection_end = str(self.data_collection_end) super().__post_init__(**kwargs) @@ -1272,1011 +1550,1809 @@ class EnumDataUsePermission(EnumDefinitionImpl): """ Data Use Ontology (DUO) terms for data use permissions. """ + _defn = EnumDefinition( name="EnumDataUsePermission", description="Data Use Ontology (DUO) terms for data use permissions.", ) + class EnumDataUseModifier(EnumDefinitionImpl): """ Data Use Ontology (DUO) terms for data use modifiers. """ + _defn = EnumDefinition( name="EnumDataUseModifier", description="Data Use Ontology (DUO) terms for data use modifiers.", ) + class EnumProgram(EnumDefinitionImpl): """ Funding programs relevant to inform operations. """ - include = PermissibleValue( - text="include", - title="INCLUDE") - kf = PermissibleValue( - text="kf", - title="KF") - other = PermissibleValue( - text="other", - title="Other") + + include = PermissibleValue(text="include", title="INCLUDE") + kf = PermissibleValue(text="kf", title="KF") + other = PermissibleValue(text="other", title="Other") _defn = EnumDefinition( name="EnumProgram", description="Funding programs relevant to inform operations.", ) + class EnumResearchDomain(EnumDefinitionImpl): """ Domains of Research used to find studies. """ + behavior_and_behavior_mechanisms = PermissibleValue( text="behavior_and_behavior_mechanisms", title="Behavior and Behavior Mechanisms", - meaning=MESH["D001520"]) + meaning=MESH["D001520"], + ) congenital_heart_defects = PermissibleValue( text="congenital_heart_defects", title="Congenital Heart Defects", - meaning=MESH["D006330"]) + meaning=MESH["D006330"], + ) immune_system_diseases = PermissibleValue( text="immune_system_diseases", title="Immune System Diseases", - meaning=MESH["D007154"]) + meaning=MESH["D007154"], + ) hematologic_diseases = PermissibleValue( text="hematologic_diseases", title="Hematologic Diseases", - meaning=MESH["D006402"]) + meaning=MESH["D006402"], + ) neurodevelopment = PermissibleValue( - text="neurodevelopment", - title="Neurodevelopment", - meaning=MESH["D065886"]) + text="neurodevelopment", title="Neurodevelopment", meaning=MESH["D065886"] + ) sleep_wake_disorders = PermissibleValue( text="sleep_wake_disorders", title="Sleep Wake Disorders", - meaning=MESH["D012893"]) + meaning=MESH["D012893"], + ) all_co_occurring_conditions = PermissibleValue( text="all_co_occurring_conditions", title="All Co-occurring Conditions", - meaning=MESH["D013568"]) + meaning=MESH["D013568"], + ) physical_fitness = PermissibleValue( - text="physical_fitness", - title="Physical Fitness", - meaning=MESH["D010809"]) - other = PermissibleValue( - text="other", - title="Other") + text="physical_fitness", title="Physical Fitness", meaning=MESH["D010809"] + ) + other = PermissibleValue(text="other", title="Other") _defn = EnumDefinition( name="EnumResearchDomain", description="Domains of Research used to find studies.", ) + class EnumParticipantLifespanStage(EnumDefinitionImpl): """ Stages of life during which participants may be recruited. """ - fetal = PermissibleValue( - text="fetal", - title="Fetal", - description="Before birth") + + fetal = PermissibleValue(text="fetal", title="Fetal", description="Before birth") neonatal = PermissibleValue( - text="neonatal", - title="Neonatal", - description="0-28 days old") + text="neonatal", title="Neonatal", description="0-28 days old" + ) pediatric = PermissibleValue( - text="pediatric", - title="Pediatric", - description="Birth-17 years old") - adult = PermissibleValue( - text="adult", - title="Adult", - description="18+ years old") + text="pediatric", title="Pediatric", description="Birth-17 years old" + ) + adult = PermissibleValue(text="adult", title="Adult", description="18+ years old") _defn = EnumDefinition( name="EnumParticipantLifespanStage", description="Stages of life during which participants may be recruited.", ) + class EnumStudyDesign(EnumDefinitionImpl): """ Approaches for collecting data, investigating interventions, and/or analyzing data. """ - case_control = PermissibleValue( - text="case_control", - title="Case-Control") - case_set = PermissibleValue( - text="case_set", - title="Case Set") - control_set = PermissibleValue( - text="control_set", - title="Control Set") - clinical_trial = PermissibleValue( - text="clinical_trial", - title="Clinical Trial") - cross_sectional = PermissibleValue( - text="cross_sectional", - title="Cross-Sectional") + + case_control = PermissibleValue(text="case_control", title="Case-Control") + case_set = PermissibleValue(text="case_set", title="Case Set") + control_set = PermissibleValue(text="control_set", title="Control Set") + clinical_trial = PermissibleValue(text="clinical_trial", title="Clinical Trial") + cross_sectional = PermissibleValue(text="cross_sectional", title="Cross-Sectional") family_twins_trios = PermissibleValue( - text="family_twins_trios", - title="Family/Twins/Trios") - interventional = PermissibleValue( - text="interventional", - title="Interventional") - longitudinal = PermissibleValue( - text="longitudinal", - title="Longitudinal") + text="family_twins_trios", title="Family/Twins/Trios" + ) + interventional = PermissibleValue(text="interventional", title="Interventional") + longitudinal = PermissibleValue(text="longitudinal", title="Longitudinal") trial_readiness_study = PermissibleValue( - text="trial_readiness_study", - title="Trial Readiness Study") + text="trial_readiness_study", title="Trial Readiness Study" + ) tumor_vs_matched_normal = PermissibleValue( - text="tumor_vs_matched_normal", - title="Tumor vs Matched Normal") + text="tumor_vs_matched_normal", title="Tumor vs Matched Normal" + ) _defn = EnumDefinition( name="EnumStudyDesign", description="Approaches for collecting data, investigating interventions, and/or analyzing data.", ) + class EnumClinicalDataSourceType(EnumDefinitionImpl): """ Approaches to ascertain clinical information about a participant. """ + medical_record = PermissibleValue( text="medical_record", title="Medical Record", - description="Data obtained directly from medical record") + description="Data obtained directly from medical record", + ) investigator_assessment = PermissibleValue( text="investigator_assessment", title="Investigator Assessment", - description="Data obtained by examination, interview, etc. with investigator") + description="Data obtained by examination, interview, etc. with investigator", + ) participant_or_caregiver_report = PermissibleValue( text="participant_or_caregiver_report", title="Participant or Caregiver Report", - description="Data obtained from survey, questionnaire, etc. filled out by participant or caregiver") + description="Data obtained from survey, questionnaire, etc. filled out by participant or caregiver", + ) other = PermissibleValue( text="other", title="Other", - description="Data obtained from other source, such as tissue bank") - unknown = PermissibleValue( - text="unknown", - title="Unknown") + description="Data obtained from other source, such as tissue bank", + ) + unknown = PermissibleValue(text="unknown", title="Unknown") _defn = EnumDefinition( name="EnumClinicalDataSourceType", description="Approaches to ascertain clinical information about a participant.", ) + class EnumDataCategory(EnumDefinitionImpl): """ Categories of data which may be collected about participants. """ + unharmonized_demographic_clinical_data = PermissibleValue( text="unharmonized_demographic_clinical_data", - title="Unharmonized Demographic/Clinical Data") + title="Unharmonized Demographic/Clinical Data", + ) harmonized_demographic_clinical_data = PermissibleValue( text="harmonized_demographic_clinical_data", - title="Harmonized Demographic/Clinical Data") - genomics = PermissibleValue( - text="genomics", - title="Genomics") - transcriptomics = PermissibleValue( - text="transcriptomics", - title="Transcriptomics") - epigenomics = PermissibleValue( - text="epigenomics", - title="Epigenomics") - proteomics = PermissibleValue( - text="proteomics", - title="Proteomics") - metabolomics = PermissibleValue( - text="metabolomics", - title="Metabolomics") + title="Harmonized Demographic/Clinical Data", + ) + genomics = PermissibleValue(text="genomics", title="Genomics") + transcriptomics = PermissibleValue(text="transcriptomics", title="Transcriptomics") + epigenomics = PermissibleValue(text="epigenomics", title="Epigenomics") + proteomics = PermissibleValue(text="proteomics", title="Proteomics") + metabolomics = PermissibleValue(text="metabolomics", title="Metabolomics") cognitive_behavioral = PermissibleValue( - text="cognitive_behavioral", - title="Cognitive/Behavioral") + text="cognitive_behavioral", title="Cognitive/Behavioral" + ) immune_profiling = PermissibleValue( - text="immune_profiling", - title="Immune Profiling") - imaging = PermissibleValue( - text="imaging", - title="Imaging") - microbiome = PermissibleValue( - text="microbiome", - title="Microbiome") - fitness = PermissibleValue( - text="fitness", - title="Fitness") + text="immune_profiling", title="Immune Profiling" + ) + imaging = PermissibleValue(text="imaging", title="Imaging") + microbiome = PermissibleValue(text="microbiome", title="Microbiome") + fitness = PermissibleValue(text="fitness", title="Fitness") physical_activity = PermissibleValue( - text="physical_activity", - title="Physical Activity") - other = PermissibleValue( - text="other", - title="Other") - sleep_study = PermissibleValue( - text="sleep_study", - title="Sleep Study") + text="physical_activity", title="Physical Activity" + ) + other = PermissibleValue(text="other", title="Other") + sleep_study = PermissibleValue(text="sleep_study", title="Sleep Study") _defn = EnumDefinition( name="EnumDataCategory", description="Categories of data which may be collected about participants.", ) + class EnumSubjectType(EnumDefinitionImpl): """ Types of Subject entities """ + participant = PermissibleValue( text="participant", - description="Study participant with consent, assent, or waiver of consent.") + description="Study participant with consent, assent, or waiver of consent.", + ) non_participant = PermissibleValue( text="non_participant", - description="""An individual associated with a study who was not explictly consented, eg, the subject of a reported family history.""") - cell_line = PermissibleValue( - text="cell_line", - description="Cell Line") - animal_model = PermissibleValue( - text="animal_model", - description="Animal model") + description="""An individual associated with a study who was not explicitly consented, eg, the subject of a reported family history.""", + ) + cell_line = PermissibleValue(text="cell_line", description="Cell Line") + animal_model = PermissibleValue(text="animal_model", description="Animal model") group = PermissibleValue( - text="group", - description="A group of individuals or entities.") + text="group", description="A group of individuals or entities." + ) other = PermissibleValue( text="other", - description="A different entity type- ideally this will be resolved!") + description="A different entity type- ideally this will be resolved!", + ) _defn = EnumDefinition( name="EnumSubjectType", description="Types of Subject entities", ) + class EnumDownSyndromeStatus(EnumDefinitionImpl): """ Down syndrome / chromosome 21 status """ + d21 = PermissibleValue( text="d21", title="D21", description="Disomy 21 (euploid)", - meaning=PATO["0001393"]) + meaning=PATO["0001393"], + ) t21 = PermissibleValue( text="t21", title="T21", description="Trisomy 21 (Down syndrome)", - meaning=MONDO["0008608"]) + meaning=MONDO["0008608"], + ) _defn = EnumDefinition( name="EnumDownSyndromeStatus", description="Down syndrome / chromosome 21 status", ) + class EnumSex(EnumDefinitionImpl): """ Subject Sex """ - female = PermissibleValue( - text="female", - title="Female", - meaning=NCIT["C16576"]) - male = PermissibleValue( - text="male", - title="Male", - meaning=NCIT["C20197"]) - other = PermissibleValue( - text="other", - title="Other", - meaning=NCIT["C17649"]) - unknown = PermissibleValue( - text="unknown", - title="Unknown", - meaning=NCIT["C17998"]) + + female = PermissibleValue(text="female", title="Female", meaning=NCIT["C16576"]) + male = PermissibleValue(text="male", title="Male", meaning=NCIT["C20197"]) + other = PermissibleValue(text="other", title="Other", meaning=NCIT["C17649"]) + unknown = PermissibleValue(text="unknown", title="Unknown", meaning=NCIT["C17998"]) _defn = EnumDefinition( name="EnumSex", description="Subject Sex", ) + class EnumRace(EnumDefinitionImpl): """ Participant Race """ + american_indian_or_alaska_native = PermissibleValue( text="american_indian_or_alaska_native", title="American Indian or Alaska Native", - meaning=NCIT["C41259"]) - asian = PermissibleValue( - text="asian", - title="Asian", - meaning=NCIT["C41260"]) + meaning=NCIT["C41259"], + ) + asian = PermissibleValue(text="asian", title="Asian", meaning=NCIT["C41260"]) black_or_african_american = PermissibleValue( text="black_or_african_american", title="Black or African American", - meaning=NCIT["C16352"]) + meaning=NCIT["C16352"], + ) more_than_one_race = PermissibleValue( - text="more_than_one_race", - title="More than one race", - meaning=NCIT["C67109"]) + text="more_than_one_race", title="More than one race", meaning=NCIT["C67109"] + ) native_hawaiian_or_other_pacific_islander = PermissibleValue( text="native_hawaiian_or_other_pacific_islander", title="Native Hawaiian or Other Pacific Islander", - meaning=NCIT["C41219"]) - other = PermissibleValue( - text="other", - title="Other", - meaning=NCIT["C17649"]) - white = PermissibleValue( - text="white", - title="White", - meaning=NCIT["C41261"]) + meaning=NCIT["C41219"], + ) + other = PermissibleValue(text="other", title="Other", meaning=NCIT["C17649"]) + white = PermissibleValue(text="white", title="White", meaning=NCIT["C41261"]) prefer_not_to_answer = PermissibleValue( text="prefer_not_to_answer", title="Prefer not to answer", - meaning=NCIT["C132222"]) - unknown = PermissibleValue( - text="unknown", - title="Unknown", - meaning=NCIT["C17998"]) + meaning=NCIT["C132222"], + ) + unknown = PermissibleValue(text="unknown", title="Unknown", meaning=NCIT["C17998"]) east_asian = PermissibleValue( text="east_asian", title="East Asian", description="UK only; do not use for US data", - meaning=NCIT["C161419"]) + meaning=NCIT["C161419"], + ) latin_american = PermissibleValue( text="latin_american", title="Latin American", description="UK only; do not use for US data", - meaning=NCIT["C126531"]) + meaning=NCIT["C126531"], + ) middle_eastern_or_north_african = PermissibleValue( text="middle_eastern_or_north_african", title="Middle Eastern or North African", description="UK only; do not use for US data", - meaning=NCIT["C43866"]) + meaning=NCIT["C43866"], + ) south_asian = PermissibleValue( text="south_asian", title="South Asian", description="UK only; do not use for US data", - meaning=NCIT["C41263"]) + meaning=NCIT["C41263"], + ) _defn = EnumDefinition( name="EnumRace", description="Participant Race", ) + class EnumEthnicity(EnumDefinitionImpl): """ Participant ethnicity, specific to Hispanic or Latino. """ + hispanic_or_latino = PermissibleValue( - text="hispanic_or_latino", - title="Hispanic or Latino", - meaning=NCIT["C17459"]) + text="hispanic_or_latino", title="Hispanic or Latino", meaning=NCIT["C17459"] + ) not_hispanic_or_latino = PermissibleValue( text="not_hispanic_or_latino", title="Not Hispanic or Latino", - meaning=NCIT["C41222"]) + meaning=NCIT["C41222"], + ) prefer_not_to_answer = PermissibleValue( text="prefer_not_to_answer", title="Prefer not to answer", - meaning=NCIT["C132222"]) - unknown = PermissibleValue( - text="unknown", - title="Unknown", - meaning=NCIT["C17998"]) + meaning=NCIT["C132222"], + ) + unknown = PermissibleValue(text="unknown", title="Unknown", meaning=NCIT["C17998"]) _defn = EnumDefinition( name="EnumEthnicity", description="Participant ethnicity, specific to Hispanic or Latino.", ) + class EnumVitalStatus(EnumDefinitionImpl): """ Descriptions of a Subject's vital status """ - dead = PermissibleValue( - text="dead", - title="Dead", - meaning=NCIT["C28554"]) - alive = PermissibleValue( - text="alive", - title="Alive", - meaning=NCIT["C37987"]) + + dead = PermissibleValue(text="dead", title="Dead", meaning=NCIT["C28554"]) + alive = PermissibleValue(text="alive", title="Alive", meaning=NCIT["C37987"]) _defn = EnumDefinition( name="EnumVitalStatus", description="Descriptions of a Subject's vital status", ) + class EnumNull(EnumDefinitionImpl): """ Base enumeration providing null options. """ - unknown = PermissibleValue( - text="unknown", - title="Unknown", - meaning=NCIT["C17998"]) + + unknown = PermissibleValue(text="unknown", title="Unknown", meaning=NCIT["C17998"]) _defn = EnumDefinition( name="EnumNull", description="Base enumeration providing null options.", ) + class EnumFamilyType(EnumDefinitionImpl): """ Enumerations describing research family type """ + control_only = PermissibleValue( - text="control_only", - title="Control-only", - description="Control Only") - duo = PermissibleValue( - text="duo", - title="Duo", - description="Duo") + text="control_only", title="Control-only", description="Control Only" + ) + duo = PermissibleValue(text="duo", title="Duo", description="Duo") proband_only = PermissibleValue( - text="proband_only", - title="Proband-only", - description="Proband Only") + text="proband_only", title="Proband-only", description="Proband Only" + ) trio = PermissibleValue( - text="trio", - title="Trio", - description="Trio (2 parents and affected child)") + text="trio", title="Trio", description="Trio (2 parents and affected child)" + ) trio_plus = PermissibleValue( - text="trio_plus", - title="Trio+", - description="2 Parents and 2 or more children") + text="trio_plus", title="Trio+", description="2 Parents and 2 or more children" + ) _defn = EnumDefinition( name="EnumFamilyType", description="Enumerations describing research family type", ) + class EnumConsanguinityAssertion(EnumDefinitionImpl): """ Asserts known or suspected consanguinity in this study family """ + not_suspected = PermissibleValue( text="not_suspected", title="not-suspected", description="Not suspected", - meaning=SNOMED_CT["428263003"]) + meaning=SNOMED_CT["428263003"], + ) suspected = PermissibleValue( text="suspected", title="suspected", description="Suspected", - meaning=SNOMED_CT["415684004"]) + meaning=SNOMED_CT["415684004"], + ) known_present = PermissibleValue( text="known_present", title="known-present", description="Known Present", - meaning=SNOMED_CT["410515003"]) + meaning=SNOMED_CT["410515003"], + ) unknown = PermissibleValue( text="unknown", title="unknown", description="Unknown", - meaning=SNOMED_CT["261665006"]) + meaning=SNOMED_CT["261665006"], + ) _defn = EnumDefinition( name="EnumConsanguinityAssertion", description="Asserts known or suspected consanguinity in this study family", ) + class EnumAssertionProvenance(EnumDefinitionImpl): """ Possible data sources for assertions. """ + medical_record = PermissibleValue( text="medical_record", title="Medical Record", - description="Data obtained from a medical record") + description="Data obtained from a medical record", + ) investigator_assessment = PermissibleValue( text="investigator_assessment", title="Investigator Assessment", - description="Data obtained by examination, interview, etc. with investigator") + description="Data obtained by examination, interview, etc. with investigator", + ) participant_or_caregiver_report = PermissibleValue( text="participant_or_caregiver_report", title="Participant or Caregiver Report", - description="Data obtained from survey, questionnaire, etc. filled out by participant or caregiver") + description="Data obtained from survey, questionnaire, etc. filled out by participant or caregiver", + ) other = PermissibleValue( text="other", title="Other", - description="Data obtained from other source, such as tissue bank") + description="Data obtained from other source, such as tissue bank", + ) _defn = EnumDefinition( name="EnumAssertionProvenance", description="Possible data sources for assertions.", ) + class EnumAvailabilityStatus(EnumDefinitionImpl): """ Is the biospecimen available for use? """ + available = PermissibleValue( text="available", title="Available", description="Biospecimen is Available", - meaning=IG2_BIOSPECIMEN_AVAILABILITY["available"]) + meaning=IG2_BIOSPECIMEN_AVAILABILITY["available"], + ) unavailable = PermissibleValue( text="unavailable", title="Unavailable", description="Biospecimen is Unavailable", - meaning=IG2_BIOSPECIMEN_AVAILABILITY["unavailable"]) + meaning=IG2_BIOSPECIMEN_AVAILABILITY["unavailable"], + ) _defn = EnumDefinition( name="EnumAvailabilityStatus", description="Is the biospecimen available for use?", ) + class EnumSampleCollectionMethod(EnumDefinitionImpl): """ The approach used to collect the biospecimen. [LOINC](https://loinc.org) is recommended. """ + _defn = EnumDefinition( name="EnumSampleCollectionMethod", description="The approach used to collect the biospecimen. [LOINC](https://loinc.org) is recommended.", ) + class EnumSite(EnumDefinitionImpl): """ The location of the specimen collection. [SNOMED Body Site](https://hl7.org/fhir/R4B/valueset-body-site.html) is recommended. """ + _defn = EnumDefinition( name="EnumSite", description="""The location of the specimen collection. [SNOMED Body Site](https://hl7.org/fhir/R4B/valueset-body-site.html) is recommended.""", ) + class EnumSpatialQualifiers(EnumDefinitionImpl): """ Any spatial/location qualifiers. """ + _defn = EnumDefinition( name="EnumSpatialQualifiers", description="Any spatial/location qualifiers.", ) + class EnumLaterality(EnumDefinitionImpl): """ Laterality information for the site """ + _defn = EnumDefinition( name="EnumLaterality", description="Laterality information for the site", ) + class EnumEDAMFormats(EnumDefinitionImpl): """ Data formats from the EDAM ontology. """ + _defn = EnumDefinition( name="EnumEDAMFormats", description="Data formats from the EDAM ontology.", ) + class EnumEDAMDataTypes(EnumDefinitionImpl): """ Data types from the EDAM ontology. """ + _defn = EnumDefinition( name="EnumEDAMDataTypes", description="Data types from the EDAM ontology.", ) + class EnumFileHashType(EnumDefinitionImpl): """ Types of file hashes supported. """ - md5 = PermissibleValue( - text="md5", - title="MD5") - etag = PermissibleValue( - text="etag", - title="ETag") - sha1 = PermissibleValue( - text="sha1", - title="SHA-1") + + md5 = PermissibleValue(text="md5", title="MD5") + etag = PermissibleValue(text="etag", title="ETag") + sha1 = PermissibleValue(text="sha1", title="SHA-1") _defn = EnumDefinition( name="EnumFileHashType", description="Types of file hashes supported.", ) + # Slots class slots: pass -slots.study_id = Slot(uri=CAM.study_id, name="study_id", curie=CAM.curie('study_id'), - model_uri=CAM.study_id, domain=None, range=Optional[Union[str, StudyStudyId]]) -slots.access_policy_id = Slot(uri=CAM.access_policy_id, name="access_policy_id", curie=CAM.curie('access_policy_id'), - model_uri=CAM.access_policy_id, domain=None, range=Optional[Union[str, AccessPolicyAccessPolicyId]]) +slots.study_id = Slot( + uri=CAM.study_id, + name="study_id", + curie=CAM.curie("study_id"), + model_uri=CAM.study_id, + domain=None, + range=Optional[Union[str, StudyStudyId]], +) -slots.data_use_accession = Slot(uri=CAM.data_use_accession, name="data_use_accession", curie=CAM.curie('data_use_accession'), - model_uri=CAM.data_use_accession, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.access_policy_id = Slot( + uri=CAM.access_policy_id, + name="access_policy_id", + curie=CAM.curie("access_policy_id"), + model_uri=CAM.access_policy_id, + domain=None, + range=Optional[Union[str, AccessPolicyAccessPolicyId]], +) -slots.data_use_permission = Slot(uri=CAM.data_use_permission, name="data_use_permission", curie=CAM.curie('data_use_permission'), - model_uri=CAM.data_use_permission, domain=None, range=Union[str, "EnumDataUsePermission"]) +slots.data_use_accession = Slot( + uri=CAM.data_use_accession, + name="data_use_accession", + curie=CAM.curie("data_use_accession"), + model_uri=CAM.data_use_accession, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.data_use_modifier = Slot(uri=CAM.data_use_modifier, name="data_use_modifier", curie=CAM.curie('data_use_modifier'), - model_uri=CAM.data_use_modifier, domain=None, range=Optional[Union[str, "EnumDataUseModifier"]]) +slots.data_use_permission = Slot( + uri=CAM.data_use_permission, + name="data_use_permission", + curie=CAM.curie("data_use_permission"), + model_uri=CAM.data_use_permission, + domain=None, + range=Union[str, "EnumDataUsePermission"], +) -slots.disease_limitation = Slot(uri=CAM.disease_limitation, name="disease_limitation", curie=CAM.curie('disease_limitation'), - model_uri=CAM.disease_limitation, domain=None, range=Optional[str]) +slots.data_use_modifier = Slot( + uri=CAM.data_use_modifier, + name="data_use_modifier", + curie=CAM.curie("data_use_modifier"), + model_uri=CAM.data_use_modifier, + domain=None, + range=Optional[Union[str, "EnumDataUseModifier"]], +) -slots.access_description = Slot(uri=CAM.access_description, name="access_description", curie=CAM.curie('access_description'), - model_uri=CAM.access_description, domain=None, range=Optional[str]) +slots.disease_limitation = Slot( + uri=CAM.disease_limitation, + name="disease_limitation", + curie=CAM.curie("disease_limitation"), + model_uri=CAM.disease_limitation, + domain=None, + range=Optional[str], +) -slots.do_id = Slot(uri=CAM.do_id, name="do_id", curie=CAM.curie('do_id'), - model_uri=CAM.do_id, domain=None, range=Optional[Union[str, DOIDoId]]) +slots.access_description = Slot( + uri=CAM.access_description, + name="access_description", + curie=CAM.curie("access_description"), + model_uri=CAM.access_description, + domain=None, + range=Optional[str], +) -slots.subject_id = Slot(uri=CAM.subject_id, name="subject_id", curie=CAM.curie('subject_id'), - model_uri=CAM.subject_id, domain=None, range=Optional[Union[str, SubjectSubjectId]]) +slots.do_id = Slot( + uri=CAM.do_id, + name="do_id", + curie=CAM.curie("do_id"), + model_uri=CAM.do_id, + domain=None, + range=Optional[Union[str, DOIDoId]], +) -slots.assertion_id = Slot(uri=CAM.assertion_id, name="assertion_id", curie=CAM.curie('assertion_id'), - model_uri=CAM.assertion_id, domain=None, range=Optional[Union[str, SubjectAssertionAssertionId]]) +slots.subject_id = Slot( + uri=CAM.subject_id, + name="subject_id", + curie=CAM.curie("subject_id"), + model_uri=CAM.subject_id, + domain=None, + range=Optional[Union[str, SubjectSubjectId]], +) -slots.external_id = Slot(uri=CAM.external_id, name="external_id", curie=CAM.curie('external_id'), - model_uri=CAM.external_id, domain=None, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]]) +slots.assertion_id = Slot( + uri=CAM.assertion_id, + name="assertion_id", + curie=CAM.curie("assertion_id"), + model_uri=CAM.assertion_id, + domain=None, + range=Optional[Union[str, SubjectAssertionAssertionId]], +) -slots.parent_study = Slot(uri=CAM.parent_study, name="parent_study", curie=CAM.curie('parent_study'), - model_uri=CAM.parent_study, domain=None, range=Optional[Union[str, StudyStudyId]]) +slots.external_id = Slot( + uri=CAM.external_id, + name="external_id", + curie=CAM.curie("external_id"), + model_uri=CAM.external_id, + domain=None, + range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]], +) -slots.funding_source = Slot(uri=CAM.funding_source, name="funding_source", curie=CAM.curie('funding_source'), - model_uri=CAM.funding_source, domain=None, range=Optional[Union[str, list[str]]]) +slots.parent_study = Slot( + uri=CAM.parent_study, + name="parent_study", + curie=CAM.curie("parent_study"), + model_uri=CAM.parent_study, + domain=None, + range=Optional[Union[str, StudyStudyId]], +) -slots.principal_investigator = Slot(uri=CAM.principal_investigator, name="principal_investigator", curie=CAM.curie('principal_investigator'), - model_uri=CAM.principal_investigator, domain=None, range=Union[Union[dict, Investigator], list[Union[dict, Investigator]]]) +slots.funding_source = Slot( + uri=CAM.funding_source, + name="funding_source", + curie=CAM.curie("funding_source"), + model_uri=CAM.funding_source, + domain=None, + range=Optional[Union[str, list[str]]], +) -slots.study_title = Slot(uri=CAM.study_title, name="study_title", curie=CAM.curie('study_title'), - model_uri=CAM.study_title, domain=None, range=str) +slots.principal_investigator = Slot( + uri=CAM.principal_investigator, + name="principal_investigator", + curie=CAM.curie("principal_investigator"), + model_uri=CAM.principal_investigator, + domain=None, + range=Union[Union[dict, Investigator], list[Union[dict, Investigator]]], +) + +slots.study_title = Slot( + uri=CAM.study_title, + name="study_title", + curie=CAM.curie("study_title"), + model_uri=CAM.study_title, + domain=None, + range=str, +) -slots.study_code = Slot(uri=CAM.study_code, name="study_code", curie=CAM.curie('study_code'), - model_uri=CAM.study_code, domain=None, range=str) +slots.study_code = Slot( + uri=CAM.study_code, + name="study_code", + curie=CAM.curie("study_code"), + model_uri=CAM.study_code, + domain=None, + range=str, +) -slots.study_short_name = Slot(uri=CAM.study_short_name, name="study_short_name", curie=CAM.curie('study_short_name'), - model_uri=CAM.study_short_name, domain=None, range=Optional[str]) +slots.study_short_name = Slot( + uri=CAM.study_short_name, + name="study_short_name", + curie=CAM.curie("study_short_name"), + model_uri=CAM.study_short_name, + domain=None, + range=Optional[str], +) -slots.investigator_title = Slot(uri=CAM.investigator_title, name="investigator_title", curie=CAM.curie('investigator_title'), - model_uri=CAM.investigator_title, domain=None, range=Optional[str]) +slots.investigator_title = Slot( + uri=CAM.investigator_title, + name="investigator_title", + curie=CAM.curie("investigator_title"), + model_uri=CAM.investigator_title, + domain=None, + range=Optional[str], +) -slots.name = Slot(uri=CAM.name, name="name", curie=CAM.curie('name'), - model_uri=CAM.name, domain=None, range=Optional[str]) +slots.name = Slot( + uri=CAM.name, + name="name", + curie=CAM.curie("name"), + model_uri=CAM.name, + domain=None, + range=Optional[str], +) -slots.email = Slot(uri=CAM.email, name="email", curie=CAM.curie('email'), - model_uri=CAM.email, domain=None, range=Optional[str]) +slots.email = Slot( + uri=CAM.email, + name="email", + curie=CAM.curie("email"), + model_uri=CAM.email, + domain=None, + range=Optional[str], +) -slots.institution = Slot(uri=CAM.institution, name="institution", curie=CAM.curie('institution'), - model_uri=CAM.institution, domain=None, range=Optional[str]) +slots.institution = Slot( + uri=CAM.institution, + name="institution", + curie=CAM.curie("institution"), + model_uri=CAM.institution, + domain=None, + range=Optional[str], +) -slots.program = Slot(uri=CAM.program, name="program", curie=CAM.curie('program'), - model_uri=CAM.program, domain=None, range=Union[Union[str, "EnumProgram"], list[Union[str, "EnumProgram"]]]) +slots.program = Slot( + uri=CAM.program, + name="program", + curie=CAM.curie("program"), + model_uri=CAM.program, + domain=None, + range=Union[Union[str, "EnumProgram"], list[Union[str, "EnumProgram"]]], +) -slots.study_description = Slot(uri=CAM.study_description, name="study_description", curie=CAM.curie('study_description'), - model_uri=CAM.study_description, domain=None, range=str) +slots.study_description = Slot( + uri=CAM.study_description, + name="study_description", + curie=CAM.curie("study_description"), + model_uri=CAM.study_description, + domain=None, + range=str, +) -slots.website = Slot(uri=CAM.website, name="website", curie=CAM.curie('website'), - model_uri=CAM.website, domain=None, range=Optional[Union[str, URI]]) +slots.website = Slot( + uri=CAM.website, + name="website", + curie=CAM.curie("website"), + model_uri=CAM.website, + domain=None, + range=Optional[Union[str, URI]], +) -slots.contact = Slot(uri=CAM.contact, name="contact", curie=CAM.curie('contact'), - model_uri=CAM.contact, domain=None, range=Union[Union[dict, Investigator], list[Union[dict, Investigator]]]) +slots.contact = Slot( + uri=CAM.contact, + name="contact", + curie=CAM.curie("contact"), + model_uri=CAM.contact, + domain=None, + range=Union[Union[dict, Investigator], list[Union[dict, Investigator]]], +) -slots.vbr_id = Slot(uri=CAM.vbr_id, name="vbr_id", curie=CAM.curie('vbr_id'), - model_uri=CAM.vbr_id, domain=None, range=Optional[Union[str, VirtualBiorepositoryVbrId]]) +slots.vbr_id = Slot( + uri=CAM.vbr_id, + name="vbr_id", + curie=CAM.curie("vbr_id"), + model_uri=CAM.vbr_id, + domain=None, + range=Optional[Union[str, VirtualBiorepositoryVbrId]], +) -slots.vbr_readme = Slot(uri=CAM.vbr_readme, name="vbr_readme", curie=CAM.curie('vbr_readme'), - model_uri=CAM.vbr_readme, domain=None, range=Optional[str]) +slots.vbr_readme = Slot( + uri=CAM.vbr_readme, + name="vbr_readme", + curie=CAM.curie("vbr_readme"), + model_uri=CAM.vbr_readme, + domain=None, + range=Optional[str], +) -slots.research_domain = Slot(uri=CAM.research_domain, name="research_domain", curie=CAM.curie('research_domain'), - model_uri=CAM.research_domain, domain=None, range=Union[Union[str, "EnumResearchDomain"], list[Union[str, "EnumResearchDomain"]]]) +slots.research_domain = Slot( + uri=CAM.research_domain, + name="research_domain", + curie=CAM.curie("research_domain"), + model_uri=CAM.research_domain, + domain=None, + range=Union[ + Union[str, "EnumResearchDomain"], list[Union[str, "EnumResearchDomain"]] + ], +) -slots.participant_lifespan_stage = Slot(uri=CAM.participant_lifespan_stage, name="participant_lifespan_stage", curie=CAM.curie('participant_lifespan_stage'), - model_uri=CAM.participant_lifespan_stage, domain=None, range=Union[Union[str, "EnumParticipantLifespanStage"], list[Union[str, "EnumParticipantLifespanStage"]]]) +slots.participant_lifespan_stage = Slot( + uri=CAM.participant_lifespan_stage, + name="participant_lifespan_stage", + curie=CAM.curie("participant_lifespan_stage"), + model_uri=CAM.participant_lifespan_stage, + domain=None, + range=Union[ + Union[str, "EnumParticipantLifespanStage"], + list[Union[str, "EnumParticipantLifespanStage"]], + ], +) -slots.selection_criteria = Slot(uri=CAM.selection_criteria, name="selection_criteria", curie=CAM.curie('selection_criteria'), - model_uri=CAM.selection_criteria, domain=None, range=Optional[str]) +slots.selection_criteria = Slot( + uri=CAM.selection_criteria, + name="selection_criteria", + curie=CAM.curie("selection_criteria"), + model_uri=CAM.selection_criteria, + domain=None, + range=Optional[str], +) -slots.study_design = Slot(uri=CAM.study_design, name="study_design", curie=CAM.curie('study_design'), - model_uri=CAM.study_design, domain=None, range=Union[Union[str, "EnumStudyDesign"], list[Union[str, "EnumStudyDesign"]]]) +slots.study_design = Slot( + uri=CAM.study_design, + name="study_design", + curie=CAM.curie("study_design"), + model_uri=CAM.study_design, + domain=None, + range=Union[Union[str, "EnumStudyDesign"], list[Union[str, "EnumStudyDesign"]]], +) -slots.data_category = Slot(uri=CAM.data_category, name="data_category", curie=CAM.curie('data_category'), - model_uri=CAM.data_category, domain=None, range=Optional[Union[str, "EnumDataCategory"]]) +slots.data_category = Slot( + uri=CAM.data_category, + name="data_category", + curie=CAM.curie("data_category"), + model_uri=CAM.data_category, + domain=None, + range=Optional[Union[str, "EnumDataCategory"]], +) -slots.clinical_data_source_type = Slot(uri=CAM.clinical_data_source_type, name="clinical_data_source_type", curie=CAM.curie('clinical_data_source_type'), - model_uri=CAM.clinical_data_source_type, domain=None, range=Union[Union[str, "EnumClinicalDataSourceType"], list[Union[str, "EnumClinicalDataSourceType"]]]) +slots.clinical_data_source_type = Slot( + uri=CAM.clinical_data_source_type, + name="clinical_data_source_type", + curie=CAM.curie("clinical_data_source_type"), + model_uri=CAM.clinical_data_source_type, + domain=None, + range=Union[ + Union[str, "EnumClinicalDataSourceType"], + list[Union[str, "EnumClinicalDataSourceType"]], + ], +) -slots.publication = Slot(uri=CAM.publication, name="publication", curie=CAM.curie('publication'), - model_uri=CAM.publication, domain=None, range=Optional[Union[Union[dict, Publication], list[Union[dict, Publication]]]]) +slots.publication = Slot( + uri=CAM.publication, + name="publication", + curie=CAM.curie("publication"), + model_uri=CAM.publication, + domain=None, + range=Optional[Union[Union[dict, Publication], list[Union[dict, Publication]]]], +) -slots.expected_number_of_participants = Slot(uri=CAM.expected_number_of_participants, name="expected_number_of_participants", curie=CAM.curie('expected_number_of_participants'), - model_uri=CAM.expected_number_of_participants, domain=None, range=int) +slots.expected_number_of_participants = Slot( + uri=CAM.expected_number_of_participants, + name="expected_number_of_participants", + curie=CAM.curie("expected_number_of_participants"), + model_uri=CAM.expected_number_of_participants, + domain=None, + range=int, +) -slots.actual_number_of_participants = Slot(uri=CAM.actual_number_of_participants, name="actual_number_of_participants", curie=CAM.curie('actual_number_of_participants'), - model_uri=CAM.actual_number_of_participants, domain=None, range=int) +slots.actual_number_of_participants = Slot( + uri=CAM.actual_number_of_participants, + name="actual_number_of_participants", + curie=CAM.curie("actual_number_of_participants"), + model_uri=CAM.actual_number_of_participants, + domain=None, + range=int, +) -slots.acknowledgments = Slot(uri=CAM.acknowledgments, name="acknowledgments", curie=CAM.curie('acknowledgments'), - model_uri=CAM.acknowledgments, domain=None, range=Optional[str]) +slots.acknowledgments = Slot( + uri=CAM.acknowledgments, + name="acknowledgments", + curie=CAM.curie("acknowledgments"), + model_uri=CAM.acknowledgments, + domain=None, + range=Optional[str], +) -slots.citation_statement = Slot(uri=CAM.citation_statement, name="citation_statement", curie=CAM.curie('citation_statement'), - model_uri=CAM.citation_statement, domain=None, range=Optional[str]) +slots.citation_statement = Slot( + uri=CAM.citation_statement, + name="citation_statement", + curie=CAM.curie("citation_statement"), + model_uri=CAM.citation_statement, + domain=None, + range=Optional[str], +) -slots.bibliographic_reference = Slot(uri=CAM.bibliographic_reference, name="bibliographic_reference", curie=CAM.curie('bibliographic_reference'), - model_uri=CAM.bibliographic_reference, domain=None, range=Optional[str]) +slots.bibliographic_reference = Slot( + uri=CAM.bibliographic_reference, + name="bibliographic_reference", + curie=CAM.curie("bibliographic_reference"), + model_uri=CAM.bibliographic_reference, + domain=None, + range=Optional[str], +) -slots.organism_type = Slot(uri=CAM.organism_type, name="organism_type", curie=CAM.curie('organism_type'), - model_uri=CAM.organism_type, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.organism_type = Slot( + uri=CAM.organism_type, + name="organism_type", + curie=CAM.curie("organism_type"), + model_uri=CAM.organism_type, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.subject_type = Slot(uri=CAM.subject_type, name="subject_type", curie=CAM.curie('subject_type'), - model_uri=CAM.subject_type, domain=None, range=Union[str, "EnumSubjectType"]) +slots.subject_type = Slot( + uri=CAM.subject_type, + name="subject_type", + curie=CAM.curie("subject_type"), + model_uri=CAM.subject_type, + domain=None, + range=Union[str, "EnumSubjectType"], +) -slots.sex = Slot(uri=CAM.sex, name="sex", curie=CAM.curie('sex'), - model_uri=CAM.sex, domain=None, range=Union[str, "EnumSex"]) +slots.sex = Slot( + uri=CAM.sex, + name="sex", + curie=CAM.curie("sex"), + model_uri=CAM.sex, + domain=None, + range=Union[str, "EnumSex"], +) -slots.race = Slot(uri=CAM.race, name="race", curie=CAM.curie('race'), - model_uri=CAM.race, domain=None, range=Union[Union[str, "EnumRace"], list[Union[str, "EnumRace"]]]) +slots.race = Slot( + uri=CAM.race, + name="race", + curie=CAM.curie("race"), + model_uri=CAM.race, + domain=None, + range=Union[Union[str, "EnumRace"], list[Union[str, "EnumRace"]]], +) -slots.ethnicity = Slot(uri=CAM.ethnicity, name="ethnicity", curie=CAM.curie('ethnicity'), - model_uri=CAM.ethnicity, domain=None, range=Union[str, "EnumEthnicity"]) +slots.ethnicity = Slot( + uri=CAM.ethnicity, + name="ethnicity", + curie=CAM.curie("ethnicity"), + model_uri=CAM.ethnicity, + domain=None, + range=Union[str, "EnumEthnicity"], +) -slots.down_syndrome_status = Slot(uri=CAM.down_syndrome_status, name="down_syndrome_status", curie=CAM.curie('down_syndrome_status'), - model_uri=CAM.down_syndrome_status, domain=None, range=Union[str, "EnumDownSyndromeStatus"]) +slots.down_syndrome_status = Slot( + uri=CAM.down_syndrome_status, + name="down_syndrome_status", + curie=CAM.curie("down_syndrome_status"), + model_uri=CAM.down_syndrome_status, + domain=None, + range=Union[str, "EnumDownSyndromeStatus"], +) -slots.age_at_first_engagement = Slot(uri=CAM.age_at_first_engagement, name="age_at_first_engagement", curie=CAM.curie('age_at_first_engagement'), - model_uri=CAM.age_at_first_engagement, domain=None, range=Optional[int]) +slots.age_at_first_engagement = Slot( + uri=CAM.age_at_first_engagement, + name="age_at_first_engagement", + curie=CAM.curie("age_at_first_engagement"), + model_uri=CAM.age_at_first_engagement, + domain=None, + range=Optional[int], +) -slots.vital_status = Slot(uri=CAM.vital_status, name="vital_status", curie=CAM.curie('vital_status'), - model_uri=CAM.vital_status, domain=None, range=Optional[Union[str, "EnumVitalStatus"]]) +slots.vital_status = Slot( + uri=CAM.vital_status, + name="vital_status", + curie=CAM.curie("vital_status"), + model_uri=CAM.vital_status, + domain=None, + range=Optional[Union[str, "EnumVitalStatus"]], +) -slots.age_at_last_vital_status = Slot(uri=CAM.age_at_last_vital_status, name="age_at_last_vital_status", curie=CAM.curie('age_at_last_vital_status'), - model_uri=CAM.age_at_last_vital_status, domain=None, range=Optional[int]) +slots.age_at_last_vital_status = Slot( + uri=CAM.age_at_last_vital_status, + name="age_at_last_vital_status", + curie=CAM.curie("age_at_last_vital_status"), + model_uri=CAM.age_at_last_vital_status, + domain=None, + range=Optional[int], +) -slots.family_id = Slot(uri=CAM.family_id, name="family_id", curie=CAM.curie('family_id'), - model_uri=CAM.family_id, domain=None, range=Optional[Union[str, FamilyFamilyId]]) +slots.family_id = Slot( + uri=CAM.family_id, + name="family_id", + curie=CAM.curie("family_id"), + model_uri=CAM.family_id, + domain=None, + range=Optional[Union[str, FamilyFamilyId]], +) -slots.family_type = Slot(uri=CAM.family_type, name="family_type", curie=CAM.curie('family_type'), - model_uri=CAM.family_type, domain=None, range=Optional[Union[str, "EnumFamilyType"]]) +slots.family_type = Slot( + uri=CAM.family_type, + name="family_type", + curie=CAM.curie("family_type"), + model_uri=CAM.family_type, + domain=None, + range=Optional[Union[str, "EnumFamilyType"]], +) -slots.family_description = Slot(uri=CAM.family_description, name="family_description", curie=CAM.curie('family_description'), - model_uri=CAM.family_description, domain=None, range=Optional[str]) +slots.family_description = Slot( + uri=CAM.family_description, + name="family_description", + curie=CAM.curie("family_description"), + model_uri=CAM.family_description, + domain=None, + range=Optional[str], +) -slots.consanguinity = Slot(uri=CAM.consanguinity, name="consanguinity", curie=CAM.curie('consanguinity'), - model_uri=CAM.consanguinity, domain=None, range=Optional[Union[str, "EnumConsanguinityAssertion"]]) +slots.consanguinity = Slot( + uri=CAM.consanguinity, + name="consanguinity", + curie=CAM.curie("consanguinity"), + model_uri=CAM.consanguinity, + domain=None, + range=Optional[Union[str, "EnumConsanguinityAssertion"]], +) -slots.family_study_focus = Slot(uri=CAM.family_study_focus, name="family_study_focus", curie=CAM.curie('family_study_focus'), - model_uri=CAM.family_study_focus, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.family_study_focus = Slot( + uri=CAM.family_study_focus, + name="family_study_focus", + curie=CAM.curie("family_study_focus"), + model_uri=CAM.family_study_focus, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.family_relationship_id = Slot(uri=CAM.family_relationship_id, name="family_relationship_id", curie=CAM.curie('family_relationship_id'), - model_uri=CAM.family_relationship_id, domain=None, range=Optional[Union[str, FamilyRelationshipFamilyRelationshipId]]) +slots.family_relationship_id = Slot( + uri=CAM.family_relationship_id, + name="family_relationship_id", + curie=CAM.curie("family_relationship_id"), + model_uri=CAM.family_relationship_id, + domain=None, + range=Optional[Union[str, FamilyRelationshipFamilyRelationshipId]], +) -slots.family_member_id = Slot(uri=CAM.family_member_id, name="family_member_id", curie=CAM.curie('family_member_id'), - model_uri=CAM.family_member_id, domain=None, range=Union[str, SubjectSubjectId]) +slots.family_member_id = Slot( + uri=CAM.family_member_id, + name="family_member_id", + curie=CAM.curie("family_member_id"), + model_uri=CAM.family_member_id, + domain=None, + range=Union[str, SubjectSubjectId], +) -slots.relationship = Slot(uri=CAM.relationship, name="relationship", curie=CAM.curie('relationship'), - model_uri=CAM.relationship, domain=None, range=Union[str, URIorCURIE]) +slots.relationship = Slot( + uri=CAM.relationship, + name="relationship", + curie=CAM.curie("relationship"), + model_uri=CAM.relationship, + domain=None, + range=Union[str, URIorCURIE], +) -slots.family_role = Slot(uri=CAM.family_role, name="family_role", curie=CAM.curie('family_role'), - model_uri=CAM.family_role, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.family_role = Slot( + uri=CAM.family_role, + name="family_role", + curie=CAM.curie("family_role"), + model_uri=CAM.family_role, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.assertion_provenance = Slot(uri=CAM.assertion_provenance, name="assertion_provenance", curie=CAM.curie('assertion_provenance'), - model_uri=CAM.assertion_provenance, domain=None, range=Optional[Union[str, "EnumAssertionProvenance"]]) +slots.assertion_provenance = Slot( + uri=CAM.assertion_provenance, + name="assertion_provenance", + curie=CAM.curie("assertion_provenance"), + model_uri=CAM.assertion_provenance, + domain=None, + range=Optional[Union[str, "EnumAssertionProvenance"]], +) -slots.age_at_assertion = Slot(uri=CAM.age_at_assertion, name="age_at_assertion", curie=CAM.curie('age_at_assertion'), - model_uri=CAM.age_at_assertion, domain=None, range=Optional[int]) +slots.age_at_assertion = Slot( + uri=CAM.age_at_assertion, + name="age_at_assertion", + curie=CAM.curie("age_at_assertion"), + model_uri=CAM.age_at_assertion, + domain=None, + range=Optional[int], +) -slots.age_at_event = Slot(uri=CAM.age_at_event, name="age_at_event", curie=CAM.curie('age_at_event'), - model_uri=CAM.age_at_event, domain=None, range=Optional[int]) +slots.age_at_event = Slot( + uri=CAM.age_at_event, + name="age_at_event", + curie=CAM.curie("age_at_event"), + model_uri=CAM.age_at_event, + domain=None, + range=Optional[int], +) -slots.age_at_resolution = Slot(uri=CAM.age_at_resolution, name="age_at_resolution", curie=CAM.curie('age_at_resolution'), - model_uri=CAM.age_at_resolution, domain=None, range=Optional[int]) +slots.age_at_resolution = Slot( + uri=CAM.age_at_resolution, + name="age_at_resolution", + curie=CAM.curie("age_at_resolution"), + model_uri=CAM.age_at_resolution, + domain=None, + range=Optional[int], +) -slots.concept = Slot(uri=CAM.concept, name="concept", curie=CAM.curie('concept'), - model_uri=CAM.concept, domain=None, range=Optional[Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]]]) +slots.concept = Slot( + uri=CAM.concept, + name="concept", + curie=CAM.curie("concept"), + model_uri=CAM.concept, + domain=None, + range=Optional[ + Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]] + ], +) -slots.concept_curie = Slot(uri=CAM.concept_curie, name="concept_curie", curie=CAM.curie('concept_curie'), - model_uri=CAM.concept_curie, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.concept_curie = Slot( + uri=CAM.concept_curie, + name="concept_curie", + curie=CAM.curie("concept_curie"), + model_uri=CAM.concept_curie, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.display = Slot(uri=CAM.display, name="display", curie=CAM.curie('display'), - model_uri=CAM.display, domain=None, range=Optional[str]) +slots.display = Slot( + uri=CAM.display, + name="display", + curie=CAM.curie("display"), + model_uri=CAM.display, + domain=None, + range=Optional[str], +) -slots.concept_source = Slot(uri=CAM.concept_source, name="concept_source", curie=CAM.curie('concept_source'), - model_uri=CAM.concept_source, domain=None, range=Optional[str]) +slots.concept_source = Slot( + uri=CAM.concept_source, + name="concept_source", + curie=CAM.curie("concept_source"), + model_uri=CAM.concept_source, + domain=None, + range=Optional[str], +) -slots.value_concept = Slot(uri=CAM.value_concept, name="value_concept", curie=CAM.curie('value_concept'), - model_uri=CAM.value_concept, domain=None, range=Optional[Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]]]) +slots.value_concept = Slot( + uri=CAM.value_concept, + name="value_concept", + curie=CAM.curie("value_concept"), + model_uri=CAM.value_concept, + domain=None, + range=Optional[ + Union[Union[str, ConceptConceptCurie], list[Union[str, ConceptConceptCurie]]] + ], +) -slots.value_number = Slot(uri=CAM.value_number, name="value_number", curie=CAM.curie('value_number'), - model_uri=CAM.value_number, domain=None, range=Optional[float]) +slots.value_number = Slot( + uri=CAM.value_number, + name="value_number", + curie=CAM.curie("value_number"), + model_uri=CAM.value_number, + domain=None, + range=Optional[float], +) -slots.value_source = Slot(uri=CAM.value_source, name="value_source", curie=CAM.curie('value_source'), - model_uri=CAM.value_source, domain=None, range=Optional[str]) +slots.value_source = Slot( + uri=CAM.value_source, + name="value_source", + curie=CAM.curie("value_source"), + model_uri=CAM.value_source, + domain=None, + range=Optional[str], +) -slots.value_unit = Slot(uri=CAM.value_unit, name="value_unit", curie=CAM.curie('value_unit'), - model_uri=CAM.value_unit, domain=None, range=Optional[Union[str, ConceptConceptCurie]]) +slots.value_unit = Slot( + uri=CAM.value_unit, + name="value_unit", + curie=CAM.curie("value_unit"), + model_uri=CAM.value_unit, + domain=None, + range=Optional[Union[str, ConceptConceptCurie]], +) -slots.value_unit_source = Slot(uri=CAM.value_unit_source, name="value_unit_source", curie=CAM.curie('value_unit_source'), - model_uri=CAM.value_unit_source, domain=None, range=Optional[str]) +slots.value_unit_source = Slot( + uri=CAM.value_unit_source, + name="value_unit_source", + curie=CAM.curie("value_unit_source"), + model_uri=CAM.value_unit_source, + domain=None, + range=Optional[str], +) -slots.sample_id = Slot(uri=CAM.sample_id, name="sample_id", curie=CAM.curie('sample_id'), - model_uri=CAM.sample_id, domain=None, range=Optional[Union[str, SampleSampleId]]) +slots.sample_id = Slot( + uri=CAM.sample_id, + name="sample_id", + curie=CAM.curie("sample_id"), + model_uri=CAM.sample_id, + domain=None, + range=Optional[Union[str, SampleSampleId]], +) -slots.parent_sample_id = Slot(uri=CAM.parent_sample_id, name="parent_sample_id", curie=CAM.curie('parent_sample_id'), - model_uri=CAM.parent_sample_id, domain=None, range=Optional[Union[str, SampleSampleId]]) +slots.parent_sample_id = Slot( + uri=CAM.parent_sample_id, + name="parent_sample_id", + curie=CAM.curie("parent_sample_id"), + model_uri=CAM.parent_sample_id, + domain=None, + range=Optional[Union[str, SampleSampleId]], +) -slots.biospecimen_collection_id = Slot(uri=CAM.biospecimen_collection_id, name="biospecimen_collection_id", curie=CAM.curie('biospecimen_collection_id'), - model_uri=CAM.biospecimen_collection_id, domain=None, range=Optional[Union[str, BiospecimenCollectionBiospecimenCollectionId]]) +slots.biospecimen_collection_id = Slot( + uri=CAM.biospecimen_collection_id, + name="biospecimen_collection_id", + curie=CAM.curie("biospecimen_collection_id"), + model_uri=CAM.biospecimen_collection_id, + domain=None, + range=Optional[Union[str, BiospecimenCollectionBiospecimenCollectionId]], +) -slots.aliquot_id = Slot(uri=CAM.aliquot_id, name="aliquot_id", curie=CAM.curie('aliquot_id'), - model_uri=CAM.aliquot_id, domain=None, range=Optional[Union[str, AliquotAliquotId]]) +slots.aliquot_id = Slot( + uri=CAM.aliquot_id, + name="aliquot_id", + curie=CAM.curie("aliquot_id"), + model_uri=CAM.aliquot_id, + domain=None, + range=Optional[Union[str, AliquotAliquotId]], +) -slots.sample_type = Slot(uri=CAM.sample_type, name="sample_type", curie=CAM.curie('sample_type'), - model_uri=CAM.sample_type, domain=None, range=Union[str, URIorCURIE]) +slots.sample_type = Slot( + uri=CAM.sample_type, + name="sample_type", + curie=CAM.curie("sample_type"), + model_uri=CAM.sample_type, + domain=None, + range=Union[str, URIorCURIE], +) -slots.processing = Slot(uri=CAM.processing, name="processing", curie=CAM.curie('processing'), - model_uri=CAM.processing, domain=None, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]]) +slots.processing = Slot( + uri=CAM.processing, + name="processing", + curie=CAM.curie("processing"), + model_uri=CAM.processing, + domain=None, + range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]], +) -slots.availablity_status = Slot(uri=CAM.availablity_status, name="availablity_status", curie=CAM.curie('availablity_status'), - model_uri=CAM.availablity_status, domain=None, range=Optional[Union[str, "EnumAvailabilityStatus"]]) +slots.availability_status = Slot( + uri=CAM.availability_status, + name="availability_status", + curie=CAM.curie("availability_status"), + model_uri=CAM.availability_status, + domain=None, + range=Optional[Union[str, "EnumAvailabilityStatus"]], +) -slots.storage_method = Slot(uri=CAM.storage_method, name="storage_method", curie=CAM.curie('storage_method'), - model_uri=CAM.storage_method, domain=None, range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]]) +slots.storage_method = Slot( + uri=CAM.storage_method, + name="storage_method", + curie=CAM.curie("storage_method"), + model_uri=CAM.storage_method, + domain=None, + range=Optional[Union[Union[str, URIorCURIE], list[Union[str, URIorCURIE]]]], +) -slots.quantity_number = Slot(uri=CAM.quantity_number, name="quantity_number", curie=CAM.curie('quantity_number'), - model_uri=CAM.quantity_number, domain=None, range=Optional[float]) +slots.quantity_number = Slot( + uri=CAM.quantity_number, + name="quantity_number", + curie=CAM.curie("quantity_number"), + model_uri=CAM.quantity_number, + domain=None, + range=Optional[float], +) -slots.quantity_unit = Slot(uri=CAM.quantity_unit, name="quantity_unit", curie=CAM.curie('quantity_unit'), - model_uri=CAM.quantity_unit, domain=None, range=Optional[Union[str, ConceptConceptCurie]]) +slots.quantity_unit = Slot( + uri=CAM.quantity_unit, + name="quantity_unit", + curie=CAM.curie("quantity_unit"), + model_uri=CAM.quantity_unit, + domain=None, + range=Optional[Union[str, ConceptConceptCurie]], +) -slots.concentration_number = Slot(uri=CAM.concentration_number, name="concentration_number", curie=CAM.curie('concentration_number'), - model_uri=CAM.concentration_number, domain=None, range=Optional[float]) +slots.concentration_number = Slot( + uri=CAM.concentration_number, + name="concentration_number", + curie=CAM.curie("concentration_number"), + model_uri=CAM.concentration_number, + domain=None, + range=Optional[float], +) -slots.concentration_unit = Slot(uri=CAM.concentration_unit, name="concentration_unit", curie=CAM.curie('concentration_unit'), - model_uri=CAM.concentration_unit, domain=None, range=Optional[Union[str, ConceptConceptCurie]]) +slots.concentration_unit = Slot( + uri=CAM.concentration_unit, + name="concentration_unit", + curie=CAM.curie("concentration_unit"), + model_uri=CAM.concentration_unit, + domain=None, + range=Optional[Union[str, ConceptConceptCurie]], +) -slots.age_at_collection = Slot(uri=CAM.age_at_collection, name="age_at_collection", curie=CAM.curie('age_at_collection'), - model_uri=CAM.age_at_collection, domain=None, range=Optional[float]) +slots.age_at_collection = Slot( + uri=CAM.age_at_collection, + name="age_at_collection", + curie=CAM.curie("age_at_collection"), + model_uri=CAM.age_at_collection, + domain=None, + range=Optional[float], +) -slots.method = Slot(uri=CAM.method, name="method", curie=CAM.curie('method'), - model_uri=CAM.method, domain=None, range=Optional[Union[str, "EnumSampleCollectionMethod"]]) +slots.method = Slot( + uri=CAM.method, + name="method", + curie=CAM.curie("method"), + model_uri=CAM.method, + domain=None, + range=Optional[Union[str, "EnumSampleCollectionMethod"]], +) -slots.site = Slot(uri=CAM.site, name="site", curie=CAM.curie('site'), - model_uri=CAM.site, domain=None, range=Optional[Union[str, "EnumSite"]]) +slots.site = Slot( + uri=CAM.site, + name="site", + curie=CAM.curie("site"), + model_uri=CAM.site, + domain=None, + range=Optional[Union[str, "EnumSite"]], +) -slots.spatial_qualifier = Slot(uri=CAM.spatial_qualifier, name="spatial_qualifier", curie=CAM.curie('spatial_qualifier'), - model_uri=CAM.spatial_qualifier, domain=None, range=Optional[Union[str, "EnumSpatialQualifiers"]]) +slots.spatial_qualifier = Slot( + uri=CAM.spatial_qualifier, + name="spatial_qualifier", + curie=CAM.curie("spatial_qualifier"), + model_uri=CAM.spatial_qualifier, + domain=None, + range=Optional[Union[str, "EnumSpatialQualifiers"]], +) -slots.laterality = Slot(uri=CAM.laterality, name="laterality", curie=CAM.curie('laterality'), - model_uri=CAM.laterality, domain=None, range=Optional[Union[str, "EnumLaterality"]]) +slots.laterality = Slot( + uri=CAM.laterality, + name="laterality", + curie=CAM.curie("laterality"), + model_uri=CAM.laterality, + domain=None, + range=Optional[Union[str, "EnumLaterality"]], +) -slots.encounter_id = Slot(uri=CAM.encounter_id, name="encounter_id", curie=CAM.curie('encounter_id'), - model_uri=CAM.encounter_id, domain=None, range=Optional[Union[str, EncounterEncounterId]]) +slots.encounter_id = Slot( + uri=CAM.encounter_id, + name="encounter_id", + curie=CAM.curie("encounter_id"), + model_uri=CAM.encounter_id, + domain=None, + range=Optional[Union[str, EncounterEncounterId]], +) -slots.description = Slot(uri=CAM.description, name="description", curie=CAM.curie('description'), - model_uri=CAM.description, domain=None, range=Optional[str]) +slots.description = Slot( + uri=CAM.description, + name="description", + curie=CAM.curie("description"), + model_uri=CAM.description, + domain=None, + range=Optional[str], +) -slots.encounter_definition_id = Slot(uri=CAM.encounter_definition_id, name="encounter_definition_id", curie=CAM.curie('encounter_definition_id'), - model_uri=CAM.encounter_definition_id, domain=None, range=Optional[Union[str, EncounterDefinitionEncounterDefinitionId]]) +slots.encounter_definition_id = Slot( + uri=CAM.encounter_definition_id, + name="encounter_definition_id", + curie=CAM.curie("encounter_definition_id"), + model_uri=CAM.encounter_definition_id, + domain=None, + range=Optional[Union[str, EncounterDefinitionEncounterDefinitionId]], +) -slots.activity_definition_id = Slot(uri=CAM.activity_definition_id, name="activity_definition_id", curie=CAM.curie('activity_definition_id'), - model_uri=CAM.activity_definition_id, domain=None, range=Optional[Union[str, ActivityDefinitionActivityDefinitionId]]) +slots.activity_definition_id = Slot( + uri=CAM.activity_definition_id, + name="activity_definition_id", + curie=CAM.curie("activity_definition_id"), + model_uri=CAM.activity_definition_id, + domain=None, + range=Optional[Union[str, ActivityDefinitionActivityDefinitionId]], +) -slots.file_id = Slot(uri=CAM.file_id, name="file_id", curie=CAM.curie('file_id'), - model_uri=CAM.file_id, domain=None, range=Optional[Union[str, FileFileId]]) +slots.file_id = Slot( + uri=CAM.file_id, + name="file_id", + curie=CAM.curie("file_id"), + model_uri=CAM.file_id, + domain=None, + range=Optional[Union[str, FileFileId]], +) -slots.filename = Slot(uri=CAM.filename, name="filename", curie=CAM.curie('filename'), - model_uri=CAM.filename, domain=None, range=Optional[str]) +slots.filename = Slot( + uri=CAM.filename, + name="filename", + curie=CAM.curie("filename"), + model_uri=CAM.filename, + domain=None, + range=Optional[str], +) -slots.format = Slot(uri=CAM.format, name="format", curie=CAM.curie('format'), - model_uri=CAM.format, domain=None, range=Optional[Union[str, "EnumEDAMFormats"]]) +slots.format = Slot( + uri=CAM.format, + name="format", + curie=CAM.curie("format"), + model_uri=CAM.format, + domain=None, + range=Optional[Union[str, "EnumEDAMFormats"]], +) -slots.data_type = Slot(uri=CAM.data_type, name="data_type", curie=CAM.curie('data_type'), - model_uri=CAM.data_type, domain=None, range=Optional[Union[str, "EnumEDAMDataTypes"]]) +slots.data_type = Slot( + uri=CAM.data_type, + name="data_type", + curie=CAM.curie("data_type"), + model_uri=CAM.data_type, + domain=None, + range=Optional[Union[str, "EnumEDAMDataTypes"]], +) -slots.size = Slot(uri=CAM.size, name="size", curie=CAM.curie('size'), - model_uri=CAM.size, domain=None, range=Optional[int]) +slots.size = Slot( + uri=CAM.size, + name="size", + curie=CAM.curie("size"), + model_uri=CAM.size, + domain=None, + range=Optional[int], +) -slots.staging_url = Slot(uri=CAM.staging_url, name="staging_url", curie=CAM.curie('staging_url'), - model_uri=CAM.staging_url, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.staging_url = Slot( + uri=CAM.staging_url, + name="staging_url", + curie=CAM.curie("staging_url"), + model_uri=CAM.staging_url, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.release_url = Slot(uri=CAM.release_url, name="release_url", curie=CAM.curie('release_url'), - model_uri=CAM.release_url, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.release_url = Slot( + uri=CAM.release_url, + name="release_url", + curie=CAM.curie("release_url"), + model_uri=CAM.release_url, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.drs_uri = Slot(uri=CAM.drs_uri, name="drs_uri", curie=CAM.curie('drs_uri'), - model_uri=CAM.drs_uri, domain=None, range=Optional[Union[str, URIorCURIE]]) +slots.drs_uri = Slot( + uri=CAM.drs_uri, + name="drs_uri", + curie=CAM.curie("drs_uri"), + model_uri=CAM.drs_uri, + domain=None, + range=Optional[Union[str, URIorCURIE]], +) -slots.hash = Slot(uri=CAM.hash, name="hash", curie=CAM.curie('hash'), - model_uri=CAM.hash, domain=None, range=Optional[Union[dict, FileHash]]) +slots.hash = Slot( + uri=CAM.hash, + name="hash", + curie=CAM.curie("hash"), + model_uri=CAM.hash, + domain=None, + range=Optional[Union[dict, FileHash]], +) -slots.hash_type = Slot(uri=CAM.hash_type, name="hash_type", curie=CAM.curie('hash_type'), - model_uri=CAM.hash_type, domain=None, range=Optional[Union[str, "EnumFileHashType"]]) +slots.hash_type = Slot( + uri=CAM.hash_type, + name="hash_type", + curie=CAM.curie("hash_type"), + model_uri=CAM.hash_type, + domain=None, + range=Optional[Union[str, "EnumFileHashType"]], +) -slots.hash_value = Slot(uri=CAM.hash_value, name="hash_value", curie=CAM.curie('hash_value'), - model_uri=CAM.hash_value, domain=None, range=Optional[str]) +slots.hash_value = Slot( + uri=CAM.hash_value, + name="hash_value", + curie=CAM.curie("hash_value"), + model_uri=CAM.hash_value, + domain=None, + range=Optional[str], +) -slots.dataset_id = Slot(uri=CAM.dataset_id, name="dataset_id", curie=CAM.curie('dataset_id'), - model_uri=CAM.dataset_id, domain=None, range=Optional[Union[str, DatasetDatasetId]]) +slots.dataset_id = Slot( + uri=CAM.dataset_id, + name="dataset_id", + curie=CAM.curie("dataset_id"), + model_uri=CAM.dataset_id, + domain=None, + range=Optional[Union[str, DatasetDatasetId]], +) -slots.data_collection_start = Slot(uri=CAM.data_collection_start, name="data_collection_start", curie=CAM.curie('data_collection_start'), - model_uri=CAM.data_collection_start, domain=None, range=Optional[str]) +slots.data_collection_start = Slot( + uri=CAM.data_collection_start, + name="data_collection_start", + curie=CAM.curie("data_collection_start"), + model_uri=CAM.data_collection_start, + domain=None, + range=Optional[str], +) -slots.data_collection_end = Slot(uri=CAM.data_collection_end, name="data_collection_end", curie=CAM.curie('data_collection_end'), - model_uri=CAM.data_collection_end, domain=None, range=Optional[str]) +slots.data_collection_end = Slot( + uri=CAM.data_collection_end, + name="data_collection_end", + curie=CAM.curie("data_collection_end"), + model_uri=CAM.data_collection_end, + domain=None, + range=Optional[str], +) -slots.AccessPolicy_access_policy_id = Slot(uri=CAM.access_policy_id, name="AccessPolicy_access_policy_id", curie=CAM.curie('access_policy_id'), - model_uri=CAM.AccessPolicy_access_policy_id, domain=AccessPolicy, range=Union[str, AccessPolicyAccessPolicyId]) +slots.AccessPolicy_access_policy_id = Slot( + uri=CAM.access_policy_id, + name="AccessPolicy_access_policy_id", + curie=CAM.curie("access_policy_id"), + model_uri=CAM.AccessPolicy_access_policy_id, + domain=AccessPolicy, + range=Union[str, AccessPolicyAccessPolicyId], +) -slots.Study_study_id = Slot(uri=CAM.study_id, name="Study_study_id", curie=CAM.curie('study_id'), - model_uri=CAM.Study_study_id, domain=Study, range=Union[str, StudyStudyId]) +slots.Study_study_id = Slot( + uri=CAM.study_id, + name="Study_study_id", + curie=CAM.curie("study_id"), + model_uri=CAM.Study_study_id, + domain=Study, + range=Union[str, StudyStudyId], +) -slots.StudyMetadata_study_id = Slot(uri=CAM.study_id, name="StudyMetadata_study_id", curie=CAM.curie('study_id'), - model_uri=CAM.StudyMetadata_study_id, domain=StudyMetadata, range=Union[str, StudyMetadataStudyId]) +slots.StudyMetadata_study_id = Slot( + uri=CAM.study_id, + name="StudyMetadata_study_id", + curie=CAM.curie("study_id"), + model_uri=CAM.StudyMetadata_study_id, + domain=StudyMetadata, + range=Union[str, StudyMetadataStudyId], +) -slots.StudyMetadata_data_category = Slot(uri=CAM.data_category, name="StudyMetadata_data_category", curie=CAM.curie('data_category'), - model_uri=CAM.StudyMetadata_data_category, domain=StudyMetadata, range=Union[Union[str, "EnumDataCategory"], list[Union[str, "EnumDataCategory"]]]) +slots.StudyMetadata_data_category = Slot( + uri=CAM.data_category, + name="StudyMetadata_data_category", + curie=CAM.curie("data_category"), + model_uri=CAM.StudyMetadata_data_category, + domain=StudyMetadata, + range=Union[Union[str, "EnumDataCategory"], list[Union[str, "EnumDataCategory"]]], +) -slots.VirtualBiorepository_vbr_id = Slot(uri=CAM.vbr_id, name="VirtualBiorepository_vbr_id", curie=CAM.curie('vbr_id'), - model_uri=CAM.VirtualBiorepository_vbr_id, domain=VirtualBiorepository, range=Union[str, VirtualBiorepositoryVbrId]) +slots.VirtualBiorepository_vbr_id = Slot( + uri=CAM.vbr_id, + name="VirtualBiorepository_vbr_id", + curie=CAM.curie("vbr_id"), + model_uri=CAM.VirtualBiorepository_vbr_id, + domain=VirtualBiorepository, + range=Union[str, VirtualBiorepositoryVbrId], +) -slots.DOI_do_id = Slot(uri=CAM.do_id, name="DOI_do_id", curie=CAM.curie('do_id'), - model_uri=CAM.DOI_do_id, domain=DOI, range=Union[str, DOIDoId]) +slots.DOI_do_id = Slot( + uri=CAM.do_id, + name="DOI_do_id", + curie=CAM.curie("do_id"), + model_uri=CAM.DOI_do_id, + domain=DOI, + range=Union[str, DOIDoId], +) -slots.Subject_subject_id = Slot(uri=CAM.subject_id, name="Subject_subject_id", curie=CAM.curie('subject_id'), - model_uri=CAM.Subject_subject_id, domain=Subject, range=Union[str, SubjectSubjectId]) +slots.Subject_subject_id = Slot( + uri=CAM.subject_id, + name="Subject_subject_id", + curie=CAM.curie("subject_id"), + model_uri=CAM.Subject_subject_id, + domain=Subject, + range=Union[str, SubjectSubjectId], +) -slots.Demographics_subject_id = Slot(uri=CAM.subject_id, name="Demographics_subject_id", curie=CAM.curie('subject_id'), - model_uri=CAM.Demographics_subject_id, domain=Demographics, range=Union[str, DemographicsSubjectId]) +slots.Demographics_subject_id = Slot( + uri=CAM.subject_id, + name="Demographics_subject_id", + curie=CAM.curie("subject_id"), + model_uri=CAM.Demographics_subject_id, + domain=Demographics, + range=Union[str, DemographicsSubjectId], +) -slots.Family_family_id = Slot(uri=CAM.family_id, name="Family_family_id", curie=CAM.curie('family_id'), - model_uri=CAM.Family_family_id, domain=Family, range=Union[str, FamilyFamilyId]) +slots.Family_family_id = Slot( + uri=CAM.family_id, + name="Family_family_id", + curie=CAM.curie("family_id"), + model_uri=CAM.Family_family_id, + domain=Family, + range=Union[str, FamilyFamilyId], +) -slots.FamilyRelationship_family_relationship_id = Slot(uri=CAM.family_relationship_id, name="FamilyRelationship_family_relationship_id", curie=CAM.curie('family_relationship_id'), - model_uri=CAM.FamilyRelationship_family_relationship_id, domain=FamilyRelationship, range=Union[str, FamilyRelationshipFamilyRelationshipId]) +slots.FamilyRelationship_family_relationship_id = Slot( + uri=CAM.family_relationship_id, + name="FamilyRelationship_family_relationship_id", + curie=CAM.curie("family_relationship_id"), + model_uri=CAM.FamilyRelationship_family_relationship_id, + domain=FamilyRelationship, + range=Union[str, FamilyRelationshipFamilyRelationshipId], +) -slots.FamilyRelationship_subject_id = Slot(uri=CAM.subject_id, name="FamilyRelationship_subject_id", curie=CAM.curie('subject_id'), - model_uri=CAM.FamilyRelationship_subject_id, domain=FamilyRelationship, range=Union[str, SubjectSubjectId]) +slots.FamilyRelationship_subject_id = Slot( + uri=CAM.subject_id, + name="FamilyRelationship_subject_id", + curie=CAM.curie("subject_id"), + model_uri=CAM.FamilyRelationship_subject_id, + domain=FamilyRelationship, + range=Union[str, SubjectSubjectId], +) -slots.FamilyMember_family_id = Slot(uri=CAM.family_id, name="FamilyMember_family_id", curie=CAM.curie('family_id'), - model_uri=CAM.FamilyMember_family_id, domain=FamilyMember, range=Union[str, FamilyFamilyId]) +slots.FamilyMember_family_id = Slot( + uri=CAM.family_id, + name="FamilyMember_family_id", + curie=CAM.curie("family_id"), + model_uri=CAM.FamilyMember_family_id, + domain=FamilyMember, + range=Union[str, FamilyFamilyId], +) -slots.FamilyMember_subject_id = Slot(uri=CAM.subject_id, name="FamilyMember_subject_id", curie=CAM.curie('subject_id'), - model_uri=CAM.FamilyMember_subject_id, domain=FamilyMember, range=Union[str, SubjectSubjectId]) +slots.FamilyMember_subject_id = Slot( + uri=CAM.subject_id, + name="FamilyMember_subject_id", + curie=CAM.curie("subject_id"), + model_uri=CAM.FamilyMember_subject_id, + domain=FamilyMember, + range=Union[str, SubjectSubjectId], +) -slots.SubjectAssertion_assertion_id = Slot(uri=CAM.assertion_id, name="SubjectAssertion_assertion_id", curie=CAM.curie('assertion_id'), - model_uri=CAM.SubjectAssertion_assertion_id, domain=SubjectAssertion, range=Union[str, SubjectAssertionAssertionId]) +slots.SubjectAssertion_assertion_id = Slot( + uri=CAM.assertion_id, + name="SubjectAssertion_assertion_id", + curie=CAM.curie("assertion_id"), + model_uri=CAM.SubjectAssertion_assertion_id, + domain=SubjectAssertion, + range=Union[str, SubjectAssertionAssertionId], +) -slots.Concept_concept_curie = Slot(uri=CAM.concept_curie, name="Concept_concept_curie", curie=CAM.curie('concept_curie'), - model_uri=CAM.Concept_concept_curie, domain=Concept, range=Union[str, ConceptConceptCurie]) +slots.Concept_concept_curie = Slot( + uri=CAM.concept_curie, + name="Concept_concept_curie", + curie=CAM.curie("concept_curie"), + model_uri=CAM.Concept_concept_curie, + domain=Concept, + range=Union[str, ConceptConceptCurie], +) -slots.Sample_sample_id = Slot(uri=CAM.sample_id, name="Sample_sample_id", curie=CAM.curie('sample_id'), - model_uri=CAM.Sample_sample_id, domain=Sample, range=Union[str, SampleSampleId]) +slots.Sample_sample_id = Slot( + uri=CAM.sample_id, + name="Sample_sample_id", + curie=CAM.curie("sample_id"), + model_uri=CAM.Sample_sample_id, + domain=Sample, + range=Union[str, SampleSampleId], +) -slots.Sample_biospecimen_collection_id = Slot(uri=CAM.biospecimen_collection_id, name="Sample_biospecimen_collection_id", curie=CAM.curie('biospecimen_collection_id'), - model_uri=CAM.Sample_biospecimen_collection_id, domain=Sample, range=Optional[Union[str, BiospecimenCollectionBiospecimenCollectionId]]) +slots.Sample_biospecimen_collection_id = Slot( + uri=CAM.biospecimen_collection_id, + name="Sample_biospecimen_collection_id", + curie=CAM.curie("biospecimen_collection_id"), + model_uri=CAM.Sample_biospecimen_collection_id, + domain=Sample, + range=Optional[Union[str, BiospecimenCollectionBiospecimenCollectionId]], +) -slots.BiospecimenCollection_biospecimen_collection_id = Slot(uri=CAM.biospecimen_collection_id, name="BiospecimenCollection_biospecimen_collection_id", curie=CAM.curie('biospecimen_collection_id'), - model_uri=CAM.BiospecimenCollection_biospecimen_collection_id, domain=BiospecimenCollection, range=Union[str, BiospecimenCollectionBiospecimenCollectionId]) +slots.BiospecimenCollection_biospecimen_collection_id = Slot( + uri=CAM.biospecimen_collection_id, + name="BiospecimenCollection_biospecimen_collection_id", + curie=CAM.curie("biospecimen_collection_id"), + model_uri=CAM.BiospecimenCollection_biospecimen_collection_id, + domain=BiospecimenCollection, + range=Union[str, BiospecimenCollectionBiospecimenCollectionId], +) -slots.Aliquot_aliquot_id = Slot(uri=CAM.aliquot_id, name="Aliquot_aliquot_id", curie=CAM.curie('aliquot_id'), - model_uri=CAM.Aliquot_aliquot_id, domain=Aliquot, range=Union[str, AliquotAliquotId]) +slots.Aliquot_aliquot_id = Slot( + uri=CAM.aliquot_id, + name="Aliquot_aliquot_id", + curie=CAM.curie("aliquot_id"), + model_uri=CAM.Aliquot_aliquot_id, + domain=Aliquot, + range=Union[str, AliquotAliquotId], +) -slots.Encounter_encounter_id = Slot(uri=CAM.encounter_id, name="Encounter_encounter_id", curie=CAM.curie('encounter_id'), - model_uri=CAM.Encounter_encounter_id, domain=Encounter, range=Union[str, EncounterEncounterId]) +slots.Encounter_encounter_id = Slot( + uri=CAM.encounter_id, + name="Encounter_encounter_id", + curie=CAM.curie("encounter_id"), + model_uri=CAM.Encounter_encounter_id, + domain=Encounter, + range=Union[str, EncounterEncounterId], +) -slots.EncounterDefinition_encounter_definition_id = Slot(uri=CAM.encounter_definition_id, name="EncounterDefinition_encounter_definition_id", curie=CAM.curie('encounter_definition_id'), - model_uri=CAM.EncounterDefinition_encounter_definition_id, domain=EncounterDefinition, range=Union[str, EncounterDefinitionEncounterDefinitionId]) +slots.EncounterDefinition_encounter_definition_id = Slot( + uri=CAM.encounter_definition_id, + name="EncounterDefinition_encounter_definition_id", + curie=CAM.curie("encounter_definition_id"), + model_uri=CAM.EncounterDefinition_encounter_definition_id, + domain=EncounterDefinition, + range=Union[str, EncounterDefinitionEncounterDefinitionId], +) -slots.EncounterDefinition_activity_definition_id = Slot(uri=CAM.activity_definition_id, name="EncounterDefinition_activity_definition_id", curie=CAM.curie('activity_definition_id'), - model_uri=CAM.EncounterDefinition_activity_definition_id, domain=EncounterDefinition, range=Optional[Union[Union[str, ActivityDefinitionActivityDefinitionId], list[Union[str, ActivityDefinitionActivityDefinitionId]]]]) +slots.EncounterDefinition_activity_definition_id = Slot( + uri=CAM.activity_definition_id, + name="EncounterDefinition_activity_definition_id", + curie=CAM.curie("activity_definition_id"), + model_uri=CAM.EncounterDefinition_activity_definition_id, + domain=EncounterDefinition, + range=Optional[ + Union[ + Union[str, ActivityDefinitionActivityDefinitionId], + list[Union[str, ActivityDefinitionActivityDefinitionId]], + ] + ], +) -slots.ActivityDefinition_activity_definition_id = Slot(uri=CAM.activity_definition_id, name="ActivityDefinition_activity_definition_id", curie=CAM.curie('activity_definition_id'), - model_uri=CAM.ActivityDefinition_activity_definition_id, domain=ActivityDefinition, range=Union[str, ActivityDefinitionActivityDefinitionId]) +slots.ActivityDefinition_activity_definition_id = Slot( + uri=CAM.activity_definition_id, + name="ActivityDefinition_activity_definition_id", + curie=CAM.curie("activity_definition_id"), + model_uri=CAM.ActivityDefinition_activity_definition_id, + domain=ActivityDefinition, + range=Union[str, ActivityDefinitionActivityDefinitionId], +) -slots.File_file_id = Slot(uri=CAM.file_id, name="File_file_id", curie=CAM.curie('file_id'), - model_uri=CAM.File_file_id, domain=File, range=Union[str, FileFileId]) +slots.File_file_id = Slot( + uri=CAM.file_id, + name="File_file_id", + curie=CAM.curie("file_id"), + model_uri=CAM.File_file_id, + domain=File, + range=Union[str, FileFileId], +) -slots.File_subject_id = Slot(uri=CAM.subject_id, name="File_subject_id", curie=CAM.curie('subject_id'), - model_uri=CAM.File_subject_id, domain=File, range=Optional[Union[Union[str, SubjectSubjectId], list[Union[str, SubjectSubjectId]]]]) +slots.File_subject_id = Slot( + uri=CAM.subject_id, + name="File_subject_id", + curie=CAM.curie("subject_id"), + model_uri=CAM.File_subject_id, + domain=File, + range=Optional[ + Union[Union[str, SubjectSubjectId], list[Union[str, SubjectSubjectId]]] + ], +) -slots.File_sample_id = Slot(uri=CAM.sample_id, name="File_sample_id", curie=CAM.curie('sample_id'), - model_uri=CAM.File_sample_id, domain=File, range=Optional[Union[Union[str, SampleSampleId], list[Union[str, SampleSampleId]]]]) +slots.File_sample_id = Slot( + uri=CAM.sample_id, + name="File_sample_id", + curie=CAM.curie("sample_id"), + model_uri=CAM.File_sample_id, + domain=File, + range=Optional[Union[Union[str, SampleSampleId], list[Union[str, SampleSampleId]]]], +) -slots.Dataset_dataset_id = Slot(uri=CAM.dataset_id, name="Dataset_dataset_id", curie=CAM.curie('dataset_id'), - model_uri=CAM.Dataset_dataset_id, domain=Dataset, range=Union[str, DatasetDatasetId]) +slots.Dataset_dataset_id = Slot( + uri=CAM.dataset_id, + name="Dataset_dataset_id", + curie=CAM.curie("dataset_id"), + model_uri=CAM.Dataset_dataset_id, + domain=Dataset, + range=Union[str, DatasetDatasetId], +) -slots.Dataset_file_id = Slot(uri=CAM.file_id, name="Dataset_file_id", curie=CAM.curie('file_id'), - model_uri=CAM.Dataset_file_id, domain=Dataset, range=Optional[Union[Union[str, FileFileId], list[Union[str, FileFileId]]]]) +slots.Dataset_file_id = Slot( + uri=CAM.file_id, + name="Dataset_file_id", + curie=CAM.curie("file_id"), + model_uri=CAM.Dataset_file_id, + domain=Dataset, + range=Optional[Union[Union[str, FileFileId], list[Union[str, FileFileId]]]], +) diff --git a/src/common_access_model/datamodel/include_access_model_pydantic.py b/src/common_access_model/datamodel/include_access_model_pydantic.py index 442d5a0b..48756b35 100644 --- a/src/common_access_model/datamodel/include_access_model_pydantic.py +++ b/src/common_access_model/datamodel/include_access_model_pydantic.py @@ -1,21 +1,7 @@ from __future__ import annotations -import re -import sys -from datetime import ( - date, - datetime, - time -) -from decimal import Decimal from enum import Enum -from typing import ( - Any, - ClassVar, - Literal, - Optional, - Union -) +from typing import Any, ClassVar, Optional from pydantic import ( BaseModel, @@ -24,123 +10,159 @@ RootModel, SerializationInfo, SerializerFunctionWrapHandler, - field_validator, - model_serializer + model_serializer, ) - metamodel_version = "None" version = "None" class ConfiguredBaseModel(BaseModel): model_config = ConfigDict( - serialize_by_alias = True, - validate_by_name = True, - validate_assignment = True, - validate_default = True, - extra = "forbid", - arbitrary_types_allowed = True, - use_enum_values = True, - strict = False, + serialize_by_alias=True, + validate_by_name=True, + validate_assignment=True, + validate_default=True, + extra="forbid", + arbitrary_types_allowed=True, + use_enum_values=True, + strict=False, ) - @model_serializer(mode='wrap', when_used='unless-none') + @model_serializer(mode="wrap", when_used="unless-none") def treat_empty_lists_as_none( - self, handler: SerializerFunctionWrapHandler, - info: SerializationInfo) -> dict[str, Any]: + self, handler: SerializerFunctionWrapHandler, info: SerializationInfo + ) -> dict[str, Any]: if info.exclude_none: _instance = self.model_copy() for field, field_info in type(_instance).model_fields.items(): - if getattr(_instance, field) == [] and not( - field_info.is_required()): + if getattr(_instance, field) == [] and not (field_info.is_required()): setattr(_instance, field, None) else: _instance = self return handler(_instance, info) - class LinkMLMeta(RootModel): root: dict[str, Any] = {} model_config = ConfigDict(frozen=True) - def __getattr__(self, key:str): + def __getattr__(self, key: str): return getattr(self.root, key) - def __getitem__(self, key:str): + def __getitem__(self, key: str): return self.root[key] - def __setitem__(self, key:str, value): + def __setitem__(self, key: str, value): self.root[key] = value - def __contains__(self, key:str) -> bool: + def __contains__(self, key: str) -> bool: return key in self.root -linkml_meta = LinkMLMeta({'default_prefix': 'cam', - 'default_range': 'string', - 'description': 'LinkML Schema for the Common Access Model', - 'id': 'https://includedcc.org/common-access-model', - 'imports': ['linkml:types'], - 'license': 'MIT', - 'name': 'common-access-model', - 'prefixes': {'DUO': {'prefix_prefix': 'DUO', - 'prefix_reference': 'http://purl.obolibrary.org/obo/DUO_'}, - 'HP': {'prefix_prefix': 'HP', - 'prefix_reference': 'http://purl.obolibrary.org/obo/HP_'}, - 'MONDO': {'prefix_prefix': 'MONDO', - 'prefix_reference': 'http://purl.obolibrary.org/obo/MONDO_'}, - 'NCIT': {'prefix_prefix': 'NCIT', - 'prefix_reference': 'http://purl.obolibrary.org/obo/NCIT_'}, - 'PATO': {'prefix_prefix': 'PATO', - 'prefix_reference': 'http://purl.obolibrary.org/obo/PATO_'}, - 'cam': {'prefix_prefix': 'cam', - 'prefix_reference': 'https://includedcc.org/common-access-model/'}, - 'cdc_race_eth': {'prefix_prefix': 'cdc_race_eth', - 'prefix_reference': 'urn:oid:2.16.840.1.113883.6.238/'}, - 'hl7_null': {'prefix_prefix': 'hl7_null', - 'prefix_reference': 'http://terminology.hl7.org/CodeSystem/v3-NullFlavor/'}, - 'ig2_biospecimen_availability': {'prefix_prefix': 'ig2_biospecimen_availability', - 'prefix_reference': 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/biospecimen-availability/'}, - 'ig2dac': {'prefix_prefix': 'ig2dac', - 'prefix_reference': 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-code/'}, - 'ig2dat': {'prefix_prefix': 'ig2dat', - 'prefix_reference': 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-type/'}, - 'ig_dob_method': {'prefix_prefix': 'ig_dob_method', - 'prefix_reference': 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-date-of-birth-method/'}, - 'igcondtype': {'prefix_prefix': 'igcondtype', - 'prefix_reference': 'https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/condition-type/'}, - 'linkml': {'prefix_prefix': 'linkml', - 'prefix_reference': 'https://w3id.org/linkml/'}, - 'mesh': {'prefix_prefix': 'mesh', - 'prefix_reference': 'http://id.nlm.nih.gov/mesh/'}, - 'schema': {'prefix_prefix': 'schema', - 'prefix_reference': 'http://schema.org/'}, - 'snomed_ct': {'prefix_prefix': 'snomed_ct', - 'prefix_reference': 'http://snomed.info/id/'}}, - 'see_also': ['https://includedcc.github.io/common-access-model'], - 'source_file': 'src/common_access_model/schema/common_access_model.yaml', - 'title': 'Common Access Model'} ) +linkml_meta = LinkMLMeta( + { + "default_prefix": "cam", + "default_range": "string", + "description": "LinkML Schema for the Common Access Model", + "id": "https://includedcc.org/common-access-model", + "imports": ["linkml:types"], + "license": "MIT", + "name": "common-access-model", + "prefixes": { + "DUO": { + "prefix_prefix": "DUO", + "prefix_reference": "http://purl.obolibrary.org/obo/DUO_", + }, + "HP": { + "prefix_prefix": "HP", + "prefix_reference": "http://purl.obolibrary.org/obo/HP_", + }, + "MONDO": { + "prefix_prefix": "MONDO", + "prefix_reference": "http://purl.obolibrary.org/obo/MONDO_", + }, + "NCIT": { + "prefix_prefix": "NCIT", + "prefix_reference": "http://purl.obolibrary.org/obo/NCIT_", + }, + "PATO": { + "prefix_prefix": "PATO", + "prefix_reference": "http://purl.obolibrary.org/obo/PATO_", + }, + "cam": { + "prefix_prefix": "cam", + "prefix_reference": "https://includedcc.org/common-access-model/", + }, + "cdc_race_eth": { + "prefix_prefix": "cdc_race_eth", + "prefix_reference": "urn:oid:2.16.840.1.113883.6.238/", + }, + "hl7_null": { + "prefix_prefix": "hl7_null", + "prefix_reference": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor/", + }, + "ig2_biospecimen_availability": { + "prefix_prefix": "ig2_biospecimen_availability", + "prefix_reference": "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/biospecimen-availability/", + }, + "ig2dac": { + "prefix_prefix": "ig2dac", + "prefix_reference": "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-code/", + }, + "ig2dat": { + "prefix_prefix": "ig2dat", + "prefix_reference": "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-access-type/", + }, + "ig_dob_method": { + "prefix_prefix": "ig_dob_method", + "prefix_reference": "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/research-data-date-of-birth-method/", + }, + "igcondtype": { + "prefix_prefix": "igcondtype", + "prefix_reference": "https://nih-ncpi.github.io/ncpi-fhir-ig-2/CodeSystem/condition-type/", + }, + "linkml": { + "prefix_prefix": "linkml", + "prefix_reference": "https://w3id.org/linkml/", + }, + "mesh": { + "prefix_prefix": "mesh", + "prefix_reference": "http://id.nlm.nih.gov/mesh/", + }, + "schema": { + "prefix_prefix": "schema", + "prefix_reference": "http://schema.org/", + }, + "snomed_ct": { + "prefix_prefix": "snomed_ct", + "prefix_reference": "http://snomed.info/id/", + }, + }, + "see_also": ["https://includedcc.github.io/common-access-model"], + "source_file": "src/common_access_model/schema/common_access_model.yaml", + "title": "Common Access Model", + } +) + class EnumDataUsePermission(str): """ Data Use Ontology (DUO) terms for data use permissions. """ - pass class EnumDataUseModifier(str): """ Data Use Ontology (DUO) terms for data use modifiers. """ - pass class EnumProgram(str, Enum): """ Funding programs relevant to inform operations. """ + INCLUDE = "include" KF = "kf" Other = "other" @@ -150,6 +172,7 @@ class EnumResearchDomain(str, Enum): """ Domains of Research used to find studies. """ + Behavior_and_Behavior_Mechanisms = "behavior_and_behavior_mechanisms" Congenital_Heart_Defects = "congenital_heart_defects" Immune_System_Diseases = "immune_system_diseases" @@ -165,6 +188,7 @@ class EnumParticipantLifespanStage(str, Enum): """ Stages of life during which participants may be recruited. """ + Fetal = "fetal" """ Before birth @@ -187,6 +211,7 @@ class EnumStudyDesign(str, Enum): """ Approaches for collecting data, investigating interventions, and/or analyzing data. """ + Case_Control = "case_control" Case_Set = "case_set" Control_Set = "control_set" @@ -203,6 +228,7 @@ class EnumClinicalDataSourceType(str, Enum): """ Approaches to ascertain clinical information about a participant. """ + Medical_Record = "medical_record" """ Data obtained directly from medical record @@ -226,7 +252,10 @@ class EnumDataCategory(str, Enum): """ Categories of data which may be collected about participants. """ - Unharmonized_DemographicSOLIDUSClinical_Data = "unharmonized_demographic_clinical_data" + + Unharmonized_DemographicSOLIDUSClinical_Data = ( + "unharmonized_demographic_clinical_data" + ) Harmonized_DemographicSOLIDUSClinical_Data = "harmonized_demographic_clinical_data" Genomics = "genomics" Transcriptomics = "transcriptomics" @@ -247,13 +276,14 @@ class EnumSubjectType(str, Enum): """ Types of Subject entities """ + participant = "participant" """ Study participant with consent, assent, or waiver of consent. """ non_participant = "non_participant" """ - An individual associated with a study who was not explictly consented, eg, the subject of a reported family history. + An individual associated with a study who was not explicitly consented, eg, the subject of a reported family history. """ cell_line = "cell_line" """ @@ -277,6 +307,7 @@ class EnumDownSyndromeStatus(str, Enum): """ Down syndrome / chromosome 21 status """ + D21 = "d21" """ Disomy 21 (euploid) @@ -291,6 +322,7 @@ class EnumSex(str, Enum): """ Subject Sex """ + Female = "female" Male = "male" Other = "other" @@ -301,11 +333,14 @@ class EnumRace(str, Enum): """ Participant Race """ + American_Indian_or_Alaska_Native = "american_indian_or_alaska_native" Asian = "asian" Black_or_African_American = "black_or_african_american" More_than_one_race = "more_than_one_race" - Native_Hawaiian_or_Other_Pacific_Islander = "native_hawaiian_or_other_pacific_islander" + Native_Hawaiian_or_Other_Pacific_Islander = ( + "native_hawaiian_or_other_pacific_islander" + ) Other = "other" White = "white" Prefer_not_to_answer = "prefer_not_to_answer" @@ -332,6 +367,7 @@ class EnumEthnicity(str, Enum): """ Participant ethnicity, specific to Hispanic or Latino. """ + Hispanic_or_Latino = "hispanic_or_latino" Not_Hispanic_or_Latino = "not_hispanic_or_latino" Prefer_not_to_answer = "prefer_not_to_answer" @@ -342,6 +378,7 @@ class EnumVitalStatus(str, Enum): """ Descriptions of a Subject's vital status """ + Dead = "dead" Alive = "alive" @@ -350,6 +387,7 @@ class EnumNull(str, Enum): """ Base enumeration providing null options. """ + Unknown = "unknown" @@ -357,6 +395,7 @@ class EnumFamilyType(str, Enum): """ Enumerations describing research family type """ + Control_only = "control_only" """ Control Only @@ -383,6 +422,7 @@ class EnumConsanguinityAssertion(str, Enum): """ Asserts known or suspected consanguinity in this study family """ + not_suspected = "not_suspected" """ Not suspected @@ -405,6 +445,7 @@ class EnumAssertionProvenance(str, Enum): """ Possible data sources for assertions. """ + Medical_Record = "medical_record" """ Data obtained from a medical record @@ -427,6 +468,7 @@ class EnumAvailabilityStatus(str, Enum): """ Is the biospecimen available for use? """ + Available = "available" """ Biospecimen is Available @@ -441,654 +483,2095 @@ class EnumSampleCollectionMethod(str): """ The approach used to collect the biospecimen. [LOINC](https://loinc.org) is recommended. """ - pass class EnumSite(str): """ The location of the specimen collection. [SNOMED Body Site](https://hl7.org/fhir/R4B/valueset-body-site.html) is recommended. """ - pass class EnumSpatialQualifiers(str): """ Any spatial/location qualifiers. """ - pass class EnumLaterality(str): """ Laterality information for the site """ - pass class EnumEDAMFormats(str): """ Data formats from the EDAM ontology. """ - pass class EnumEDAMDataTypes(str): """ Data types from the EDAM ontology. """ - pass class EnumFileHashType(str, Enum): """ Types of file hashes supported. """ + MD5 = "md5" ETag = "etag" SHA_1 = "sha1" - class Record(ConfiguredBaseModel): """ One row / entity within the database """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'abstract': True, - 'from_schema': 'https://includedcc.org/common-access-model', - 'title': 'Record'}) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "abstract": True, + "from_schema": "https://includedcc.org/common-access-model", + "title": "Record", + } + ) + + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class AccessPolicy(ConfiguredBaseModel): """ The access policy that describes the controls around use of data """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'access_policy_id': {'identifier': True, - 'name': 'access_policy_id', - 'range': 'string', - 'required': True}}, - 'title': 'Access Policy'}) - access_policy_id: str = Field(default=..., title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - data_use_accession: Optional[str] = Field(default=None, title="Data Use Accession", description="""Accession used to provision access to the record, eg, a dbGaP phsID.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy']} }) - data_use_permission: EnumDataUsePermission = Field(default=..., title="Data Use Permission", description="""Broad category of restrictions on data use.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy']} }) - data_use_modifier: Optional[EnumDataUseModifier] = Field(default=None, title="Data Use Modifier", description="""Additional modifiers that limit data use.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy']} }) - disease_limitation: Optional[str] = Field(default=None, title="Data Use Disease Limitation", description="""If the access is limited to a specific disease purpose, it is specified here.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy']} }) - access_description: Optional[str] = Field(default=None, title="Access Description", description="""Any additional information to support access requests.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy']} }) - website: Optional[str] = Field(default=None, title="Website", description="""Website with more information about this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy', 'Study', 'VirtualBiorepository', 'Publication']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "access_policy_id": { + "identifier": True, + "name": "access_policy_id", + "range": "string", + "required": True, + } + }, + "title": "Access Policy", + } + ) + + access_policy_id: str = Field( + default=..., + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + data_use_accession: Optional[str] = Field( + default=None, + title="Data Use Accession", + description="""Accession used to provision access to the record, eg, a dbGaP phsID.""", + json_schema_extra={"linkml_meta": {"domain_of": ["AccessPolicy"]}}, + ) + data_use_permission: EnumDataUsePermission = Field( + default=..., + title="Data Use Permission", + description="""Broad category of restrictions on data use.""", + json_schema_extra={"linkml_meta": {"domain_of": ["AccessPolicy"]}}, + ) + data_use_modifier: Optional[EnumDataUseModifier] = Field( + default=None, + title="Data Use Modifier", + description="""Additional modifiers that limit data use.""", + json_schema_extra={"linkml_meta": {"domain_of": ["AccessPolicy"]}}, + ) + disease_limitation: Optional[str] = Field( + default=None, + title="Data Use Disease Limitation", + description="""If the access is limited to a specific disease purpose, it is specified here.""", + json_schema_extra={"linkml_meta": {"domain_of": ["AccessPolicy"]}}, + ) + access_description: Optional[str] = Field( + default=None, + title="Access Description", + description="""Any additional information to support access requests.""", + json_schema_extra={"linkml_meta": {"domain_of": ["AccessPolicy"]}}, + ) + website: Optional[str] = Field( + default=None, + title="Website", + description="""Website with more information about this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessPolicy", + "Study", + "VirtualBiorepository", + "Publication", + ] + } + }, + ) class Study(Record): """ Study Metadata """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'study_id': {'identifier': True, - 'name': 'study_id', - 'range': 'string', - 'required': True}}, - 'title': 'Research Study'}) - - parent_study: Optional[str] = Field(default=None, title="Parent Study", description="""The parent study for this study, if it is a nested study.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - study_title: str = Field(default=..., description="""Full Study Title""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - study_code: str = Field(default=..., title="Study Code", description="""Unique identifier for the study (generally a short acronym)""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - study_short_name: Optional[str] = Field(default=None, title="Study Code", description="""Short name for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - program: list[EnumProgram] = Field(default=..., title="Program", description="""Funding source(s) for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - funding_source: Optional[list[str]] = Field(default=[], title="Funding Source", description="""The funding source(s) of the study.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - principal_investigator: list[Investigator] = Field(default=..., title="Principal Investigator", description="""The Principal Investigator(s) responsible for the study.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - contact: list[Investigator] = Field(default=..., title="Contact Person", description="""The individual to contact with questions about this record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'VirtualBiorepository']} }) - study_description: str = Field(default=..., title="Study Description", description="""Brief description of the study (2-4 sentences)""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - website: Optional[str] = Field(default=None, title="Website", description="""Website with more information about this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy', 'Study', 'VirtualBiorepository', 'Publication']} }) - publication: Optional[list[Publication]] = Field(default=[], title="Publication", description="""Publications associated with this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'Dataset']} }) - acknowledgments: Optional[str] = Field(default=None, title="Acknowledgments", description="""Funding statement and acknowledgments for this study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - citation_statement: Optional[str] = Field(default=None, title="Citation Statement", description="""Statement that secondary data users should use to acknowledge use of this study or dataset. E.g., \"The results analyzed and here are based in whole or in part upon data generated by the INCLUDE (INvestigation of Co-occurring conditions across the Lifespan to Understand Down syndromE) Project , and were accessed from the INCLUDE Data Hub and .\"""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study']} }) - do_id: Optional[str] = Field(default=None, title="DOI", description="""Digital Object Identifier (DOI) for this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'DOI', 'Dataset']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: str = Field(default=..., title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "study_id": { + "identifier": True, + "name": "study_id", + "range": "string", + "required": True, + } + }, + "title": "Research Study", + } + ) + + parent_study: Optional[str] = Field( + default=None, + title="Parent Study", + description="""The parent study for this study, if it is a nested study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + study_title: str = Field( + default=..., + description="""Full Study Title""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + study_code: str = Field( + default=..., + title="Study Code", + description="""Unique identifier for the study (generally a short acronym)""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + study_short_name: Optional[str] = Field( + default=None, + title="Study Code", + description="""Short name for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + program: list[EnumProgram] = Field( + default=..., + title="Program", + description="""Funding source(s) for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + funding_source: Optional[list[str]] = Field( + default=[], + title="Funding Source", + description="""The funding source(s) of the study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + principal_investigator: list[Investigator] = Field( + default=..., + title="Principal Investigator", + description="""The Principal Investigator(s) responsible for the study.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + contact: list[Investigator] = Field( + default=..., + title="Contact Person", + description="""The individual to contact with questions about this record.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Study", "VirtualBiorepository"]} + }, + ) + study_description: str = Field( + default=..., + title="Study Description", + description="""Brief description of the study (2-4 sentences)""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + website: Optional[str] = Field( + default=None, + title="Website", + description="""Website with more information about this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessPolicy", + "Study", + "VirtualBiorepository", + "Publication", + ] + } + }, + ) + publication: Optional[list[Publication]] = Field( + default=[], + title="Publication", + description="""Publications associated with this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study", "Dataset"]}}, + ) + acknowledgments: Optional[str] = Field( + default=None, + title="Acknowledgments", + description="""Funding statement and acknowledgments for this study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + citation_statement: Optional[str] = Field( + default=None, + title="Citation Statement", + description="""Statement that secondary data users should use to acknowledge use of this study or dataset. E.g., \"The results analyzed and here are based in whole or in part upon data generated by the INCLUDE (INvestigation of Co-occurring conditions across the Lifespan to Understand Down syndromeE) Project , and were accessed from the INCLUDE Data Hub and .\"""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study"]}}, + ) + do_id: Optional[str] = Field( + default=None, + title="DOI", + description="""Digital Object Identifier (DOI) for this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study", "DOI", "Dataset"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: str = Field( + default=..., + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class StudyMetadata(Record): """ Additional features about studies that may not apply to all studies """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'data_category': {'multivalued': True, - 'name': 'data_category', - 'required': True}, - 'study_id': {'identifier': True, - 'name': 'study_id', - 'required': True}}, - 'title': 'Study Metadata'}) - - study_id: str = Field(default=..., title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) - participant_lifespan_stage: list[EnumParticipantLifespanStage] = Field(default=..., title="Participant Lifespan Stage", description="""Focus age group(s) of the study population""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - selection_criteria: Optional[str] = Field(default=None, title="Selection Criteria", description="""Brief description of inclusion and/or exclusion criteria for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - study_design: list[EnumStudyDesign] = Field(default=..., title="Study Design", description="""Overall design of study, including whether it is longitudinal and whether family members/unrelated controls are also enrolled""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - clinical_data_source_type: list[EnumClinicalDataSourceType] = Field(default=..., title="Clinical Data Source Type", description="""Source(s) of data collected from study participants""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - data_category: list[EnumDataCategory] = Field(default=..., title="Data Category", description="""General category of data in this Record (e.g. Clinical, Genomics, etc)""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata', 'File']} }) - vbr_id: Optional[str] = Field(default=None, title="Virtual Biorepository", description="""Information about the study's Virtual Biorepository, if participating""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata', 'VirtualBiorepository']} }) - research_domain: list[EnumResearchDomain] = Field(default=..., description="""Main research domain(s) of the study, other than Down syndrome""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - expected_number_of_participants: int = Field(default=..., title="Expected Number of Participants", description="""Total expected number of participants to be recruited.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - actual_number_of_participants: int = Field(default=..., title="Actual Number of Participants", description="""Total participants included at this time.""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "data_category": { + "multivalued": True, + "name": "data_category", + "required": True, + }, + "study_id": {"identifier": True, "name": "study_id", "required": True}, + }, + "title": "Study Metadata", + } + ) + + study_id: str = Field( + default=..., + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) + participant_lifespan_stage: list[EnumParticipantLifespanStage] = Field( + default=..., + title="Participant Lifespan Stage", + description="""Focus age group(s) of the study population""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + selection_criteria: Optional[str] = Field( + default=None, + title="Selection Criteria", + description="""Brief description of inclusion and/or exclusion criteria for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + study_design: list[EnumStudyDesign] = Field( + default=..., + title="Study Design", + description="""Overall design of study, including whether it is longitudinal and whether family members/unrelated controls are also enrolled""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + clinical_data_source_type: list[EnumClinicalDataSourceType] = Field( + default=..., + title="Clinical Data Source Type", + description="""Source(s) of data collected from study participants""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + data_category: list[EnumDataCategory] = Field( + default=..., + title="Data Category", + description="""General category of data in this Record (e.g. Clinical, Genomics, etc)""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata", "File"]}}, + ) + vbr_id: Optional[str] = Field( + default=None, + title="Virtual Biorepository", + description="""Information about the study's Virtual Biorepository, if participating""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["StudyMetadata", "VirtualBiorepository"]} + }, + ) + research_domain: list[EnumResearchDomain] = Field( + default=..., + description="""Main research domain(s) of the study, other than Down syndrome""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + expected_number_of_participants: int = Field( + default=..., + title="Expected Number of Participants", + description="""Total expected number of participants to be recruited.""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + actual_number_of_participants: int = Field( + default=..., + title="Actual Number of Participants", + description="""Total participants included at this time.""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) class VirtualBiorepository(Record): """ An organization that can provide access to specimen for further analysis. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'vbr_id': {'identifier': True, - 'name': 'vbr_id', - 'range': 'string', - 'required': True}}, - 'title': 'Virtual BioRepository (VBR)'}) - - vbr_id: str = Field(default=..., title="Virtual Biorepository", description="""Information about the study's Virtual Biorepository, if participating""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata', 'VirtualBiorepository']} }) - name: Optional[str] = Field(default=None, title="Name", description="""Name of the entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', - 'Investigator', - 'EncounterDefinition', - 'ActivityDefinition', - 'Dataset']} }) - institution: Optional[str] = Field(default=None, title="Institution", description="""Name of the institution this record is associated with.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', 'Investigator']} }) - contact: list[Investigator] = Field(default=..., title="Contact Person", description="""The individual to contact with questions about this record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'VirtualBiorepository']} }) - website: Optional[str] = Field(default=None, title="Website", description="""Website with more information about this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy', 'Study', 'VirtualBiorepository', 'Publication']} }) - vbr_readme: Optional[str] = Field(default=None, title="VBR Readme", description="""Instructions for contacting or requesting samples from Virtual Biorepository, if participating""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "vbr_id": { + "identifier": True, + "name": "vbr_id", + "range": "string", + "required": True, + } + }, + "title": "Virtual BioRepository (VBR)", + } + ) + + vbr_id: str = Field( + default=..., + title="Virtual Biorepository", + description="""Information about the study's Virtual Biorepository, if participating""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["StudyMetadata", "VirtualBiorepository"]} + }, + ) + name: Optional[str] = Field( + default=None, + title="Name", + description="""Name of the entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "VirtualBiorepository", + "Investigator", + "EncounterDefinition", + "ActivityDefinition", + "Dataset", + ] + } + }, + ) + institution: Optional[str] = Field( + default=None, + title="Institution", + description="""Name of the institution this record is associated with.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["VirtualBiorepository", "Investigator"]} + }, + ) + contact: list[Investigator] = Field( + default=..., + title="Contact Person", + description="""The individual to contact with questions about this record.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Study", "VirtualBiorepository"]} + }, + ) + website: Optional[str] = Field( + default=None, + title="Website", + description="""Website with more information about this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessPolicy", + "Study", + "VirtualBiorepository", + "Publication", + ] + } + }, + ) + vbr_readme: Optional[str] = Field( + default=None, + title="VBR Readme", + description="""Instructions for contacting or requesting samples from Virtual Biorepository, if participating""", + json_schema_extra={"linkml_meta": {"domain_of": ["VirtualBiorepository"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class DOI(Record): """ A DOI is a permanent reference with metadata about a digital object. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'do_id': {'identifier': True, - 'name': 'do_id', - 'range': 'string', - 'required': True}}, - 'title': 'Digital Object Identifier (DOI)'}) - do_id: str = Field(default=..., title="DOI", description="""Digital Object Identifier (DOI) for this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'DOI', 'Dataset']} }) - bibliographic_reference: Optional[str] = Field(default=None, title="Bibiliographic Reference", description="""Text use to reference this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DOI', 'Publication']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "do_id": { + "identifier": True, + "name": "do_id", + "range": "string", + "required": True, + } + }, + "title": "Digital Object Identifier (DOI)", + } + ) + + do_id: str = Field( + default=..., + title="DOI", + description="""Digital Object Identifier (DOI) for this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study", "DOI", "Dataset"]}}, + ) + bibliographic_reference: Optional[str] = Field( + default=None, + title="Bibiliographic Reference", + description="""Text use to reference this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["DOI", "Publication"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Investigator(Record): """ An individual who made contributions to the collection, analysis, or sharing of data. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'title': 'Investigator'}) - name: Optional[str] = Field(default=None, title="Name", description="""Name of the entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', - 'Investigator', - 'EncounterDefinition', - 'ActivityDefinition', - 'Dataset']} }) - institution: Optional[str] = Field(default=None, title="Institution", description="""Name of the institution this record is associated with.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', 'Investigator']} }) - investigator_title: Optional[str] = Field(default=None, title="Investigator Title", description="""The title of the Investigator, eg, \"Assistant Professor\"""", json_schema_extra = { "linkml_meta": {'domain_of': ['Investigator']} }) - email: Optional[str] = Field(default=None, title="Email Address", description="""An email address to reach the entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Investigator']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "title": "Investigator", + } + ) + + name: Optional[str] = Field( + default=None, + title="Name", + description="""Name of the entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "VirtualBiorepository", + "Investigator", + "EncounterDefinition", + "ActivityDefinition", + "Dataset", + ] + } + }, + ) + institution: Optional[str] = Field( + default=None, + title="Institution", + description="""Name of the institution this record is associated with.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["VirtualBiorepository", "Investigator"]} + }, + ) + investigator_title: Optional[str] = Field( + default=None, + title="Investigator Title", + description="""The title of the Investigator, eg, \"Assistant Professor\"""", + json_schema_extra={"linkml_meta": {"domain_of": ["Investigator"]}}, + ) + email: Optional[str] = Field( + default=None, + title="Email Address", + description="""An email address to reach the entity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Investigator"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Publication(Record): """ Information about a specific publication. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'title': 'Publication'}) - bibliographic_reference: Optional[str] = Field(default=None, title="Bibiliographic Reference", description="""Text use to reference this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['DOI', 'Publication']} }) - website: Optional[str] = Field(default=None, title="Website", description="""Website with more information about this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['AccessPolicy', 'Study', 'VirtualBiorepository', 'Publication']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "title": "Publication", + } + ) + + bibliographic_reference: Optional[str] = Field( + default=None, + title="Bibiliographic Reference", + description="""Text use to reference this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["DOI", "Publication"]}}, + ) + website: Optional[str] = Field( + default=None, + title="Website", + description="""Website with more information about this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "AccessPolicy", + "Study", + "VirtualBiorepository", + "Publication", + ] + } + }, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Subject(Record): """ This entity is the subject about which data or references are recorded. This includes the idea of a human participant in a study, a cell line, an animal model, or any other similar entity. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'subject_id': {'identifier': True, - 'name': 'subject_id', - 'range': 'string', - 'required': True}}, - 'title': 'Subject'}) - - subject_id: str = Field(default=..., title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - subject_type: EnumSubjectType = Field(default=..., title="Subject Type", description="""Type of entity this record represents""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject']} }) - organism_type: Optional[str] = Field(default=None, title="Organism Type", description="""Organism Type, typically from NCBITaxon. For reference, Human is NCBITaxon:9606.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "subject_id": { + "identifier": True, + "name": "subject_id", + "range": "string", + "required": True, + } + }, + "title": "Subject", + } + ) + + subject_id: str = Field( + default=..., + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + subject_type: EnumSubjectType = Field( + default=..., + title="Subject Type", + description="""Type of entity this record represents""", + json_schema_extra={"linkml_meta": {"domain_of": ["Subject"]}}, + ) + organism_type: Optional[str] = Field( + default=None, + title="Organism Type", + description="""Organism Type, typically from NCBITaxon. For reference, Human is NCBITaxon:9606.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Subject"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Demographics(Record): """ Basic participant demographics summary """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'subject_id': {'identifier': True, - 'name': 'subject_id', - 'required': True}}, - 'title': 'Demographics'}) - - subject_id: str = Field(default=..., title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - sex: EnumSex = Field(default=..., title="Sex", description="""Sex of Participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - race: list[EnumRace] = Field(default=..., title="Race", description="""Race of Participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - ethnicity: EnumEthnicity = Field(default=..., title="Ethnicity", description="""Ethnicity of Participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - age_at_last_vital_status: Optional[int] = Field(default=None, title="Age at Last Vital Status", description="""Age in days when participant's vital status was last recorded""", ge=-365, le=32507, json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics'], 'unit': {'ucum_code': 'd'}} }) - vital_status: Optional[EnumVitalStatus] = Field(default=None, title="Vital Status", description="""Whether participant is alive or dead""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "subject_id": { + "identifier": True, + "name": "subject_id", + "required": True, + } + }, + "title": "Demographics", + } + ) + + subject_id: str = Field( + default=..., + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + sex: EnumSex = Field( + default=..., + title="Sex", + description="""Sex of Participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + race: list[EnumRace] = Field( + default=..., + title="Race", + description="""Race of Participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + ethnicity: EnumEthnicity = Field( + default=..., + title="Ethnicity", + description="""Ethnicity of Participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + age_at_last_vital_status: Optional[int] = Field( + default=None, + title="Age at Last Vital Status", + description="""Age in days when participant's vital status was last recorded""", + ge=-365, + le=32507, + json_schema_extra={ + "linkml_meta": {"domain_of": ["Demographics"], "unit": {"ucum_code": "d"}} + }, + ) + vital_status: Optional[EnumVitalStatus] = Field( + default=None, + title="Vital Status", + description="""Whether participant is alive or dead""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class IncludeParticipant(Demographics): """ Information specific to INCLUDE participants """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'title': 'INCLUDE Participant'}) - - down_syndrome_status: EnumDownSyndromeStatus = Field(default=..., title="Down Syndrome Status", description="""Down Syndrome status of participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['IncludeParticipant']} }) - age_at_first_engagement: Optional[int] = Field(default=None, title="Age at First Participant Engagement", description="""Age in days of Participant at first recorded study event (enrollment, visit, observation, sample collection, survey completion, etc.). Age at enrollment is preferred, if available.""", ge=-365, le=32507, json_schema_extra = { "linkml_meta": {'domain_of': ['IncludeParticipant'], 'unit': {'ucum_code': 'd'}} }) - subject_id: str = Field(default=..., title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - sex: EnumSex = Field(default=..., title="Sex", description="""Sex of Participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - race: list[EnumRace] = Field(default=..., title="Race", description="""Race of Participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - ethnicity: EnumEthnicity = Field(default=..., title="Ethnicity", description="""Ethnicity of Participant""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - age_at_last_vital_status: Optional[int] = Field(default=None, title="Age at Last Vital Status", description="""Age in days when participant's vital status was last recorded""", ge=-365, le=32507, json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics'], 'unit': {'ucum_code': 'd'}} }) - vital_status: Optional[EnumVitalStatus] = Field(default=None, title="Vital Status", description="""Whether participant is alive or dead""", json_schema_extra = { "linkml_meta": {'domain_of': ['Demographics']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "title": "INCLUDE Participant", + } + ) + + down_syndrome_status: EnumDownSyndromeStatus = Field( + default=..., + title="Down Syndrome Status", + description="""Down Syndrome status of participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["IncludeParticipant"]}}, + ) + age_at_first_engagement: Optional[int] = Field( + default=None, + title="Age at First Participant Engagement", + description="""Age in days of Participant at first recorded study event (enrollment, visit, observation, sample collection, survey completion, etc.). Age at enrollment is preferred, if available.""", + ge=-365, + le=32507, + json_schema_extra={ + "linkml_meta": { + "domain_of": ["IncludeParticipant"], + "unit": {"ucum_code": "d"}, + } + }, + ) + subject_id: str = Field( + default=..., + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + sex: EnumSex = Field( + default=..., + title="Sex", + description="""Sex of Participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + race: list[EnumRace] = Field( + default=..., + title="Race", + description="""Race of Participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + ethnicity: EnumEthnicity = Field( + default=..., + title="Ethnicity", + description="""Ethnicity of Participant""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + age_at_last_vital_status: Optional[int] = Field( + default=None, + title="Age at Last Vital Status", + description="""Age in days when participant's vital status was last recorded""", + ge=-365, + le=32507, + json_schema_extra={ + "linkml_meta": {"domain_of": ["Demographics"], "unit": {"ucum_code": "d"}} + }, + ) + vital_status: Optional[EnumVitalStatus] = Field( + default=None, + title="Vital Status", + description="""Whether participant is alive or dead""", + json_schema_extra={"linkml_meta": {"domain_of": ["Demographics"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Family(Record): """ A group of individuals of some relation who are grouped together in a study. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'family_id': {'identifier': True, - 'name': 'family_id', - 'range': 'string', - 'required': True}}, - 'title': 'Family'}) - family_id: str = Field(default=..., title="Family ID", description="""Global ID for the Family""", json_schema_extra = { "linkml_meta": {'domain_of': ['Family', 'FamilyMember']} }) - family_type: Optional[EnumFamilyType] = Field(default=None, description="""Describes the 'type' of study family, eg, trio.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Family']} }) - family_description: Optional[str] = Field(default=None, description="""Free text describing the study family, such as potential inheritance or details about consanguinity""", json_schema_extra = { "linkml_meta": {'domain_of': ['Family']} }) - consanguinity: Optional[EnumConsanguinityAssertion] = Field(default=None, description="""Is there known or suspected consanguinity in this study family?""", json_schema_extra = { "linkml_meta": {'domain_of': ['Family']} }) - family_study_focus: Optional[str] = Field(default=None, description="""The specific focus of the investigation, eg, a condition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Family']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "family_id": { + "identifier": True, + "name": "family_id", + "range": "string", + "required": True, + } + }, + "title": "Family", + } + ) + + family_id: str = Field( + default=..., + title="Family ID", + description="""Global ID for the Family""", + json_schema_extra={"linkml_meta": {"domain_of": ["Family", "FamilyMember"]}}, + ) + family_type: Optional[EnumFamilyType] = Field( + default=None, + description="""Describes the 'type' of study family, eg, trio.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Family"]}}, + ) + family_description: Optional[str] = Field( + default=None, + description="""Free text describing the study family, such as potential inheritance or details about consanguinity""", + json_schema_extra={"linkml_meta": {"domain_of": ["Family"]}}, + ) + consanguinity: Optional[EnumConsanguinityAssertion] = Field( + default=None, + description="""Is there known or suspected consanguinity in this study family?""", + json_schema_extra={"linkml_meta": {"domain_of": ["Family"]}}, + ) + family_study_focus: Optional[str] = Field( + default=None, + description="""The specific focus of the investigation, eg, a condition.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Family"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class FamilyRelationship(Record): """ A relationship between two Subjects. Directed as follows """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'family_relationship_id': {'identifier': True, - 'name': 'family_relationship_id', - 'range': 'string', - 'required': True}, - 'subject_id': {'description': 'The family member Subject who ' - 'is the relationship "object".', - 'name': 'subject_id', - 'required': True}}, - 'title': 'Family Member Relationship'}) - - family_relationship_id: str = Field(default=..., title="Family Relationship ID", description="""Global ID for the Family Relationship""", json_schema_extra = { "linkml_meta": {'domain_of': ['FamilyRelationship']} }) - family_member_id: str = Field(default=..., description="""The family member Subject who is the relationship \"subject\".""", json_schema_extra = { "linkml_meta": {'domain_of': ['FamilyRelationship']} }) - relationship: str = Field(default=..., description="""Code definting the relationship predicate. Relationship of the \"Family Member\" to the \"Subject\", eg, mother of.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FamilyRelationship']} }) - subject_id: str = Field(default=..., title="Study ID", description="""The family member Subject who is the relationship \"object\".""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "family_relationship_id": { + "identifier": True, + "name": "family_relationship_id", + "range": "string", + "required": True, + }, + "subject_id": { + "description": "The family member Subject who " + 'is the relationship "object".', + "name": "subject_id", + "required": True, + }, + }, + "title": "Family Member Relationship", + } + ) + + family_relationship_id: str = Field( + default=..., + title="Family Relationship ID", + description="""Global ID for the Family Relationship""", + json_schema_extra={"linkml_meta": {"domain_of": ["FamilyRelationship"]}}, + ) + family_member_id: str = Field( + default=..., + description="""The family member Subject who is the relationship \"subject\".""", + json_schema_extra={"linkml_meta": {"domain_of": ["FamilyRelationship"]}}, + ) + relationship: str = Field( + default=..., + description="""Code definting the relationship predicate. Relationship of the \"Family Member\" to the \"Subject\", eg, mother of.""", + json_schema_extra={"linkml_meta": {"domain_of": ["FamilyRelationship"]}}, + ) + subject_id: str = Field( + default=..., + title="Study ID", + description="""The family member Subject who is the relationship \"object\".""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class FamilyMember(Record): """ Designates a Subject as a member of a family with a specified role. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'family_id': {'name': 'family_id', 'required': True}, - 'subject_id': {'name': 'subject_id', 'required': True}}, - 'title': 'Family Member', - 'unique_keys': {'main': {'description': 'Family membership is defined by ' - 'family and subject ids.', - 'unique_key_name': 'main', - 'unique_key_slots': ['family_id', 'subject_id']}}}) - - family_id: str = Field(default=..., title="Family ID", description="""Global ID for the Family""", json_schema_extra = { "linkml_meta": {'domain_of': ['Family', 'FamilyMember']} }) - subject_id: str = Field(default=..., title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - family_role: Optional[str] = Field(default=None, description="""The \"role\" of this individual in this family. Could include terms like \"proband\", \"mother\", etc.""", json_schema_extra = { "linkml_meta": {'domain_of': ['FamilyMember']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "family_id": {"name": "family_id", "required": True}, + "subject_id": {"name": "subject_id", "required": True}, + }, + "title": "Family Member", + "unique_keys": { + "main": { + "description": "Family membership is defined by " + "family and subject ids.", + "unique_key_name": "main", + "unique_key_slots": ["family_id", "subject_id"], + } + }, + } + ) + + family_id: str = Field( + default=..., + title="Family ID", + description="""Global ID for the Family""", + json_schema_extra={"linkml_meta": {"domain_of": ["Family", "FamilyMember"]}}, + ) + subject_id: str = Field( + default=..., + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + family_role: Optional[str] = Field( + default=None, + description="""The \"role\" of this individual in this family. Could include terms like \"proband\", \"mother\", etc.""", + json_schema_extra={"linkml_meta": {"domain_of": ["FamilyMember"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class SubjectAssertion(Record): """ Assertion about a particular Subject. May include Conditions, Measurements, etc. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'assertion_id': {'identifier': True, - 'name': 'assertion_id', - 'range': 'string', - 'required': True}}, - 'title': 'Subject Assertion'}) - - assertion_id: str = Field(default=..., title="Assertion ID", description="""INCLUDE Global ID for the Assertion""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - subject_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - encounter_id: Optional[str] = Field(default=None, title="Encounter ID", description="""Unique identifier for this Encounter.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion', 'BiospecimenCollection', 'Encounter']} }) - assertion_provenance: Optional[EnumAssertionProvenance] = Field(default=None, title="Assertion Provenance", description="""The original source of this assertion""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - age_at_assertion: Optional[int] = Field(default=None, title="Age at assertion", description="""The age in days of the Subject when the assertion was made.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion'], 'unit': {'ucum_code': 'd'}} }) - age_at_event: Optional[int] = Field(default=None, title="Age at event", description="""The age in days of the Subject at the time point which the assertion describes, eg, age of onset or when a measurement was performed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion', 'Encounter'], 'unit': {'ucum_code': 'd'}} }) - age_at_resolution: Optional[int] = Field(default=None, title="Age at resolution", description="""The age in days of the Subject when the asserted state was resolved.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion'], 'unit': {'ucum_code': 'd'}} }) - concept: Optional[list[str]] = Field(default=[], title="Concept", description="""The structured term defining the meaning of the assertion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - concept_source: Optional[str] = Field(default=None, title="Concept Source Text", description="""The source text yielding the standardized concept.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - value_concept: Optional[list[str]] = Field(default=[], title="Value concept", description="""The structured term defining the value of the assertion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - value_number: Optional[float] = Field(default=None, title="Value Number", description="""The numeric value of the assertion.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - value_source: Optional[str] = Field(default=None, title="Value Source Text", description="""The source text yielding the value.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - value_unit: Optional[str] = Field(default=None, title="Value Units", description="""The structured term defining the units of the value.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - value_unit_source: Optional[str] = Field(default=None, title="Value Units Source Text", description="""The source text yielding the value's units.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "assertion_id": { + "identifier": True, + "name": "assertion_id", + "range": "string", + "required": True, + } + }, + "title": "Subject Assertion", + } + ) + + assertion_id: str = Field( + default=..., + title="Assertion ID", + description="""INCLUDE Global ID for the Assertion""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + subject_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + encounter_id: Optional[str] = Field( + default=None, + title="Encounter ID", + description="""Unique identifier for this Encounter.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion", "BiospecimenCollection", "Encounter"] + } + }, + ) + assertion_provenance: Optional[EnumAssertionProvenance] = Field( + default=None, + title="Assertion Provenance", + description="""The original source of this assertion""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + age_at_assertion: Optional[int] = Field( + default=None, + title="Age at assertion", + description="""The age in days of the Subject when the assertion was made.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion"], + "unit": {"ucum_code": "d"}, + } + }, + ) + age_at_event: Optional[int] = Field( + default=None, + title="Age at event", + description="""The age in days of the Subject at the time point which the assertion describes, eg, age of onset or when a measurement was performed.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion", "Encounter"], + "unit": {"ucum_code": "d"}, + } + }, + ) + age_at_resolution: Optional[int] = Field( + default=None, + title="Age at resolution", + description="""The age in days of the Subject when the asserted state was resolved.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion"], + "unit": {"ucum_code": "d"}, + } + }, + ) + concept: Optional[list[str]] = Field( + default=[], + title="Concept", + description="""The structured term defining the meaning of the assertion.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + concept_source: Optional[str] = Field( + default=None, + title="Concept Source Text", + description="""The source text yielding the standardized concept.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + value_concept: Optional[list[str]] = Field( + default=[], + title="Value concept", + description="""The structured term defining the value of the assertion.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + value_number: Optional[float] = Field( + default=None, + title="Value Number", + description="""The numeric value of the assertion.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + value_source: Optional[str] = Field( + default=None, + title="Value Source Text", + description="""The source text yielding the value.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + value_unit: Optional[str] = Field( + default=None, + title="Value Units", + description="""The structured term defining the units of the value.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + value_unit_source: Optional[str] = Field( + default=None, + title="Value Units Source Text", + description="""The source text yielding the value's units.""", + json_schema_extra={"linkml_meta": {"domain_of": ["SubjectAssertion"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Concept(ConfiguredBaseModel): """ A standardized concept with display information. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'concept_curie': {'identifier': True, - 'name': 'concept_curie', - 'required': True}}, - 'title': 'Concept'}) - concept_curie: str = Field(default=..., title="Concept Curie", description="""The standardized curie for the term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Concept']} }) - display: Optional[str] = Field(default=None, title="Display String", description="""The friendly display string of the coded term.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Concept']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "concept_curie": { + "identifier": True, + "name": "concept_curie", + "required": True, + } + }, + "title": "Concept", + } + ) + + concept_curie: str = Field( + default=..., + title="Concept Curie", + description="""The standardized curie for the term.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Concept"]}}, + ) + display: Optional[str] = Field( + default=None, + title="Display String", + description="""The friendly display string of the coded term.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Concept"]}}, + ) class Sample(Record): """ A functionally equivalent specimen taken from a participant or processed from such a sample. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'biospecimen_collection_id': {'description': 'Biospecimen ' - 'Collection ' - 'during which ' - 'this sample was ' - 'generated.', - 'name': 'biospecimen_collection_id'}, - 'sample_id': {'identifier': True, - 'name': 'sample_id', - 'range': 'string', - 'required': True}}, - 'title': 'Sample'}) - - sample_id: str = Field(default=..., title="Sample ID", description="""The unique identifier for this Sample.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot', 'File']} }) - biospecimen_collection_id: Optional[str] = Field(default=None, title="Biospecimen Collection ID", description="""Biospecimen Collection during which this sample was generated.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'BiospecimenCollection']} }) - parent_sample_id: Optional[str] = Field(default=None, title="Parent Sample ID", description="""Sample from which this sample is derived""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample']} }) - sample_type: str = Field(default=..., title="Sample Type", description="""Type of material of which this Sample is comprised. UBERON is recommended.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample']} }) - processing: Optional[list[str]] = Field(default=[], title="Sample Processing", description="""Processing that was applied to the Parent Sample or from the Biospecimen Collection that yielded this distinct sample. OBI is recommended.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample']} }) - availablity_status: Optional[EnumAvailabilityStatus] = Field(default=None, title="Sample Availability", description="""Can this Sample be requested for further analysis?""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot']} }) - storage_method: Optional[list[str]] = Field(default=[], title="Sample Storage Method", description="""Sample storage method, eg, Frozen or with additives. OBI may be suitable, or ChEBI for additives.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample']} }) - quantity_number: Optional[float] = Field(default=None, title="Quantity", description="""The total quantity of the specimen""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot']} }) - quantity_unit: Optional[str] = Field(default=None, title="Quantity Units", description="""The structured term defining the units of the quantity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "biospecimen_collection_id": { + "description": "Biospecimen " + "Collection " + "during which " + "this sample was " + "generated.", + "name": "biospecimen_collection_id", + }, + "sample_id": { + "identifier": True, + "name": "sample_id", + "range": "string", + "required": True, + }, + }, + "title": "Sample", + } + ) + + sample_id: str = Field( + default=..., + title="Sample ID", + description="""The unique identifier for this Sample.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot", "File"]}}, + ) + biospecimen_collection_id: Optional[str] = Field( + default=None, + title="Biospecimen Collection ID", + description="""Biospecimen Collection during which this sample was generated.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Sample", "BiospecimenCollection"]} + }, + ) + parent_sample_id: Optional[str] = Field( + default=None, + title="Parent Sample ID", + description="""Sample from which this sample is derived""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample"]}}, + ) + sample_type: str = Field( + default=..., + title="Sample Type", + description="""Type of material of which this Sample is comprised. UBERON is recommended.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample"]}}, + ) + processing: Optional[list[str]] = Field( + default=[], + title="Sample Processing", + description="""Processing that was applied to the Parent Sample or from the Biospecimen Collection that yielded this distinct sample. OBI is recommended.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample"]}}, + ) + availability_status: Optional[EnumAvailabilityStatus] = Field( + default=None, + title="Sample Availability", + description="""Can this Sample be requested for further analysis?""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot"]}}, + ) + storage_method: Optional[list[str]] = Field( + default=[], + title="Sample Storage Method", + description="""Sample storage method, eg, Frozen or with additives. OBI may be suitable, or ChEBI for additives.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample"]}}, + ) + quantity_number: Optional[float] = Field( + default=None, + title="Quantity", + description="""The total quantity of the specimen""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot"]}}, + ) + quantity_unit: Optional[str] = Field( + default=None, + title="Quantity Units", + description="""The structured term defining the units of the quantity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class BiospecimenCollection(Record): """ A biospecimen collection event which yields one or more Samples. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'biospecimen_collection_id': {'identifier': True, - 'name': 'biospecimen_collection_id', - 'range': 'string', - 'required': True}}, - 'title': 'BiospecimenCollection'}) - - biospecimen_collection_id: str = Field(default=..., title="Biospecimen Collection ID", description="""Unique identifier for this Biospecimen Collection.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'BiospecimenCollection']} }) - age_at_collection: Optional[float] = Field(default=None, title="Age at Biospecimen Collection", description="""The age at which this biospecimen was collected in decimal years.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BiospecimenCollection'], 'unit': {'ucum_code': 'a'}} }) - method: Optional[EnumSampleCollectionMethod] = Field(default=None, title="Biospecimen Collection Method", description="""The approach used to collect the biospecimen.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BiospecimenCollection']} }) - site: Optional[EnumSite] = Field(default=None, title="Biospecimen Collection Site", description="""The location of the specimen collection.""", json_schema_extra = { "linkml_meta": {'domain_of': ['BiospecimenCollection']} }) - spatial_qualifier: Optional[EnumSpatialQualifiers] = Field(default=None, title="Spatial Qualifier", description="""Qualifier that further refine the specific location of biospecimen collection""", json_schema_extra = { "linkml_meta": {'domain_of': ['BiospecimenCollection']} }) - laterality: Optional[EnumLaterality] = Field(default=None, title="Location Laterality", description="""Laterality that further refine the specific location of biospecimen collection""", json_schema_extra = { "linkml_meta": {'domain_of': ['BiospecimenCollection']} }) - encounter_id: Optional[str] = Field(default=None, title="Encounter ID", description="""Unique identifier for this Encounter.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion', 'BiospecimenCollection', 'Encounter']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "biospecimen_collection_id": { + "identifier": True, + "name": "biospecimen_collection_id", + "range": "string", + "required": True, + } + }, + "title": "BiospecimenCollection", + } + ) + + biospecimen_collection_id: str = Field( + default=..., + title="Biospecimen Collection ID", + description="""Unique identifier for this Biospecimen Collection.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Sample", "BiospecimenCollection"]} + }, + ) + age_at_collection: Optional[float] = Field( + default=None, + title="Age at Biospecimen Collection", + description="""The age at which this biospecimen was collected in decimal years.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["BiospecimenCollection"], + "unit": {"ucum_code": "a"}, + } + }, + ) + method: Optional[EnumSampleCollectionMethod] = Field( + default=None, + title="Biospecimen Collection Method", + description="""The approach used to collect the biospecimen.""", + json_schema_extra={"linkml_meta": {"domain_of": ["BiospecimenCollection"]}}, + ) + site: Optional[EnumSite] = Field( + default=None, + title="Biospecimen Collection Site", + description="""The location of the specimen collection.""", + json_schema_extra={"linkml_meta": {"domain_of": ["BiospecimenCollection"]}}, + ) + spatial_qualifier: Optional[EnumSpatialQualifiers] = Field( + default=None, + title="Spatial Qualifier", + description="""Qualifier that further refine the specific location of biospecimen collection""", + json_schema_extra={"linkml_meta": {"domain_of": ["BiospecimenCollection"]}}, + ) + laterality: Optional[EnumLaterality] = Field( + default=None, + title="Location Laterality", + description="""Laterality that further refine the specific location of biospecimen collection""", + json_schema_extra={"linkml_meta": {"domain_of": ["BiospecimenCollection"]}}, + ) + encounter_id: Optional[str] = Field( + default=None, + title="Encounter ID", + description="""Unique identifier for this Encounter.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion", "BiospecimenCollection", "Encounter"] + } + }, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Aliquot(Record): """ A specific tube or amount of a biospecimen associated with a Sample. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'aliquot_id': {'identifier': True, - 'name': 'aliquot_id', - 'range': 'string', - 'required': True}}, - 'title': 'Aliquot'}) - - aliquot_id: str = Field(default=..., title="Aliquot ID", description="""Unique identifier for an Aliquot.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Aliquot']} }) - sample_id: Optional[str] = Field(default=None, title="Sample ID", description="""The unique identifier for this Sample.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot', 'File']} }) - availablity_status: Optional[EnumAvailabilityStatus] = Field(default=None, title="Sample Availability", description="""Can this Sample be requested for further analysis?""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot']} }) - quantity_number: Optional[float] = Field(default=None, title="Quantity", description="""The total quantity of the specimen""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot']} }) - quantity_unit: Optional[str] = Field(default=None, title="Quantity Units", description="""The structured term defining the units of the quantity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot']} }) - concentration_number: Optional[float] = Field(default=None, title="Concentration", description="""What is the concentration of the analyte in the Aliquot?""", json_schema_extra = { "linkml_meta": {'domain_of': ['Aliquot']} }) - concentration_unit: Optional[str] = Field(default=None, title="Concentration Units", description="""Units associated with the concentration of the analyte in the Aliquot.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Aliquot']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "aliquot_id": { + "identifier": True, + "name": "aliquot_id", + "range": "string", + "required": True, + } + }, + "title": "Aliquot", + } + ) + + aliquot_id: str = Field( + default=..., + title="Aliquot ID", + description="""Unique identifier for an Aliquot.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Aliquot"]}}, + ) + sample_id: Optional[str] = Field( + default=None, + title="Sample ID", + description="""The unique identifier for this Sample.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot", "File"]}}, + ) + availability_status: Optional[EnumAvailabilityStatus] = Field( + default=None, + title="Sample Availability", + description="""Can this Sample be requested for further analysis?""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot"]}}, + ) + quantity_number: Optional[float] = Field( + default=None, + title="Quantity", + description="""The total quantity of the specimen""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot"]}}, + ) + quantity_unit: Optional[str] = Field( + default=None, + title="Quantity Units", + description="""The structured term defining the units of the quantity.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot"]}}, + ) + concentration_number: Optional[float] = Field( + default=None, + title="Concentration", + description="""What is the concentration of the analyte in the Aliquot?""", + json_schema_extra={"linkml_meta": {"domain_of": ["Aliquot"]}}, + ) + concentration_unit: Optional[str] = Field( + default=None, + title="Concentration Units", + description="""Units associated with the concentration of the analyte in the Aliquot.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Aliquot"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class Encounter(Record): """ An event at which data was collected about a participant, an intervention was made, or information about a participant was recorded. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'encounter_id': {'identifier': True, - 'name': 'encounter_id', - 'range': 'string', - 'required': True}}, - 'title': 'Participant Encounter'}) - - encounter_id: str = Field(default=..., title="Encounter ID", description="""Unique identifier for this Encounter.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion', 'BiospecimenCollection', 'Encounter']} }) - subject_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - encounter_definition_id: Optional[str] = Field(default=None, title="Encounter Definition ID", description="""Unique identifier for this Encounter Definition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Encounter', 'EncounterDefinition']} }) - age_at_event: Optional[int] = Field(default=None, title="Age at event", description="""The age in days of the Subject at the time point which the assertion describes, eg, age of onset or when a measurement was performed.""", json_schema_extra = { "linkml_meta": {'domain_of': ['SubjectAssertion', 'Encounter'], 'unit': {'ucum_code': 'd'}} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "encounter_id": { + "identifier": True, + "name": "encounter_id", + "range": "string", + "required": True, + } + }, + "title": "Participant Encounter", + } + ) + + encounter_id: str = Field( + default=..., + title="Encounter ID", + description="""Unique identifier for this Encounter.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion", "BiospecimenCollection", "Encounter"] + } + }, + ) + subject_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + encounter_definition_id: Optional[str] = Field( + default=None, + title="Encounter Definition ID", + description="""Unique identifier for this Encounter Definition.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Encounter", "EncounterDefinition"]} + }, + ) + age_at_event: Optional[int] = Field( + default=None, + title="Age at event", + description="""The age in days of the Subject at the time point which the assertion describes, eg, age of onset or when a measurement was performed.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["SubjectAssertion", "Encounter"], + "unit": {"ucum_code": "d"}, + } + }, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class EncounterDefinition(Record): """ A definition of an encounter type in this study, ie, an event at which data was collected about a participant, an intervention was made, or information about a participant was recorded. This may be something planned by a study or a type of data collection. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'activity_definition_id': {'multivalued': True, - 'name': 'activity_definition_id'}, - 'encounter_definition_id': {'identifier': True, - 'name': 'encounter_definition_id', - 'range': 'string', - 'required': True}}, - 'title': 'Encounter Definition'}) - - encounter_definition_id: str = Field(default=..., title="Encounter Definition ID", description="""Unique identifier for this Encounter Definition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Encounter', 'EncounterDefinition']} }) - name: Optional[str] = Field(default=None, title="Name", description="""Name of the entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', - 'Investigator', - 'EncounterDefinition', - 'ActivityDefinition', - 'Dataset']} }) - description: Optional[str] = Field(default=None, title="Description", description="""Description for this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EncounterDefinition', 'ActivityDefinition', 'Dataset']} }) - activity_definition_id: Optional[list[str]] = Field(default=[], title="Activity Definition ID", description="""Unique identifier for this Activity Definition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EncounterDefinition', 'ActivityDefinition']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "activity_definition_id": { + "multivalued": True, + "name": "activity_definition_id", + }, + "encounter_definition_id": { + "identifier": True, + "name": "encounter_definition_id", + "range": "string", + "required": True, + }, + }, + "title": "Encounter Definition", + } + ) + + encounter_definition_id: str = Field( + default=..., + title="Encounter Definition ID", + description="""Unique identifier for this Encounter Definition.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["Encounter", "EncounterDefinition"]} + }, + ) + name: Optional[str] = Field( + default=None, + title="Name", + description="""Name of the entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "VirtualBiorepository", + "Investigator", + "EncounterDefinition", + "ActivityDefinition", + "Dataset", + ] + } + }, + ) + description: Optional[str] = Field( + default=None, + title="Description", + description="""Description for this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["EncounterDefinition", "ActivityDefinition", "Dataset"] + } + }, + ) + activity_definition_id: Optional[list[str]] = Field( + default=[], + title="Activity Definition ID", + description="""Unique identifier for this Activity Definition.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["EncounterDefinition", "ActivityDefinition"]} + }, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class ActivityDefinition(Record): """ A definition of an activity in this study, eg, a biospecimen collection, intervention, survey, or assessment. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'activity_definition_id': {'identifier': True, - 'name': 'activity_definition_id', - 'range': 'string', - 'required': True}}, - 'title': 'Activity Definition'}) - - activity_definition_id: str = Field(default=..., title="Activity Definition ID", description="""Unique identifier for this Activity Definition.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EncounterDefinition', 'ActivityDefinition']} }) - name: Optional[str] = Field(default=None, title="Name", description="""Name of the entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', - 'Investigator', - 'EncounterDefinition', - 'ActivityDefinition', - 'Dataset']} }) - description: Optional[str] = Field(default=None, title="Description", description="""Description for this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EncounterDefinition', 'ActivityDefinition', 'Dataset']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "activity_definition_id": { + "identifier": True, + "name": "activity_definition_id", + "range": "string", + "required": True, + } + }, + "title": "Activity Definition", + } + ) + + activity_definition_id: str = Field( + default=..., + title="Activity Definition ID", + description="""Unique identifier for this Activity Definition.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["EncounterDefinition", "ActivityDefinition"]} + }, + ) + name: Optional[str] = Field( + default=None, + title="Name", + description="""Name of the entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "VirtualBiorepository", + "Investigator", + "EncounterDefinition", + "ActivityDefinition", + "Dataset", + ] + } + }, + ) + description: Optional[str] = Field( + default=None, + title="Description", + description="""Description for this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["EncounterDefinition", "ActivityDefinition", "Dataset"] + } + }, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class File(Record): """ File """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'file_id': {'identifier': True, - 'name': 'file_id', - 'range': 'string', - 'required': True}, - 'sample_id': {'multivalued': True, 'name': 'sample_id'}, - 'subject_id': {'multivalued': True, 'name': 'subject_id'}}, - 'title': 'File'}) - - file_id: str = Field(default=..., title="File ID", description="""Unique identifier for this File.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File', 'Dataset']} }) - subject_id: Optional[list[str]] = Field(default=[], title="Study ID", description="""INCLUDE Global ID for the Subject""", json_schema_extra = { "linkml_meta": {'domain_of': ['Subject', - 'Demographics', - 'FamilyRelationship', - 'FamilyMember', - 'SubjectAssertion', - 'Encounter', - 'File']} }) - sample_id: Optional[list[str]] = Field(default=[], title="Sample ID", description="""The unique identifier for this Sample.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Sample', 'Aliquot', 'File']} }) - filename: Optional[str] = Field(default=None, title="Filename", description="""The name of the file.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - format: Optional[EnumEDAMFormats] = Field(default=None, title="File Format", description="""The format of the file.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - data_category: Optional[EnumDataCategory] = Field(default=None, title="Data Category", description="""General category of data in this Record (e.g. Clinical, Genomics, etc)""", json_schema_extra = { "linkml_meta": {'domain_of': ['StudyMetadata', 'File']} }) - data_type: Optional[EnumEDAMDataTypes] = Field(default=None, title="Data Type", description="""The type of data within this file.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - size: Optional[int] = Field(default=None, title="File Size", description="""Size of the file, in Bytes.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File'], 'unit': {'ucum_code': 'By'}} }) - staging_url: Optional[str] = Field(default=None, title="Staging Location", description="""URL for internal access to the data. May be temporary.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - release_url: Optional[str] = Field(default=None, title="Release Location", description="""URL for controlled or open access to the data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - drs_uri: Optional[str] = Field(default=None, title="DRS URI", description="""DRS location to access the data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - hash: Optional[FileHash] = Field(default=None, title="File Hash", description="""File hash information""", json_schema_extra = { "linkml_meta": {'domain_of': ['File']} }) - external_id: Optional[list[str]] = Field(default=[], title="External Identifiers", description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record']} }) - access_policy_id: Optional[str] = Field(default=None, title="Access Policy ID", description="""Global identifier for the access policy that applies to this row of data.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'AccessPolicy']} }) - study_id: Optional[str] = Field(default=None, title="Study ID", description="""INCLUDE Global ID for the study""", json_schema_extra = { "linkml_meta": {'domain_of': ['Record', 'StudyMetadata']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "file_id": { + "identifier": True, + "name": "file_id", + "range": "string", + "required": True, + }, + "sample_id": {"multivalued": True, "name": "sample_id"}, + "subject_id": {"multivalued": True, "name": "subject_id"}, + }, + "title": "File", + } + ) + + file_id: str = Field( + default=..., + title="File ID", + description="""Unique identifier for this File.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File", "Dataset"]}}, + ) + subject_id: Optional[list[str]] = Field( + default=[], + title="Study ID", + description="""INCLUDE Global ID for the Subject""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "Subject", + "Demographics", + "FamilyRelationship", + "FamilyMember", + "SubjectAssertion", + "Encounter", + "File", + ] + } + }, + ) + sample_id: Optional[list[str]] = Field( + default=[], + title="Sample ID", + description="""The unique identifier for this Sample.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Sample", "Aliquot", "File"]}}, + ) + filename: Optional[str] = Field( + default=None, + title="Filename", + description="""The name of the file.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + format: Optional[EnumEDAMFormats] = Field( + default=None, + title="File Format", + description="""The format of the file.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + data_category: Optional[EnumDataCategory] = Field( + default=None, + title="Data Category", + description="""General category of data in this Record (e.g. Clinical, Genomics, etc)""", + json_schema_extra={"linkml_meta": {"domain_of": ["StudyMetadata", "File"]}}, + ) + data_type: Optional[EnumEDAMDataTypes] = Field( + default=None, + title="Data Type", + description="""The type of data within this file.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + size: Optional[int] = Field( + default=None, + title="File Size", + description="""Size of the file, in Bytes.""", + json_schema_extra={ + "linkml_meta": {"domain_of": ["File"], "unit": {"ucum_code": "By"}} + }, + ) + staging_url: Optional[str] = Field( + default=None, + title="Staging Location", + description="""URL for internal access to the data. May be temporary.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + release_url: Optional[str] = Field( + default=None, + title="Release Location", + description="""URL for controlled or open access to the data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + drs_uri: Optional[str] = Field( + default=None, + title="DRS URI", + description="""DRS location to access the data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + hash: Optional[FileHash] = Field( + default=None, + title="File Hash", + description="""File hash information""", + json_schema_extra={"linkml_meta": {"domain_of": ["File"]}}, + ) + external_id: Optional[list[str]] = Field( + default=[], + title="External Identifiers", + description="""Other identifiers for this entity, eg, from the submitting study or in systems like dbGaP""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record"]}}, + ) + access_policy_id: Optional[str] = Field( + default=None, + title="Access Policy ID", + description="""Global identifier for the access policy that applies to this row of data.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "AccessPolicy"]}}, + ) + study_id: Optional[str] = Field( + default=None, + title="Study ID", + description="""INCLUDE Global ID for the study""", + json_schema_extra={"linkml_meta": {"domain_of": ["Record", "StudyMetadata"]}}, + ) class FileHash(ConfiguredBaseModel): """ Type and value of a file content hash. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'title': 'File Hash'}) - hash_type: Optional[EnumFileHashType] = Field(default=None, title="File Hash Type", description="""The type of file hash, eg, md5""", json_schema_extra = { "linkml_meta": {'domain_of': ['FileHash']} }) - hash_value: Optional[str] = Field(default=None, title="File Hash Value", description="""The value of the file hash""", json_schema_extra = { "linkml_meta": {'domain_of': ['FileHash']} }) + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "title": "File Hash", + } + ) + + hash_type: Optional[EnumFileHashType] = Field( + default=None, + title="File Hash Type", + description="""The type of file hash, eg, md5""", + json_schema_extra={"linkml_meta": {"domain_of": ["FileHash"]}}, + ) + hash_value: Optional[str] = Field( + default=None, + title="File Hash Value", + description="""The value of the file hash""", + json_schema_extra={"linkml_meta": {"domain_of": ["FileHash"]}}, + ) class Dataset(ConfiguredBaseModel): """ Set of files grouped together for release. """ - linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta({'from_schema': 'https://includedcc.org/common-access-model', - 'slot_usage': {'dataset_id': {'identifier': True, - 'name': 'dataset_id', - 'range': 'string', - 'required': True}, - 'file_id': {'description': 'The list of files comprising this ' - 'dataset.', - 'multivalued': True, - 'name': 'file_id'}}, - 'title': 'Dataset'}) - - dataset_id: str = Field(default=..., title="Dataset ID", description="""Unique identifier for a Dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset']} }) - name: Optional[str] = Field(default=None, title="Name", description="""Name of the entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['VirtualBiorepository', - 'Investigator', - 'EncounterDefinition', - 'ActivityDefinition', - 'Dataset']} }) - description: Optional[str] = Field(default=None, title="Description", description="""Description for this entity.""", json_schema_extra = { "linkml_meta": {'domain_of': ['EncounterDefinition', 'ActivityDefinition', 'Dataset']} }) - do_id: Optional[str] = Field(default=None, title="DOI", description="""Digital Object Identifier (DOI) for this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'DOI', 'Dataset']} }) - file_id: Optional[list[str]] = Field(default=[], title="File ID", description="""The list of files comprising this dataset.""", json_schema_extra = { "linkml_meta": {'domain_of': ['File', 'Dataset']} }) - publication: Optional[list[Publication]] = Field(default=[], title="Publication", description="""Publications associated with this Record.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Study', 'Dataset']} }) - data_collection_start: Optional[str] = Field(default=None, title="Data Collection Start", description="""The date that data collection started. May include only a year.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset']} }) - data_collection_end: Optional[str] = Field(default=None, title="Data Collection End", description="""The date that data collection started. May include only a year.""", json_schema_extra = { "linkml_meta": {'domain_of': ['Dataset']} }) + + linkml_meta: ClassVar[LinkMLMeta] = LinkMLMeta( + { + "from_schema": "https://includedcc.org/common-access-model", + "slot_usage": { + "dataset_id": { + "identifier": True, + "name": "dataset_id", + "range": "string", + "required": True, + }, + "file_id": { + "description": "The list of files comprising this dataset.", + "multivalued": True, + "name": "file_id", + }, + }, + "title": "Dataset", + } + ) + + dataset_id: str = Field( + default=..., + title="Dataset ID", + description="""Unique identifier for a Dataset.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Dataset"]}}, + ) + name: Optional[str] = Field( + default=None, + title="Name", + description="""Name of the entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": [ + "VirtualBiorepository", + "Investigator", + "EncounterDefinition", + "ActivityDefinition", + "Dataset", + ] + } + }, + ) + description: Optional[str] = Field( + default=None, + title="Description", + description="""Description for this entity.""", + json_schema_extra={ + "linkml_meta": { + "domain_of": ["EncounterDefinition", "ActivityDefinition", "Dataset"] + } + }, + ) + do_id: Optional[str] = Field( + default=None, + title="DOI", + description="""Digital Object Identifier (DOI) for this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study", "DOI", "Dataset"]}}, + ) + file_id: Optional[list[str]] = Field( + default=[], + title="File ID", + description="""The list of files comprising this dataset.""", + json_schema_extra={"linkml_meta": {"domain_of": ["File", "Dataset"]}}, + ) + publication: Optional[list[Publication]] = Field( + default=[], + title="Publication", + description="""Publications associated with this Record.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Study", "Dataset"]}}, + ) + data_collection_start: Optional[str] = Field( + default=None, + title="Data Collection Start", + description="""The date that data collection started. May include only a year.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Dataset"]}}, + ) + data_collection_end: Optional[str] = Field( + default=None, + title="Data Collection End", + description="""The date that data collection started. May include only a year.""", + json_schema_extra={"linkml_meta": {"domain_of": ["Dataset"]}}, + ) # Model rebuild diff --git a/src/common_access_model/schema/common_access_model.yaml b/src/common_access_model/schema/common_access_model.yaml index 2f3e4bdc..cde48776 100644 --- a/src/common_access_model/schema/common_access_model.yaml +++ b/src/common_access_model/schema/common_access_model.yaml @@ -89,7 +89,7 @@ types: base: str description: Dewrangle di global ID. For FHIR Diagnostic Report Resources. -# To be created + # To be created fmGlobalID: uri: xsd:string base: str @@ -103,7 +103,6 @@ types: base: str description: Dewrangle __ global ID. For FHIR MedicationStatement Resources. - classes: Any: class_uri: linkml:Any @@ -112,20 +111,20 @@ classes: title: Record abstract: true slots: - - external_id - - access_policy_id - - study_id + - external_id + - access_policy_id + - study_id AccessPolicy: title: Access Policy description: The access policy that describes the controls around use of data slots: - - access_policy_id - - data_use_accession - - data_use_permission - - data_use_modifier - - disease_limitation - - access_description - - website + - access_policy_id + - data_use_accession + - data_use_permission + - data_use_modifier + - disease_limitation + - access_description + - website slot_usage: access_policy_id: range: coGlobalID @@ -137,7 +136,7 @@ classes: mixins: - Record slots: - #TODO: Split out core Study items and additional study metadata? + #TODO: Split out core Study items and additional study metadata? #- study_id Inherits study_id from Record now. - parent_study - study_title @@ -149,7 +148,7 @@ classes: - contact - study_description - website - # - dbgap : Should we call this out specifically or just use an external id? + # - dbgap : Should we call this out specifically or just use an external id? - publication - acknowledgments - citation_statement @@ -239,7 +238,8 @@ classes: - website Subject: title: Subject - description: This entity is the subject about which data or references are recorded. + description: + This entity is the subject about which data or references are recorded. This includes the idea of a human participant in a study, a cell line, an animal model, or any other similar entity. mixins: @@ -276,11 +276,11 @@ classes: mixins: - Record slots: - - family_id - - family_type - - family_description - - consanguinity - - family_study_focus + - family_id + - family_type + - family_description + - consanguinity + - family_study_focus slot_usage: family_id: range: grGlobalID @@ -289,15 +289,15 @@ classes: FamilyRelationship: title: Family Member Relationship description: A relationship between two Subjects. Directed as follows - - + + mixins: - Record slots: - - family_relationship_id - - family_member_id - - relation - - subject_id + - family_relationship_id + - family_member_id + - relation + - subject_id slot_usage: family_relationship_id: range: fmGlobalID @@ -349,8 +349,8 @@ classes: assertion_id: range: obGlobalID any_of: - - range: deGlobalID - - range: msGlobalID + - range: deGlobalID + - range: msGlobalID required: true identifier: true Concept: @@ -374,7 +374,7 @@ classes: - parent_sample_id - sample_type - processing - - availablity_status + - availability_status - storage_method - quantity_number - quantity_unit @@ -411,7 +411,7 @@ classes: slots: - aliquot_id - sample_id - - availablity_status + - availability_status - quantity_number - quantity_unit - concentration_number @@ -545,7 +545,6 @@ classes: assay_type: required: true - Dataset: title: Dataset description: Set of files grouped together for release. @@ -568,7 +567,6 @@ classes: multivalued: true description: The list of files comprising this dataset. - slots: study_id: title: Study ID @@ -578,12 +576,12 @@ slots: access_policy_id: title: Access Policy ID description: Global identifier for the access policy that applies to - this row of data. + this row of data. range: AccessPolicy data_use_accession: title: Data Use Accession description: Accession used to provision access to the record, eg, - a dbGaP phsID. + a dbGaP phsID. range: uriorcurie data_use_permission: title: Data Use Permission @@ -597,7 +595,7 @@ slots: disease_limitation: title: Data Use Disease Limitation description: If the access is limited to a specific disease purpose, - it is specified here. + it is specified here. range: string access_description: title: Access Description @@ -758,10 +756,11 @@ slots: range: string citation_statement: title: Citation Statement - description: Statement that secondary data users should use to acknowledge use of this study or dataset. E.g., - "The results analyzed and here are based in whole or in part upon data generated by the INCLUDE - (INvestigation of Co-occurring conditions across the Lifespan to Understand Down syndromE) Project , and were accessed from the INCLUDE Data Hub and ." + description: + Statement that secondary data users should use to acknowledge use of this study or dataset. E.g., + "The results analyzed and here are based in whole or in part upon data generated by the INCLUDE + (INvestigation of Co-occurring conditions across the Lifespan to Understand Down syndromeE) Project , and were accessed from the INCLUDE Data Hub and ." range: string bibliographic_reference: title: Bibiliographic Reference @@ -795,8 +794,9 @@ slots: age_at_first_engagement: #Should this just be a reference out to an encounter? title: Age at First Participant Engagement - description: Age in days of Participant at first recorded study event (enrollment, visit, observation, - sample collection, survey completion, etc.). Age at enrollment is preferred, if available. + description: + Age in days of Participant at first recorded study event (enrollment, visit, observation, + sample collection, survey completion, etc.). Age at enrollment is preferred, if available. range: integer unit: ucum_code: d @@ -824,7 +824,7 @@ slots: range: EnumFamilyType family_description: description: Free text describing the study family, such as potential - inheritance or details about consanguinity + inheritance or details about consanguinity range: string consanguinity: description: Is there known or suspected consanguinity in this study family? @@ -842,8 +842,9 @@ slots: range: Subject inlined: false relation: - description: Code definting the relationship predicate. Relationship of the "Family Member" - to the "Subject", eg, mother of. Ideally uses KIN ontology. + description: + Code definting the relationship predicate. Relationship of the "Family Member" + to the "Subject", eg, mother of. Ideally uses KIN ontology. required: true range: EnumFamilyRelation family_membership_id: @@ -865,7 +866,8 @@ slots: ucum_code: d age_at_event: title: Age at event - description: The age in days of the Subject at the time point which the assertion describes, + description: + The age in days of the Subject at the time point which the assertion describes, eg, age of onset or when a measurement was performed. range: integer unit: @@ -940,11 +942,12 @@ slots: range: uriorcurie processing: title: Sample Processing - description: Processing that was applied to the Parent Sample or from the Biospecimen Collection that yielded - this distinct sample. OBI is recommended. + description: + Processing that was applied to the Parent Sample or from the Biospecimen Collection that yielded + this distinct sample. OBI is recommended. range: uriorcurie multivalued: true - availablity_status: + availability_status: title: Sample Availability description: Can this Sample be requested for further analysis? range: EnumAvailabilityStatus @@ -1021,7 +1024,8 @@ slots: range: EnumEDAMFormats file_extension: title: File Extension - description: Typically a 3-4 letter code at the end of a filename that identifies the file format. + description: + Typically a 3-4 letter code at the end of a filename that identifies the file format. Empty string for no extension. range: string required: true @@ -1098,8 +1102,9 @@ slots: enums: EnumDataUsePermission: title: Data Use Permission - description: Data Use Ontology (DUO) terms for data use permissions. - #Do we need a "registered tier" item? + description: + Data Use Ontology (DUO) terms for data use permissions. + #Do we need a "registered tier" item? reachable_from: source_ontology: bioregistry:duo source_nodes: @@ -1223,7 +1228,7 @@ enums: description: Categories of data which may be collected about participants. #TODO: Add meanings permissible_values: - #Should we have these two demo/clinical data categories? + #Should we have these two demo/clinical data categories? unharmonized_demographic_clinical_data: title: Unharmonized Demographic/Clinical Data harmonized_demographic_clinical_data: @@ -1261,7 +1266,8 @@ enums: participant: description: Study participant with consent, assent, or waiver of consent. non_participant: - description: An individual associated with a study who was not explictly consented, eg, the subject + description: + An individual associated with a study who was not explicitly consented, eg, the subject of a reported family history. cell_line: description: Cell Line diff --git a/tests/data/invalid/DOI-001.yaml b/tests/data/invalid/DOI-001.yaml index 9b5fbca0..431213e1 100644 --- a/tests/data/invalid/DOI-001.yaml +++ b/tests/data/invalid/DOI-001.yaml @@ -1 +1 @@ -bibliographic_reference: "Test text" \ No newline at end of file +bibliographic_reference: "Test text" diff --git a/tests/data/valid/DOI-000.yaml b/tests/data/valid/DOI-000.yaml index 3e6391f5..e01ca930 100644 --- a/tests/data/valid/DOI-000.yaml +++ b/tests/data/valid/DOI-000.yaml @@ -1,2 +1,2 @@ do_id: "https://doi.org/10.71738/" -bibliographic_reference: "Test text" \ No newline at end of file +bibliographic_reference: "Test text" diff --git a/tests/data/valid/Demographics-000.yaml b/tests/data/valid/Demographics-000.yaml index 9123c2e4..4f47c2dd 100644 --- a/tests/data/valid/Demographics-000.yaml +++ b/tests/data/valid/Demographics-000.yaml @@ -1,5 +1,5 @@ subject_id: subject000 sex: male -race: - - american_indian_or_alaska_native -ethnicity: hispanic_or_latino \ No newline at end of file +race: + - american_indian_or_alaska_native +ethnicity: hispanic_or_latino diff --git a/tests/data/valid/Subject-000.yaml b/tests/data/valid/Subject-000.yaml index 54f88a0c..3579db4e 100644 --- a/tests/data/valid/Subject-000.yaml +++ b/tests/data/valid/Subject-000.yaml @@ -1,2 +1,2 @@ subject_id: subject000 -subject_type: participant \ No newline at end of file +subject_type: participant diff --git a/tests/test_data.py b/tests/test_data.py index cd0e48a4..8012c907 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -1,17 +1,19 @@ """Data test.""" -import os + import glob -import pytest +import os from pathlib import Path -import common_access_model.datamodel.common_access_model +import pytest from linkml_runtime.loaders import yaml_loader +import common_access_model.datamodel.common_access_model + DATA_DIR_VALID = Path(__file__).parent / "data" / "valid" DATA_DIR_INVALID = Path(__file__).parent / "data" / "invalid" -VALID_EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR_VALID, '*.yaml')) -INVALID_EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR_INVALID, '*.yaml')) +VALID_EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR_VALID, "*.yaml")) +INVALID_EXAMPLE_FILES = glob.glob(os.path.join(DATA_DIR_INVALID, "*.yaml")) @pytest.mark.parametrize("filepath", VALID_EXAMPLE_FILES) @@ -25,7 +27,10 @@ def test_valid_data_files(filepath): obj = yaml_loader.load(filepath, target_class=tgt_class) assert obj + """This may not work for every expected error type- it uses ValueError""" + + @pytest.mark.parametrize("filepath", INVALID_EXAMPLE_FILES) def test_valid_data_files(filepath): """Test loading of all valid data files.""" @@ -36,4 +41,3 @@ def test_valid_data_files(filepath): ) with pytest.raises(ValueError): obj = yaml_loader.load(filepath, target_class=tgt_class) -