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 pydantic import (
    BaseModel,
    ConfigDict,
    Field,
    RootModel,
    field_validator
)


metamodel_version = "None"
version = "4.3.4"


class ConfiguredBaseModel(BaseModel):
    model_config = ConfigDict(
        validate_assignment = True,
        validate_default = True,
        extra = "forbid",
        arbitrary_types_allowed = True,
        use_enum_values = True,
        strict = False,
    )
    pass




class LinkMLMeta(RootModel):
    root: dict[str, Any] = {}
    model_config = ConfigDict(frozen=True)

    def __getattr__(self, key:str):
        return getattr(self.root, key)

    def __getitem__(self, key:str):
        return self.root[key]

    def __setitem__(self, key:str, value):
        self.root[key] = value

    def __contains__(self, key:str) -> bool:
        return key in self.root


linkml_meta = None

class ResponseEnum(str, Enum):
    """
    A response to a treatment or intervention
    """
    therapeutic_response = "therapeutic_response"
    """
    A positive response to a treatment or intervention
    """
    negative = "negative"
    """
    A negative response to a treatment or intervention
    """


class ResponseTargetEnum(str, Enum):
    """
    The target of a treatment or intervention
    """
    cohort = "cohort"
    """
    A group of individuals that are the target of a treatment or intervention
    """
    cell_line = "cell line"
    """
    A cell line that is the target of a treatment or intervention
    """
    individual = "individual"
    """
    An individual that is the target of a treatment or intervention
    """
    sample = "sample"
    """
    A biological materialsample that is the target of a treatment or intervention
    """


class ClinicalTrialStatusEnum(str, Enum):
    """
    Enumeration of clinical trial statuses indicating the recruitment state, availability, or regulatory status of a clinical study or intervention.

    """
    ACTIVE_NOT_RECRUITING = "ACTIVE_NOT_RECRUITING"
    """
    The study is ongoing but not currently recruiting participants.
    """
    APPROVED_FOR_MARKETING = "APPROVED_FOR_MARKETING"
    """
    The intervention has received regulatory approval for marketing.
    """
    AVAILABLE = "AVAILABLE"
    """
    The intervention or data is available for use or distribution.
    """
    COMPLETED = "COMPLETED"
    """
    The study has ended normally and participants are no longer being examined or treated.
    """
    ENROLLING_BY_INVITATION = "ENROLLING_BY_INVITATION"
    """
    Participants are being enrolled by invitation only.
    """
    NO_LONGER_AVAILABLE = "NO_LONGER_AVAILABLE"
    """
    The intervention or data is no longer available.
    """
    NOT_YET_RECRUITING = "NOT_YET_RECRUITING"
    """
    The study has not yet started recruiting participants.
    """
    RECRUITING = "RECRUITING"
    """
    The study is currently recruiting participants.
    """
    SUSPENDED = "SUSPENDED"
    """
    The study has been temporarily halted but may resume.
    """
    TEMPORARILY_NOT_AVAILABLE = "TEMPORARILY_NOT_AVAILABLE"
    """
    The intervention or data is not currently available but may become available later.
    """
    TERMINATED = "TERMINATED"
    """
    The study has stopped prematurely and will not start again.
    """
    UNKNOWN = "UNKNOWN"
    """
    The recruitment or availability status is unknown.
    """
    WITHDRAWN = "WITHDRAWN"
    """
    The study was halted before enrolling its first participant.
    """


class ClinicalTrialAgeStageEnum(str, Enum):
    """
    Enumeration of age stages or populations commonly used in clinical trials to categorize participant demographics and target populations.
    """
    adult = "adult"
    child = "child"
    older_adult = "older_adult"


class ApprovalStatusEnum(str, Enum):
    discovery_and_development_phase = "discovery_and_development_phase"
    """
    Discovery & Development Phase. Discovery involves researchers finding new possibilities for medication through testing molecular compounds, noting unexpected effects from existing treatments, or the creation of new technology that allows novel ways of targeting medical products to sites in the body. Drug development occurs after researchers identify potential compounds for experiments.
    """
    preclinical_research_phase = "preclinical_research_phase"
    """
    Preclinical Research Phase.  Once researchers have examined the possibilities a new drug may contain, they must do preliminary research to determine its potential for harm (toxicity). This is categorized as preclinical research and can be one of two types: in vitro or in vivo.
    """
    fda_clinical_research_phase = "fda_clinical_research_phase"
    """
    Clinical Research Phase. Clinical research involves trials of the drug on people, and it is one of the most involved stages in the drug development and approval process. Clinical trials must answer specific questions and follow a protocol determined by the drug researcher or manufacturer.
    """
    fda_review_phase_4 = "fda_review_phase_4"
    """
    FDA Review
    """
    fda_post_market_safety_review = "fda_post_market_safety_review"
    """
    FDA Post-Market Safety Monitoring.  The last phase of drug approval is an ongoing one while the drug is on the marketplace. If a developer wants to change anything about the drug formulation or approve it for a new use, they must apply with the FDA. The FDA also frequently reviews the drug’s advertising and its manufacturing facility to make sure everything involved in its creation and marketing is in compliance with regulations.
    """
    fda_clinical_research_phase_1 = "fda_clinical_research_phase_1"
    """
    In the FDA Clinical Research Phase, the Clinical Research Phase 1 involves 20 – 100 study participants and lasts several months. This phase is used to determine the safety and dosage of the drug, and about 70% of these drugs move on to the next clinical research phase.
    """
    fda_clinical_research_phase_2 = "fda_clinical_research_phase_2"
    """
    In the FDA Clinical Research Phase, the Clinical Research Phase 2 involves up to several hundred people, who must have the disease or condition the drug supposes to treat. This phase can last from a few months to two years, and its purpose is to monitor the efficacy of the drug, as well as note side effects that may occur.
    """
    fda_clinical_research_phase_3 = "fda_clinical_research_phase_3"
    """
    In the FDA Clinical Research Phase, the Clinical Research Phase 3 involves 300 – 3000 volunteers and can last up to four years. It is used to continue monitoring the efficacy of the drug, as well as exploring any longer-term adverse reactions.
    """
    fda_clinical_research_phase_4 = "fda_clinical_research_phase_4"
    """
    In the FDA Clinical Research Phase, the Clinical Research Phase 4 involves several thousands of volunteers who have the disease or condition and continues to monitor safety and efficacy. If a drug passes this phase, it goes on to FDA review.
    """
    fda_fast_track = "fda_fast_track"
    """
    Fast track is a process designed to facilitate the development, and expedite the review of drugs to treat serious conditions and fill an unmet medical need. The purpose is to get important new drugs to the patient earlier. Fast Track addresses a broad range of serious conditions. For more information https://www.fda.gov/patients/fast-track-breakthrough-therapy-accelerated-approval-priority-review/fast-track
    """
    fda_breakthrough_therapy = "fda_breakthrough_therapy"
    """
    Breakthrough Therapy designation is a process designed to expedite the development and review of drugs that are intended to treat a serious condition and preliminary clinical evidence indicates that the drug may demonstrate substantial improvement over available therapy on a clinically significant endpoint(s). For more information https://www.fda.gov/patients/fast-track-breakthrough-therapy-accelerated-approval-priority-review/breakthrough-therapy
    """
    fda_accelerated_approval = "fda_accelerated_approval"
    """
    When studying a new drug, it can sometimes take many years to learn whether a drug actually provides a real effect on how a patient survives, feels, or functions. A positive therapeutic effect that is clinically meaningful in the context of a given disease is known as “clinical benefit”. Mindful of the fact that it may take an extended period of time to measure a drug’s intended clinical benefit, in 1992 FDA instituted the Accelerated Approval regulations. These regulations allowed drugs for serious conditions that filled an unmet medical need to be approved based on a surrogate endpoint. Using a surrogate endpoint enabled the FDA to approve these drugs faster. For more information https://www.fda.gov/patients/fast-track-breakthrough-therapy-accelerated-approval-priority-review/accelerated-approval
    """
    fda_priority_review = "fda_priority_review"
    """
    Prior to approval, each drug marketed in the United States must go through a detailed FDA review process. In 1992, under the Prescription Drug User Act (PDUFA), FDA agreed to specific goals for improving the drug review time and created a two-tiered system of review times – Standard Review and Priority Review. A Priority Review designation means FDA’s goal is to take action on an application within 6 months (compared to 10 months under standard review). For more information https://www.fda.gov/patients/fast-track-breakthrough-therapy-accelerated-approval-priority-review/priority-review
    """
    regular_fda_approval = "regular_fda_approval"
    """
    Regular FDA Approval.  The last phase of drug approval is an ongoing one while the drug is on the marketplace. If a developer wants to change anything about the drug formulation or approve it for a new use, they must apply with the FDA. The FDA also frequently reviews the drug’s advertising and its manufacturing facility to make sure everything involved in its creation and marketing is in compliance with regulations.
    """
    post_approval_withdrawal = "post_approval_withdrawal"


class ClinicalApprovalStatusEnum(str, Enum):
    approved_for_condition = "approved_for_condition"
    fda_approved_for_condition = "fda_approved_for_condition"
    not_approved_for_condition = "not_approved_for_condition"
    post_approval_withdrawal = "post_approval_withdrawal"
    off_label_use = "off_label_use"
    not_provided = "not_provided"


class ResearchPhaseEnum(str, Enum):
    pre_clinical_research_phase = "pre_clinical_research_phase"
    """
    Biolink 'pre_clinical_research' is the union of both the `FDA discovery and development phase` and `FDA preclinical research phase`. Discovery involves researchers finding new possibilities for medication through testing molecular compounds, noting unexpected effects from existing treatments, or the creation of new technology that allows novel ways of targeting medical products to sites in the body. Drug development occurs after researchers identify potential compounds for experiments Preclinical Research Phase. Once researchers have examined the possibilities a new drug may contain, they must do preliminary research to determine its potential for harm (toxicity). This is categorized as preclinical research and can be one of two types: in vitro or in vivo.
    """
    clinical_trial_phase = "clinical_trial_phase"
    """
    Clinical research involves trials of the drug on people, and it is one of the most involved stages in the drug development and approval process. Clinical trials must answer specific questions and follow a protocol determined by the drug researcher or manufacturer.
    """
    clinical_trial_phase_1 = "clinical_trial_phase_1"
    """
    In the FDA Clinical Trial Phase, the Clinical Trial Phase 1 involves 20 – 100 study participants and lasts several months. This phase is used to determine the safety and dosage of the drug, and about 70% of these drugs move on to the next clinical research phase.
    """
    clinical_trial_phase_1_to_2 = "clinical_trial_phase_1_to_2"
    """
    A study that tests the safety, side effects, and best dose of a new treatment. Phase I/II clinical trials also test how well a certain type of cancer or other disease responds to a new treatment. In the phase II part of the clinical trial, patients usually receive the highest dose of treatment that did not cause harmful side effects in the phase I part of the clinical trial. Combining phases I and II may allow research questions to be answered more quickly or with fewer patients. Also called phase 1/phase 2 clinical trial.
    """
    clinical_trial_phase_2 = "clinical_trial_phase_2"
    """
    In the FDA Clinical Trial Phase, the Clinical Trial Phase 2 involves up to several hundred people, who must have the disease or condition the drug supposes to treat. This phase can last from a few months to two years, and its purpose is to monitor the efficacy of the drug, as well as note side effects that may occur.
    """
    clinical_trial_phase_2_to_3 = "clinical_trial_phase_2_to_3"
    """
    A study that tests how well a new treatment works for a certain type of cancer or other disease and compares the new treatment with a standard treatment. Phase II/III clinical trials may also provide more information about the safety and side effects of the new treatment. Combining phases II and III may allow research questions to be answered more quickly or with fewer patients. Also called phase 2/phase 3 clinical trial.
    """
    clinical_trial_phase_3 = "clinical_trial_phase_3"
    """
    In the FDA Clinical Trial Phase, the Clinical Trial Phase 3 involves 300 – 3000 volunteers and can last up to four years. It is used to continue monitoring the efficacy of the drug, as well as exploring any longer-term adverse reactions.
    """
    clinical_trial_phase_4 = "clinical_trial_phase_4"
    """
    In the FDA Clinical Trial Phase, the Clinical Trial Phase 4 involves several thousands of volunteers who have the disease or condition and continues to monitor safety and efficacy. If a drug passes this phase, it goes on to FDA review.
    """
    not_provided = "not_provided"


class DirectionQualifierEnum(str, Enum):
    increased = "increased"
    upregulated = "upregulated"
    decreased = "decreased"
    downregulated = "downregulated"


class ChemicalEntityDerivativeEnum(str, Enum):
    metabolite = "metabolite"


class ChemicalOrGeneOrGeneProductFormOrVariantEnum(str, Enum):
    genetic_variant_form = "genetic_variant_form"
    modified_form = "modified_form"
    loss_of_function_variant_form = "loss_of_function_variant_form"
    non_loss_of_function_variant_form = "non_loss_of_function_variant_form"
    gain_of_function_variant_form = "gain_of_function_variant_form"
    dominant_negative_variant_form = "dominant_negative_variant_form"
    polymorphic_form = "polymorphic_form"
    snp_form = "snp_form"
    mutant_form = "mutant_form"
    analog_form = "analog_form"


class GeneOrGeneProductOrChemicalPartQualifierEnum(str, Enum):
    number_3_prime_utr = "3_prime_utr"
    number_5_prime_utr = "5_prime_utr"
    polya_tail = "polya_tail"
    promoter = "promoter"
    enhancer = "enhancer"
    exon = "exon"
    intron = "intron"


class GeneOrGeneProductOrChemicalEntityAspectEnum(str, Enum):
    activity_or_abundance = "activity_or_abundance"
    """
    Used in cases where the specificity of the relationship can not be determined to be either activity or abundance.  In general, a more specific value from this enumeration should be used.
    """
    abundance = "abundance"
    activity = "activity"
    expression = "expression"
    synthesis = "synthesis"
    degradation = "degradation"
    cleavage = "cleavage"
    hydrolysis = "hydrolysis"
    metabolic_processing = "metabolic_processing"
    mutation_rate = "mutation_rate"
    stability = "stability"
    folding = "folding"
    localization = "localization"
    transport = "transport"
    absorption = "absorption"
    aggregation = "aggregation"
    interaction = "interaction"
    release = "release"
    isomerization = "isomerization"
    secretion = "secretion"
    uptake = "uptake"
    splicing = "splicing"
    molecular_interaction = "molecular_interaction"
    guanyl_nucleotide_exchange = "guanyl_nucleotide_exchange"
    adenyl_nucleotide_exchange = "adenyl_nucleotide_exchange"
    molecular_modification = "molecular_modification"
    acetylation = "acetylation"
    acylation = "acylation"
    alkylation = "alkylation"
    amination = "amination"
    carbamoylation = "carbamoylation"
    ethylation = "ethylation"
    glutathionylation = "glutathionylation"
    glycation = "glycation"
    glycosylation = "glycosylation"
    glucuronidation = "glucuronidation"
    n_linked_glycosylation = "n_linked_glycosylation"
    o_linked_glycosylation = "o_linked_glycosylation"
    hydroxylation = "hydroxylation"
    lipidation = "lipidation"
    farnesylation = "farnesylation"
    geranoylation = "geranoylation"
    myristoylation = "myristoylation"
    palmitoylation = "palmitoylation"
    prenylation = "prenylation"
    methylation = "methylation"
    nitrosation = "nitrosation"
    nucleotidylation = "nucleotidylation"
    phosphorylation = "phosphorylation"
    ribosylation = "ribosylation"
    ADP_ribosylation = "ADP-ribosylation"
    sulfation = "sulfation"
    sumoylation = "sumoylation"
    ubiquitination = "ubiquitination"
    oxidation = "oxidation"
    reduction = "reduction"
    carboxylation = "carboxylation"


class CausalMechanismQualifierEnum(str, Enum):
    modulation = "modulation"
    """
    A causal mechanism that effects the normal functioning of a protein in some way e.g., mixed agonist/antagonist or unclear whether action is positive or negative
    """
    allosteric_modulation = "allosteric_modulation"
    """
    A modulation mechanism that occurs when a chemical exerts an effect on a protein targets via a different binding site than the natural ('orthosteric') ligand site.
    """
    mixed_allosteric_modulation = "mixed_allosteric_modulation"
    """
    An allosteric modulation mechanism that occurs when a chemical may exert an activating effect or an inhibitory effect in different conditions / contexts (e.g. concentration, receptor conformational state, signaling pathway context, receptor subtype, cellular environment).
    """
    biphasic_allosteric_modulation = "biphasic_allosteric_modulation"
    """
    A mixed allosteric modulation mechanism that occurs when a chemical exerts an activating effect at lower concentrations, and an inhibitory effect at higher concentrations.
    """
    mixed_agonism = "mixed_agonism"
    """
    An modulation mechanism in which the effector acts as both an agonist (activating a receptor) and an antagonist (blocking a receptor) at different receptor sites.
    """
    positive_modulation = "positive_modulation"
    """
    A modulation mechanism that positively effects the normal functioning of a target by increasing or enhancing its activity or abundance, or its sensitivity to other factors that do so.
    """
    potentiation = "potentiation"
    """
    A positive modulation mechanism in which the effector binds to and enhances or intensifies the effect of some other chemical or drug on its target.
    """
    induction = "induction"
    """
    A positive modulation mechanism in which the effector binds to and increases the activity/rate of an enzyme that processes drugs in the body.
    """
    cofactor = "cofactor"
    """
    A positive modulation mechanism in which the effector (usually some non-protein chemical compound or metallic ion) is required for a target enzyme's biological/catalytic activity.
    """
    activation = "activation"
    """
    A positive modulation mechanism in which the effector binds to and positively affects the normal functioning of its target.
    """
    positive_allosteric_modulation = "positive_allosteric_modulation"
    """
    A positive modulation mechanism in which the effector enhances the action of the endogenous ligand of a receptor by binding to a site distinct from that ligand (i.e. non-competitive inhibition)
    """
    agonism = "agonism"
    """
    An activation mechanism in which the effector binds and activates a receptor to mimic the effect of an endogenous ligand.
    """
    partial_agonism = "partial_agonism"
    """
    An agonism mechanism in which the effector binds to and only partially activates a receptor (relative to the response to a full agonist)
    """
    biased_agonism = "biased_agonism"
    """
    An agonism mechanism in which the effector  binds to a receptor and activates certain signaling pathways while ignoring others, allowing it to produce a desired effect without unwanted side effects.
    """
    antibody_agonism = "antibody_agonism"
    """
    An agonism mechanism in which the effector is an antobody that binds and activates a receptor to mimic the effect of an endogenous ligand.
    """
    molecular_channel_opening = "molecular_channel_opening"
    """
    An activation mechanism in which the effector binds to a molecular channel and facilitates transport of ions through it.
    """
    stimulation = "stimulation"
    """
    An activation mechanism in which the effector directly or indirectly affects its target, stimulating a physiological response.
    """
    guanyl_nucleotide_exchange = "guanyl_nucleotide_exchange"
    """
    An activation mechanism in which the effector catalyzes the exchange of guanosine diphosphate (GDP) for guanosine triphosphate (GTP) in a guanine nucleotide-binding protein (G-protein).
    """
    negative_modulation = "negative_modulation"
    """
    A modulation mechanism that negatively effects the normal functioning of a target by decreasing or impeding its activity or abundance, or its sensitivity to other factors that do so.
    """
    negative_gene_editing_modulation = "negative_gene_editing_modulation"
    """
    A negative modulation mechanism in which the effector elicits the negative modulation of its target through a gene editing activity.
    """
    gtpase_activation = "gtpase_activation"
    """
    An activation mechanism in which the effector accelerates the intrinsic GTPase activity of a G-protein, promoting the conversion of the active, GTP-bound form to the inactive, GDP-bound form, thereby terminating a signaling event. Note that this is a negative modulation mechanism because the target is the G-protein whose activity is attenuated through gtpase activation.
    """
    atpase_activation = "atpase_activation"
    """
    An activation mechanism in which the effector accelerates the intrinsic ATPase activity of a target protein, promoting the conversion of the active, ATP-bound form to the inactive, ADP-bound form, thereby terminating a signaling event. Note that this is a negative modulation mechanism because the target is the protein whose activity is attenuated through atpase activation.
    """
    antisense_oligonucleotide_inhibition = "antisense_oligonucleotide_inhibition"
    """
    A negative modulation mechanism in which an antisense oligonucleotide effector prevents translation of a complementary mRNA sequence through binding and targeting it for degradation. Note that while this is called "inhibition', it is not inhibition in the classic biochemical sense that requires a direct interaction between effector and target.
    """
    rna_interference_inhibition = "rna_interference_inhibition"
    """
    A negative modulation mechanism in which an effector small interfering RNA (siRNA) molecule finds and destroys messenger RNA (mRNA) with a complementary sequence, preventing a specific gene from being translated into a protein. Note that while this is called "inhibition', it is not inhibition in the classic biochemical sense that requires a direct interaction between effector and target.
    """
    suppression = "suppression"
    """
    A negative modulation mechanism in which the effector directly or indirectly affects its target, suppressing a physiological process.
    """
    feedback_inhibition = "feedback_inhibition"
    """
    An negative modulation mechanism in which the end product of a metabolic pathway inhibits an enzyme early in that same pathway, which stops the production of the final product when it's no longer needed.
    """
    inhibition = "inhibition"
    """
    A negative modulation mechanism in which the effector binds to the target and negatively effects its normal function, e.g. prevention of enzymatic reaction or activation of downstream pathway.
    """
    antibody_inhibition = "antibody_inhibition"
    """
    An inhibition mechanism in which an antibody effector specifically binds to and interferes with the target.
    """
    antagonism = "antagonism"
    """
    An inhibition mechanism in which the effector binds to a receptor and prevents activation by an agonist through competing for the binding site.
    """
    allosteric_antagonism = "allosteric_antagonism"
    """
    An inhibition mechanism in which the effector binds to a receptor at an allosteric site and prevents activation by a positive allosteric modulator at that site.
    """
    non_competitive_antagonism = "non_competitive_antagonism"
    """
    An inhibition mechanism in which the effector binds a site distinct from the agonist's binding site (non-orthosteric), or irreversibly/insurmountably inactivates the receptor - reduces the receptor’s maximal response (Emax) in a way that cannot be overcome by adding more agonist.
    """
    competitive_inhibition = "competitive_inhibition"
    """
    An inhibition mechanism in which the effector binds to a target molecule (such as an enzyme) and prevents the binding of a substrate (or another binding partner) and vice versa.
    """
    noncompetitive_inhibition = "noncompetitive_inhibition"
    """
    An inhibition mechanism in which the effector binds to a target molecule (such as an enzyme) at a site other than the active site, in a way that reduces the activity of the target.
    """
    negative_allosteric_modulation = "negative_allosteric_modulation"
    """
    A noncompetitive inhibition mechanism in which the effector reduces or prevents the action of the endogenous ligand of a receptor by binding to a site distinct from that ligand, and causing a conformational change that affects ligand binding.
    """
    gating_inhibition = "gating_inhibition"
    """
    An inhibition mechanism mediated by the transition of ion channels between their open (conducting) and closed (non-conducting) conformational states.
    """
    irreversible_inhibition = "irreversible_inhibition"
    """
    An inhibition mechanism in which an effector permanently binds to a target, permanently disrupting its activity.
    """
    molecular_channel_blockage = "molecular_channel_blockage"
    """
    An inhibition mechanism in which the effector binds to a molecular channel and prevents or reduces transport of ions through it.
    """
    inverse_agonism = "inverse_agonism"
    """
    An inhibition mechanism in which the effector binds to the same receptor-binding site as an agonist and antagonizes its effects, often exerting the opposite effect of the agonist by suppressing spontaneous receptor signaling.
    """
    binding = "binding"
    """
    A modulation mechanism mediated by the direct contact between effector and target chemical or biomolecular entity, which form a stable physical interaction (typically non-covalent).
    """
    covalent_binding = "covalent_binding"
    """
    A modulation mechanism mediated by a direct covalent binding interaction between effector and target chemical or biomolecular entity.
    """
    adduction = "adduction"
    """
    A covalent binding mechanism in which a drug-protein adduct forms by the covalent binding of electrophilic drugs or their reactive metabolite(s) to a target protein.
    """
    crosslinking = "crosslinking"
    """
    A covalent binding mechanism in which an effector induces cross-linking of target proteins or nucleic acids - covalently joining them into a rigid structure.
    """
    transglutamination = "transglutamination"
    """
    A covalent binding mechanism involving formation of a covalent bond between a glutamine residue and an amine as catalyzed by a transglutaminase.
    """
    disuphide_binding = "disuphide_binding"
    """
    A covalent binding mechanism involving a covalent bond formed between two cysteine residues in or between proteins.
    """
    stabilization = "stabilization"
    """
    A modulation mechanism in which the effector increases the conformational stability of a protein or complex.
    """
    chaperone_mediated_stabilization = "chaperone_mediated_stabilization"
    destabilization = "destabilization"
    """
    A modulation mechanism in which a chaperone molecule directly binds to a partially folded biosynthetic intermediate to stabilize the protein and allow it to complete the folding process to yield a functional protein.
    """
    degradation = "degradation"
    """
    A modulation mechanism that controls protein and cellular component levels through the regulated breakdown and recycling of molecules.
    """
    cleavage = "cleavage"
    """
    A modulation mechanism in which an effector promotes degeneration of the target protein through cleaving of the peptide bonds.
    """
    hydrolysis = "hydrolysis"
    """
    A modulation mechanism in which an effector cleaves its target through a chemical reaction where a molecule of water is used to break a bond.
    """
    disruption = "disruption"
    """
    A modulation mechanism in which an effector destabilizes or disrupts a protein complex, macromolecular assembly, cell membrane etc.
    """
    opening = "opening"
    """
    A modulation mechanism in which an effector positively effects the normal functioning of an ion channel e.g., facilitates transport of ions through the channel.
    """
    multitarget_modulation = "multitarget_modulation"
    """
    A modulation mechanism in which an effector achieves a physiological effect through simultaneous interaction with multiple gene targets.
    """
    chelation = "chelation"
    """
    A modulation mechanism in which an effector binds to a metal ion target, reducing its availability/reactivity for further interactions.
    """
    release = "release"
    """
    A modulation mechanism in which an effector reverses the normal functioning of a transporter, causing release of the substrate, rather than uptake
    """
    sequestration = "sequestration"
    """
    A modulation mechanism in which an effector binds to a substance such as a drug, toxin or metabolite and reduces its availability for further interactions.
    """
    oxidoreduction = "oxidoreduction"
    """
    A modulation mechanism in which in which electrons are transferred between molecules catalyzed by an oxidoreductase enzyme.
    """
    exogenous_protein = "exogenous_protein"
    """
    A modulation mechanism in which a protein from an exogenous source acts as a substitute or supplement for a specific protein which is absent or has reduced function in an affected target/subject.
    """
    exogenous_gene = "exogenous_gene"
    """
    A modulation mechanism in which a nucleic acid from an exogenous source acts as a substitute or supplement for a specific gene which is absent or has reduced function in an affected target/subject.
    """
    transcriptional_regulation = "transcriptional_regulation"
    """
    A modulation mechanism mediated by through the control of target gene transcription.
    """
    translational_regulation = "translational_regulation"
    """
    A modulation mechanism mediated by through the control of target gene translation.
    """
    catalytic_activity = "catalytic_activity"
    """
    A modulation mechanism mediated by through the catalytic activity of the effector on the target.
    """
    chemical_modification = "chemical_modification"
    """
    A modulation mechanism mediated by a protein/complex effector altering a small molecule by modifying it or converting it to something else.
    """
    relocalization = "relocalization"
    """
    A modulation mechanism mediated by an effector that alters the localization of a target in the cell or body.
    """
    isomerization = "isomerization"
    """
    A modulation mechanism mediated by an effector that alters the isomeric conformation of a target.
    """
    signaling_mediated_control = "signaling_mediated_control"
    """
    A modulation mechanism mediated by the activation or control of signaling events that influence the some aspect of the target entity (e.g. its activity, processing, transport, etc.).
    """
    immune_system_modulation = "immune_system_modulation"
    """
    A modulation mechanism in which the actions of the effector on the immune system ultimately mediate the affects a target.
    """
    vaccine_antigen = "vaccine_antigen"
    """
    An immune system modulation mechanism in which a vaccine mediates its effect through the activation of the immune system against the target.
    """
    post_transcriptional_regulation = "post_transcriptional_regulation"
    """
    A modulation mechanism which controls expression of a target gene at the RNA level after a gene has been transcribed into messenger RNA (mRNA).
    """
    molecular_modification = "molecular_modification"
    """
    A modulation mechanism through which an effect is mediated by the modification of a target, through addition of chemical moieties such phosphate groups, ubiquitin, lipids, etc., which alter its activity or cellular behavior.
    """
    phosphorylation = "phosphorylation"
    dephosphorylation = "dephosphorylation"
    neddylation = "neddylation"
    deneddylation = "deneddylation"
    lipidation = "lipidation"
    palmitoylation = "palmitoylation"
    myristoylation = "myristoylation"
    tyrosination = "tyrosination"
    carboxylation = "carboxylation"
    ubiquitination = "ubiquitination"
    monoubiquitination = "monoubiquitination"
    polyubiquitination = "polyubiquitination"
    deubiquitination = "deubiquitination"
    sulfation = "sulfation"
    reduction = "reduction"
    """
    A molecular modification mechanism in which an effector modifies a target substrate via a reduction reaction.
    """
    oxidation = "oxidation"
    """
    A molecular modification mechanism in which an effector modifies a target substrate via an oxidation reaction.
    """
    acetylation = "acetylation"
    deacetylation = "deacetylation"
    glycosylation = "glycosylation"
    deglycosylation = "deglycosylation"
    methylation = "methylation"
    trimethylation = "trimethylation"
    demethylation = "demethylation"
    sumoylation = "sumoylation"
    desumoylation = "desumoylation"
    ADP_ribosylation = "ADP-ribosylation"
    de_ADP_ribosylation = "de-ADP-ribosylation"
    ampylation = "ampylation"
    """
    A molecular modification involving the addition of an adenylyl (AMP) moiety to a substrate protein residue.
    """
    hydroxylation = "hydroxylation"
    s_nitrosylation = "s_nitrosylation"


class LogicalInterpretationEnum(str, Enum):
    some_some = "some_some"
    """
    A modifier on a triple that causes the triple to be interpreted as a some-some statement
    """
    all_some = "all_some"
    """
    A modifier on a triple that causes the triple to be interpreted as an all-some statement.
    """
    inverse_all_some = "inverse_all_some"


class ReactionDirectionEnum(str, Enum):
    left_to_right = "left_to_right"
    right_to_left = "right_to_left"
    bidirectional = "bidirectional"
    neutral = "neutral"


class ReactionSideEnum(str, Enum):
    left = "left"
    right = "right"


class PhaseEnum(str, Enum):
    """
    phase
    """
    number_0 = "0"
    number_1 = "1"
    number_2 = "2"


class StrandEnum(str, Enum):
    """
    strand
    """
    PLUS_SIGN = "+"
    """
    Positive
    """
    _ = "-"
    """
    Negative
    """
    FULL_STOP = "."
    """
    Unstranded
    """
    QUESTION_MARK = "?"
    """
    Unknown
    """


class SequenceEnum(str, Enum):
    """
    type of sequence
    """
    na = "na"
    """
    nucleic acid
    """
    aa = "aa"
    """
    amino acid
    """


class DruggableGeneCategoryEnum(str, Enum):
    tclin = "tclin"
    """
    These targets have activities in DrugCentral (ie. approved drugs) with known mechanism of action.
    """
    tbio = "tbio"
    """
    These targets have activities in ChEMBL, Guide to Pharmacology or DrugCentral that satisfy the activity thresholds detailed below.
    """
    tchem = "tchem"
    """
    These targets do not have known drug or small molecule activities that satisfy the activity thresholds detailed below AND satisfy one or more of the following criteria: target is above the cutoff criteria for Tdark target is annotated with a Gene Ontology Molecular Function or Biological Process leaf term(s) with an Experimental Evidence code
    """
    tdark = "tdark"
    """
    These are targets about which virtually nothing is known. They do not have known drug or small molecule activities that satisfy the activity thresholds detailed below AND satisfy two or more of the following criteria: A PubMed text-mining score from Jensen Lab less than 5, greater than or equal TO 3 Gene RIFs, or less than or equal to 50 Antibodies available according to http://antibodypedia.com.
    """


class DrugAvailabilityEnum(str, Enum):
    over_the_counter = "over_the_counter"
    """
    chemical entity is available over the counter without a prescription.
    """
    prescription = "prescription"
    """
    chemical entity is available by prescription.
    """


class DrugDeliveryEnum(str, Enum):
    inhalation = "inhalation"
    oral = "oral"
    absorption_through_the_skin = "absorption_through_the_skin"
    intravenous_injection = "intravenous_injection"


class ResourceRoleEnum(str, Enum):
    """
    The role played by the information reource in serving as a source for an edge in a TRAPI message. Note that a given Edge should have one and only one 'primary' source, and may have any number of 'aggregator' or 'supporting data' sources.  This enumeration is found in Biolink Model, but is repeated here for convenience.
    """
    primary_knowledge_source = "primary_knowledge_source"
    aggregator_knowledge_source = "aggregator_knowledge_source"
    supporting_data_source = "supporting_data_source"


class AffinityParameterEnum(str, Enum):
    """
    The types of parameters that can be used to describe the affinity between two entities, characteristically chemicals and proteins.
    """
    pIC50 = "pIC50"
    """
    Negative logarithm of the molar concentration of a chemical that produces a 50% inhibition of a function
    """
    pEC50 = "pEC50"
    """
    Negative logarithm of the molar concentration of a chemical that produces a 50% excitation of a function
    """
    pAC50 = "pAC50"
    pXC50 = "pXC50"
    pKi = "pKi"
    pKd = "pKd"


class FDAIDAAdverseEventEnum(str, Enum):
    """
    please consult with the FDA guidelines as proposed in this document: https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfcfr/cfrsearch.cfm?fr=312.32
    """
    life_threatening_adverse_event = "life_threatening_adverse_event"
    """
    An adverse event or suspected adverse reaction is considered 'life-threatening' if, in the view of either the investigator or sponsor, its occurrence places the patient or subject at immediate risk of death. It does not include an adverse event or suspected adverse reaction that, had it occurred in a more severe form, might have caused death.
    """
    serious_adverse_event = "serious_adverse_event"
    """
    An adverse event or suspected adverse reaction is considered 'serious' if, in the view of either the investigator or sponsor, it results in any of the following outcomes: Death, a life-threatening adverse event, inpatient hospitalization or prolongation of existing hospitalization, a persistent or significant incapacity or substantial disruption of the ability to conduct normal life functions, or a congenital anomaly/birth defect. Important medical events that may not result in death, be life-threatening, or require hospitalization may be considered serious when, based upon appropriate medical judgment, they may jeopardize the patient or subject and may require medical or surgical intervention to prevent one of the outcomes listed in this definition. Examples of such medical events include allergic bronchospasm requiring intensive treatment in an emergency room or at home, blood dyscrasias or convulsions that do not result in inpatient hospitalization, or the development of drug dependency or drug abuse.
    """
    suspected_adverse_reaction = "suspected_adverse_reaction"
    """
    means any adverse event for which there is a reasonable possibility that the drug caused the adverse event. For the purposes of IND safety reporting, 'reasonable possibility' means there is evidence to suggest a causal relationship between the drug and the adverse event. Suspected adverse reaction implies a lesser degree of certainty about causality than adverse reaction, which means any adverse event caused by a drug.
    """
    unexpected_adverse_event = "unexpected_adverse_event"
    """
    An adverse event or suspected adverse reaction is considered 'unexpected' if it is not listed in the investigator brochure or is not listed at the specificity or severity that has been observed; or, if an investigator brochure is not required or available, is not consistent with the risk information described in the general investigational plan or elsewhere in the current application, as amended. For example, under this definition, hepatic necrosis would be unexpected (by virtue of greater severity) if the investigator brochure referred only to elevated hepatic enzymes or hepatitis. Similarly, cerebral thromboembolism and cerebral vasculitis would be unexpected (by virtue of greater specificity) if the investigator brochure listed only cerebral vascular accidents. 'Unexpected', as used in this definition, also refers to adverse events or suspected adverse reactions that are mentioned in the investigator brochure as occurring with a class of drugs or as anticipated from the pharmacological properties of the drug, but are not specifically mentioned as occurring with the particular drug under investigation.
    """


class AgentTypeEnum(str, Enum):
    manual_agent = "manual_agent"
    """
    A human agent who is responsible for generating a statement of knowledge. The human may utilize computationally generated information as evidence for the resulting knowledge, but the human is the one who ultimately interprets/reasons with this evidence to produce a statement of knowledge.
    """
    automated_agent = "automated_agent"
    """
    An automated agent, typically a software program or tool, that is responsible for generating a statement of knowledge. Human contribution to the knowledge creation process ends with the definition and coding of algorithms or analysis pipelines that get executed by the automated agent.
    """
    data_analysis_pipeline = "data_analysis_pipeline"
    """
    An automated agent that executes an analysis workflow over data and reports the direct results of the analysis. These typically report statistical associations/correlations between variables in the input dataset, and do not interpret/infer broader conclusions from associations the analysis reveals in the data.
    """
    computational_model = "computational_model"
    """
    An automated agent that generates knowledge statements (typically predictions) based on rules/logic explicitly encoded in an algorithm (e.g. heuristic models, supervised classifiers), or learned from patterns observed in data (e.g. ML models, unsupervised classifiers).
    """
    text_mining_agent = "text_mining_agent"
    """
    An automated agent that uses Natural Language Processing to recognize concepts and/or relationships in text, and report them using formally encoded semantics (e.g. as an edge in a knowledge graph).
    """
    image_processing_agent = "image_processing_agent"
    """
    An automated agent that processes images to generate textual statements of knowledge derived from the image and/or expressed in text the image depicts (e.g. via OCR).
    """
    manual_validation_of_automated_agent = "manual_validation_of_automated_agent"
    """
    A human agent reviews and validates/approves the veracity of knowledge that is initially generated by an automated agent.
    """
    not_provided = "not_provided"
    """
    The agent type is not provided, typically because it cannot be determined from available information if the agent that generated the knowledge is manual or automated.
    """


class KnowledgeLevelEnum(str, Enum):
    knowledge_assertion = "knowledge_assertion"
    """
    A statement of purported fact that is put forth by an agent as true, based on assessment of direct evidence. Assertions are likely but not definitively true.
    """
    logical_entailment = "logical_entailment"
    """
    A statement reporting a conclusion that follows logically from premises representing established facts or knowledge assertions (e.g. fingernail part of finger, finger part of hand --> fingernail part of hand).
    """
    prediction = "prediction"
    """
    A statement of a possible fact based on probabilistic forms of reasoning over more indirect forms of evidence, that lead to more speculative conclusions.
    """
    statistical_association = "statistical_association"
    """
    A statement that reports concepts representing variables in a dataset to be statistically associated with each other in a particular cohort (e.g. 'Metformin Treatment (variable 1) is correlated with Diabetes Diagnosis (variable 2) in EHR dataset X').
    """
    observation = "observation"
    """
    A statement reporting (and possibly quantifying) a phenomenon that was observed to occur - absent any analysis or interpretation that generates a statistical association or supports a broader conclusion or inference.
    """
    not_provided = "not_provided"
    """
    The knowledge level is not provided, typically because it cannot be determined from available. information.
    """



class KnowledgeGraph(ConfiguredBaseModel):
    """
    A knowledge graph is a structured representation of knowledge in the form of a graph, where nodes represent entities or concepts, and edges represent relationships between them. Knowledge graphs are used to organize and connect information from various sources, enabling better understanding, analysis, and reasoning about complex domains.
    """
    nodes: Optional[list[Union[Entity,NamedThing,Association,DiseaseAssociatedWithResponseToChemicalEntityAssociation,ChemicalEntityAssessesNamedThingAssociation,ContributorAssociation,GenotypeToGenotypePartAssociation,GenotypeToGeneAssociation,GenotypeToVariantAssociation,GeneToGeneAssociation,GeneToGeneFamilyAssociation,GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation,GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation,BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation,BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation,CellLineToDiseaseOrPhenotypicFeatureAssociation,ChemicalToChemicalAssociation,ChemicalToDiseaseOrPhenotypicFeatureAssociation,ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation,GeneToPathwayAssociation,MolecularActivityToPathwayAssociation,ChemicalToPathwayAssociation,NamedThingAssociatedWithLikelihoodOfNamedThingAssociation,ChemicalGeneInteractionAssociation,GeneRegulatesGeneAssociation,ProcessRegulatesProcessAssociation,ChemicalAffectsBiologicalEntityAssociation,GeneAffectsChemicalAssociation,DrugToGeneAssociation,MaterialSampleDerivationAssociation,MaterialSampleToDiseaseOrPhenotypicFeatureAssociation,DiseaseToExposureEventAssociation,ExposureEventToOutcomeAssociation,PhenotypicFeatureToPhenotypicFeatureAssociation,InformationContentEntityToNamedThingAssociation,DiseaseOrPhenotypicFeatureToLocationAssociation,DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation,GenotypeToPhenotypicFeatureAssociation,ExposureEventToPhenotypicFeatureAssociation,DiseaseToPhenotypicFeatureAssociation,CaseToPhenotypicFeatureAssociation,CaseToDiseaseAssociation,CaseToVariantAssociation,CaseToGeneAssociation,BehaviorToBehavioralFeatureAssociation,GeneToDiseaseOrPhenotypicFeatureAssociation,PhenotypicFeatureToDiseaseAssociation,VariantToGeneAssociation,VariantToPopulationAssociation,PopulationToPopulationAssociation,VariantToPhenotypicFeatureAssociation,VariantToDiseaseAssociation,GenotypeToDiseaseAssociation,OrganismalEntityAsAModelOfDiseaseAssociation,OrganismToOrganismAssociation,TaxonToTaxonAssociation,GeneToExpressionSiteAssociation,SequenceVariantModulatesTreatmentAssociation,FunctionalAssociation,MolecularActivityToChemicalEntityAssociation,MolecularActivityToMolecularActivityAssociation,EntityToDiseaseAssociation,EntityToPhenotypicFeatureAssociation,SequenceAssociation,SequenceFeatureRelationship,ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation,AnatomicalEntityToAnatomicalEntityAssociation,GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation,BiologicalProcessOrActivityToAnatomicalEntityAssociation,OrganismTaxonToOrganismTaxonAssociation,OrganismTaxonToEnvironmentAssociation,OrganismTaxonToOrganismTaxonSpecialization,OrganismTaxonToOrganismTaxonInteraction,AnatomicalEntityToAnatomicalEntityPartOfAssociation,AnatomicalEntityToAnatomicalEntityOntogenicAssociation,TranscriptToGeneRelationship,GeneToGeneProductRelationship,ExonToTranscriptRelationship,GenomicSequenceLocalization,MacromolecularMachineToMolecularActivityAssociation,MacromolecularMachineToBiologicalProcessAssociation,MacromolecularMachineToCellularComponentAssociation,GeneToGoTermAssociation,GenotypeAsAModelOfDiseaseAssociation,VariantAsAModelOfDiseaseAssociation,VariantToGeneExpressionAssociation,GeneToPhenotypicFeatureAssociation,GeneToDiseaseAssociation,CausalGeneToDiseaseAssociation,CorrelatedGeneToDiseaseAssociation,DruggableGeneToDiseaseAssociation,GeneAsAModelOfDiseaseAssociation,GeneHasVariantThatContributesToDiseaseAssociation,ChemicalAffectsGeneAssociation,ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation,ReactionToParticipantAssociation,ChemicalToChemicalDerivationAssociation,ReactionToCatalystAssociation,CellLineAsAModelOfDiseaseAssociation,GeneToGeneHomologyAssociation,GeneToGeneCoexpressionAssociation,PairwiseGeneToGeneInteraction,PairwiseMolecularInteraction,Attribute,OrganismTaxon,Event,AdministrativeEntity,InformationContentEntity,PhysicalEntity,Activity,Procedure,Phenomenon,Device,DiagnosticAid,PlanetaryEntity,BiologicalEntity,ChemicalEntity,ClinicalEntity,ExposureEvent,GenomicBackgroundExposure,PathologicalProcessExposure,PathologicalAnatomicalExposure,DiseaseOrPhenotypicFeatureExposure,ChemicalExposure,ComplexChemicalExposure,Treatment,BioticExposure,EnvironmentalExposure,BehavioralExposure,SocioeconomicExposure,GeographicExposure,DrugExposure,DrugToGeneInteractionExposure,ClinicalIntervention,Hospitalization,MolecularEntity,ChemicalMixture,EnvironmentalFoodContaminant,FoodAdditive,MolecularMixture,ComplexMolecularMixture,ProcessedMaterial,Food,Drug,SmallMolecule,NucleicAcidEntity,RegulatoryRegion,BiologicalProcessOrActivity,GeneticInheritance,OrganismalEntity,DiseaseOrPhenotypicFeature,Gene,MacromolecularComplex,NucleosomeModification,Genome,Exon,Transcript,CodingSequence,Polypeptide,ProteinDomain,PosttranslationalModification,ProteinFamily,NucleicAcidSequenceMotif,GeneFamily,Genotype,Haplotype,SequenceVariant,ReagentTargetedGene,Snv,Protein,ProteinIsoform,RNAProduct,RNAProductIsoform,NoncodingRNAProduct,MicroRNA,SiRNA,Disease,PhenotypicFeature,BehavioralFeature,ClinicalFinding,Bacterium,Virus,CellularOrganism,LifeStage,IndividualOrganism,PopulationOfIndividualOrganisms,AnatomicalEntity,CellLine,CellularComponent,Cell,GrossAnatomicalStructure,PathologicalAnatomicalStructure,StudyPopulation,Cohort,Case,Mammal,Plant,Invertebrate,Vertebrate,Fungus,Human,MolecularActivity,BiologicalProcess,Pathway,PhysiologicalProcess,Behavior,PathologicalProcess,AccessibleDnaRegion,TranscriptionFactorBindingSite,EnvironmentalProcess,EnvironmentalFeature,GeographicLocation,GeographicLocationAtTime,Study,ClinicalTrial,MaterialSample,StudyResult,StudyVariable,CommonDataElement,Dataset,DatasetDistribution,DatasetVersion,DatasetSummary,ConfidenceLevel,EvidenceType,Publication,RetrievalSource,Book,BookChapter,Serial,Article,Patent,WebPage,PreprintPublication,DrugLabel,JournalArticle,ConceptCountAnalysisResult,ObservedExpectedFrequencyAnalysisResult,RelativeFrequencyAnalysisResult,ChiSquaredAnalysisResult,LogOddsAnalysisResult,TextMiningStudyResult,IceesStudyResult,Agent,ChemicalRole,BiologicalSex,SeverityValue,OrganismAttribute,Zygosity,ClinicalAttribute,SocioeconomicAttribute,ClinicalMeasurement,ClinicalModifier,ClinicalCourse,Onset,PhenotypicQuality,PhenotypicSex,GenotypicSex]]] = Field(default=None, description="""A list of entities that can be a subject or object of an association""")
    edges: Optional[list[Union[Association,DiseaseAssociatedWithResponseToChemicalEntityAssociation,ChemicalEntityAssessesNamedThingAssociation,ContributorAssociation,GenotypeToGenotypePartAssociation,GenotypeToGeneAssociation,GenotypeToVariantAssociation,GeneToGeneAssociation,GeneToGeneFamilyAssociation,GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation,GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation,BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation,BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation,CellLineToDiseaseOrPhenotypicFeatureAssociation,ChemicalToChemicalAssociation,ChemicalToDiseaseOrPhenotypicFeatureAssociation,ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation,GeneToPathwayAssociation,MolecularActivityToPathwayAssociation,ChemicalToPathwayAssociation,NamedThingAssociatedWithLikelihoodOfNamedThingAssociation,ChemicalGeneInteractionAssociation,GeneRegulatesGeneAssociation,ProcessRegulatesProcessAssociation,ChemicalAffectsBiologicalEntityAssociation,GeneAffectsChemicalAssociation,DrugToGeneAssociation,MaterialSampleDerivationAssociation,MaterialSampleToDiseaseOrPhenotypicFeatureAssociation,DiseaseToExposureEventAssociation,ExposureEventToOutcomeAssociation,PhenotypicFeatureToPhenotypicFeatureAssociation,InformationContentEntityToNamedThingAssociation,DiseaseOrPhenotypicFeatureToLocationAssociation,DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation,GenotypeToPhenotypicFeatureAssociation,ExposureEventToPhenotypicFeatureAssociation,DiseaseToPhenotypicFeatureAssociation,CaseToPhenotypicFeatureAssociation,CaseToDiseaseAssociation,CaseToVariantAssociation,CaseToGeneAssociation,BehaviorToBehavioralFeatureAssociation,GeneToDiseaseOrPhenotypicFeatureAssociation,PhenotypicFeatureToDiseaseAssociation,VariantToGeneAssociation,VariantToPopulationAssociation,PopulationToPopulationAssociation,VariantToPhenotypicFeatureAssociation,VariantToDiseaseAssociation,GenotypeToDiseaseAssociation,OrganismalEntityAsAModelOfDiseaseAssociation,OrganismToOrganismAssociation,TaxonToTaxonAssociation,GeneToExpressionSiteAssociation,SequenceVariantModulatesTreatmentAssociation,FunctionalAssociation,MolecularActivityToChemicalEntityAssociation,MolecularActivityToMolecularActivityAssociation,EntityToDiseaseAssociation,EntityToPhenotypicFeatureAssociation,SequenceAssociation,SequenceFeatureRelationship,ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation,AnatomicalEntityToAnatomicalEntityAssociation,GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation,BiologicalProcessOrActivityToAnatomicalEntityAssociation,OrganismTaxonToOrganismTaxonAssociation,OrganismTaxonToEnvironmentAssociation,OrganismTaxonToOrganismTaxonSpecialization,OrganismTaxonToOrganismTaxonInteraction,AnatomicalEntityToAnatomicalEntityPartOfAssociation,AnatomicalEntityToAnatomicalEntityOntogenicAssociation,TranscriptToGeneRelationship,GeneToGeneProductRelationship,ExonToTranscriptRelationship,GenomicSequenceLocalization,MacromolecularMachineToMolecularActivityAssociation,MacromolecularMachineToBiologicalProcessAssociation,MacromolecularMachineToCellularComponentAssociation,GeneToGoTermAssociation,GenotypeAsAModelOfDiseaseAssociation,VariantAsAModelOfDiseaseAssociation,VariantToGeneExpressionAssociation,GeneToPhenotypicFeatureAssociation,GeneToDiseaseAssociation,CausalGeneToDiseaseAssociation,CorrelatedGeneToDiseaseAssociation,DruggableGeneToDiseaseAssociation,GeneAsAModelOfDiseaseAssociation,GeneHasVariantThatContributesToDiseaseAssociation,ChemicalAffectsGeneAssociation,ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation,ReactionToParticipantAssociation,ChemicalToChemicalDerivationAssociation,ReactionToCatalystAssociation,CellLineAsAModelOfDiseaseAssociation,GeneToGeneHomologyAssociation,GeneToGeneCoexpressionAssociation,PairwiseGeneToGeneInteraction,PairwiseMolecularInteraction]]] = Field(default=None, description="""A list of associations between two entities.""")


class Node(ConfiguredBaseModel):
    """
    A node in a KGX graph, will be superclass for named thing
    """
    pass


class Edge(ConfiguredBaseModel):
    """
    An edge in a KGX graph, will be superclass for association
    """
    pass


class MappingCollection(ConfiguredBaseModel):
    """
    A collection of deprecated mappings.
    """
    predicate_mappings: Optional[list[PredicateMapping]] = Field(default=None, description="""A collection of relationships that are not used in biolink, but have biolink patterns that can be used to replace them.  This is a temporary slot to help with the transition to the fully qualified predicate model in Biolink3.""")


class PredicateMapping(ConfiguredBaseModel):
    """
    A deprecated predicate mapping object contains the deprecated predicate and an example of the rewiring that should be done to use a qualified statement in its place.
    """
    mapped_predicate: Optional[str] = Field(default=None, description="""The predicate that is being replaced by the fully qualified representation of predicate + subject and object qualifiers.  Only to be used in test data and mapping data to help with the transition to the fully qualified predicate model. Not to be used in knowledge graphs.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    subject_form_or_variant_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_part_qualifier: Optional[str] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the subject of an association (or statement).""")
    subject_derivative_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the subject of an association (or statement).""")
    subject_context_qualifier: Optional[str] = Field(default=None)
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    object_form_or_variant_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_part_qualifier: Optional[str] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the object of an association (or statement).""")
    object_derivative_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the object of an association (or statement).""")
    object_context_qualifier: Optional[str] = Field(default=None)
    causal_mechanism_qualifier: Optional[CausalMechanismQualifierEnum] = Field(default=None, description="""A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    exact_match: Optional[list[str]] = Field(default=None, description="""holds between two entities that have strictly equivalent meanings, with a high degree of confidence""")
    narrow_match: Optional[list[str]] = Field(default=None, description="""a list of terms from different schemas or terminology systems that have a narrower, more specific meaning. Narrower terms are typically shown as children in a hierarchy or tree.""")
    broad_match: Optional[list[str]] = Field(default=None, description="""a list of terms from different schemas or terminology systems that have a broader, more general meaning. Broader terms are typically shown as parents in a hierarchy or tree.""")


class OntologyClass(ConfiguredBaseModel):
    """
    a concept or class in an ontology, vocabulary or thesaurus. Note that nodes in a biolink compatible KG can be considered both instances of biolink classes, and OWL classes in their own right. In general you should not need to use this class directly. Instead, use the appropriate biolink class. For example, for the GO concept of endocytosis (GO:0006897), use bl:BiologicalProcess as the type.
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")


class Annotation(ConfiguredBaseModel):
    """
    Biolink Model root class for entity annotations.
    """
    pass


class QuantityValue(Annotation):
    """
    A value of an attribute that is quantitative and measurable, expressed as a combination of a unit and a numeric value
    """
    has_unit: Optional[str] = Field(default=None, description="""connects a quantity value to a unit""")
    has_numeric_value: Optional[float] = Field(default=None, description="""connects a quantity value to a number""")


class RelationshipQuantifier(ConfiguredBaseModel):
    pass


class SensitivityQuantifier(RelationshipQuantifier):
    pass


class SpecificityQuantifier(RelationshipQuantifier):
    pass


class PathognomonicityQuantifier(SpecificityQuantifier):
    """
    A relationship quantifier between a variant or symptom and a disease, which is high when the presence of the feature implies the existence of the disease
    """
    pass


class FrequencyQuantifier(RelationshipQuantifier):
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")


class ChemicalOrDrugOrTreatment(ConfiguredBaseModel):
    pass


class Entity(ConfiguredBaseModel):
    """
    Root Biolink Model class for all things and informational relationships, real or imagined.
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Entity","biolink:Entity"]] = Field(default=["biolink:Entity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class NamedThing(Entity):
    """
    a databased entity or concept/class
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/NamedThing","biolink:NamedThing"]] = Field(default=["biolink:NamedThing"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Attribute(NamedThing, OntologyClass):
    """
    A property or characteristic of an entity. For example, an apple may have properties such as color, shape, age, crispiness. An environmental sample may have attributes such as depth, lat, long, material.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Attribute","biolink:Attribute"]] = Field(default=["biolink:Attribute"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalRole(Attribute):
    """
    A role played by the molecular entity or part thereof within a chemical context.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalRole","biolink:ChemicalRole"]] = Field(default=["biolink:ChemicalRole"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BiologicalSex(Attribute):
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalSex","biolink:BiologicalSex"]] = Field(default=["biolink:BiologicalSex"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PhenotypicSex(BiologicalSex):
    """
    An attribute corresponding to the phenotypic sex of the individual, based upon the reproductive organs present.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhenotypicSex","biolink:PhenotypicSex"]] = Field(default=["biolink:PhenotypicSex"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenotypicSex(BiologicalSex):
    """
    An attribute corresponding to the genotypic sex of the individual, based upon genotypic composition of sex chromosomes.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypicSex","biolink:GenotypicSex"]] = Field(default=["biolink:GenotypicSex"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SeverityValue(Attribute):
    """
    describes the severity of a phenotypic feature or disease
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SeverityValue","biolink:SeverityValue"]] = Field(default=["biolink:SeverityValue"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class RelationshipType(OntologyClass):
    """
    An OWL property used as an edge label
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")


class TaxonomicRank(OntologyClass):
    """
    A descriptor for the rank within a taxonomic classification. Example instance: TAXRANK:0000017 (kingdom)
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")


class OrganismTaxon(NamedThing):
    """
    A classification of a set of organisms. Example instances: NCBITaxon:9606 (Homo sapiens), NCBITaxon:2 (Bacteria). Can also be used to represent strains or subspecies.
    """
    has_taxonomic_rank: Optional[str] = Field(default=None)
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismTaxon","biolink:OrganismTaxon"]] = Field(default=["biolink:OrganismTaxon"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Event(NamedThing):
    """
    Something that happens at a given place and time.
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Event","biolink:Event"]] = Field(default=["biolink:Event"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class AdministrativeEntity(NamedThing):
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/AdministrativeEntity","biolink:AdministrativeEntity"]] = Field(default=["biolink:AdministrativeEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Agent(AdministrativeEntity):
    """
    person, group, organization or project that provides a piece of information (i.e. a knowledge association)
    """
    affiliation: Optional[list[str]] = Field(default=None, description="""a professional relationship between one provider (often a person) within another provider (often an organization). Target provider identity should be specified by a CURIE. Providers may have multiple affiliations.""")
    address: Optional[str] = Field(default=None, description="""the particulars of the place where someone or an organization is situated.  For now, this slot is a simple text \"blob\" containing all relevant details of the given location for fitness of purpose. For the moment, this \"address\" can include other contact details such as email and phone number(?).""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different classes of agents have distinct preferred identifiers. For publishers, use the ISBN publisher code. See https://grp.isbn-international.org/ for publisher code lookups. For editors, authors and  individual providers, use the individual's ORCID if available; Otherwise, a ScopusID, ResearchID or Google Scholar ID ('GSID') may be used if the author ORCID is unknown. Institutional agents could be identified by an International Standard Name Identifier ('ISNI') code.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Agent","biolink:Agent"]] = Field(default=["biolink:Agent"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""it is recommended that an author's 'name' property be formatted as \"surname, firstname initial.\"""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class InformationContentEntity(NamedThing):
    """
    a piece of information that typically describes some topic of discourse or is used as support.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/InformationContentEntity","biolink:InformationContentEntity"]] = Field(default=["biolink:InformationContentEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class StudyResult(InformationContentEntity):
    """
    A collection of data items from a study that are about a particular study subject or experimental unit (the 'focus' of the Result) - optionally with context/provenance metadata that may be relevant to the interpretation of this data as evidence.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/StudyResult","biolink:StudyResult"]] = Field(default=["biolink:StudyResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ConceptCountAnalysisResult(StudyResult):
    """
    A result of a concept count analysis.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ConceptCountAnalysisResult","biolink:ConceptCountAnalysisResult"]] = Field(default=["biolink:ConceptCountAnalysisResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ObservedExpectedFrequencyAnalysisResult(StudyResult):
    """
    A result of a observed expected frequency analysis.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ObservedExpectedFrequencyAnalysisResult","biolink:ObservedExpectedFrequencyAnalysisResult"]] = Field(default=["biolink:ObservedExpectedFrequencyAnalysisResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class RelativeFrequencyAnalysisResult(StudyResult):
    """
    A result of a relative frequency analysis.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/RelativeFrequencyAnalysisResult","biolink:RelativeFrequencyAnalysisResult"]] = Field(default=["biolink:RelativeFrequencyAnalysisResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChiSquaredAnalysisResult(StudyResult):
    """
    A result of a chi squared analysis.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChiSquaredAnalysisResult","biolink:ChiSquaredAnalysisResult"]] = Field(default=["biolink:ChiSquaredAnalysisResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class LogOddsAnalysisResult(StudyResult):
    """
    A result of a log odds ratio analysis.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/LogOddsAnalysisResult","biolink:LogOddsAnalysisResult"]] = Field(default=["biolink:LogOddsAnalysisResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class TextMiningStudyResult(StudyResult):
    """
    A study result that represents information extracted from text using natural language processing techniques. This includes the extracted text, location offsets within the source document, confidence scores, and other metadata related to the text mining process.
    """
    supporting_text: Optional[list[str]] = Field(default=None, description="""The segment of text from a document that supports the mined assertion.""")
    subject_location_in_text: Optional[list[int]] = Field(default=None, description="""Character offsets for the text span(s) in the supporting text corresponding to the subject concept of the extracted assertion.""")
    object_location_in_text: Optional[list[int]] = Field(default=None, description="""Character offsets for the text span(s) in the supporting text corresponding to the object concept of the extracted assertion""")
    extraction_confidence_score: Optional[int] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    supporting_document_type: Optional[str] = Field(default=None, description="""The document type (e.g., Journal Article, Case Study, Preprint) for the supporting document used in a Text Mining Result.""")
    supporting_document_year: Optional[int] = Field(default=None, description="""The document year (typically the publication year) for the supporting document used in a Text Mining Result.""")
    supporting_text_section_type: Optional[str] = Field(default=None, description="""The section of the supporting text of a Text Mining Result within the supporting document. This is in the form of the name of the document section (e.g., Abstract, Introduction) that contains the supporting text.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/TextMiningStudyResult","biolink:TextMiningStudyResult"]] = Field(default=["biolink:TextMiningStudyResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class IceesStudyResult(StudyResult):
    """
    A study result that represents a result, from a supporting Study, which is specifically associated with an Integrated Clinical and Environmental Exposures Service (ICEES) knowledge assertion.
    """
    chi_squared_statistic: Optional[float] = Field(default=None, description="""The chi-squared statistic measures how much observed data deviate from expected values under the null hypothesis.""")
    chi_squared_dof: Optional[int] = Field(default=None, description="""Degrees of freedom (dof) in a chi-squared test referring to the number of values in the final calculation of a statistic that are free to vary""")
    chi_squared_p: Optional[float] = Field(default=None, description="""The chi-square p-value tells you the probability that the observed differences (or associations) in your data occurred by random chance, assuming the null hypothesis is true.""")
    total_sample_size: Optional[int] = Field(default=None, description="""The total number of patients or participants within a sample population.""")
    fisher_exact_odds_ratio: Optional[float] = Field(default=None, description="""The Fisher Exact Test is used to determine whether there is a non-random association between two categorical variables in a 2×2 contingency table, especially when sample sizes are small. The odds ratio (OR) quantifies the strength of that association.
   OR = 1 implies No association
   OR > 1 implies Positive association (Group A more likely to have Outcome 1)
   OR < 1 implies Negative association (Group A less likely to have Outcome 1)""")
    fisher_exact_p: Optional[float] = Field(default=None, description="""The Fisher exact p-value tells you the probability of observing a table as extreme as (or more extreme than) your actual data, assuming that the null hypothesis of independence is true. It's most commonly used for 2×2 contingency tables, especially when sample sizes are small or expected counts are low.""")
    log_odds_ratio: Optional[float] = Field(default=None, description="""The natural logarithm of the odds ratio (OR), or the ratio of the odds of an event Y occurring in an exposed group versus the odds of an event Y occurring in a non-exposed group.""")
    log_odds_ratio_95_ci: Optional[list[float]] = Field(default=None, description="""The ninety-five percent confidence range in which the true log odds ratio for the sample population falls. To calculate the 95% confidence interval (CI) for a log odds ratio (a pair of numbers), you need the standard error (SE) of the log odds ratio.  This interval helps you understand the precision of your estimate and whether the association is statistically significant.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/IceesStudyResult","biolink:IceesStudyResult"]] = Field(default=["biolink:IceesStudyResult"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class StudyVariable(InformationContentEntity):
    """
    a variable that is used as a measure in the investigation of a study
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/StudyVariable","biolink:StudyVariable"]] = Field(default=["biolink:StudyVariable"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CommonDataElement(InformationContentEntity):
    """
    A Common Data Element (CDE) is a standardized, precisely defined question, paired with a set of allowable responses, used systematically across different sites, studies, or clinical trials to ensure consistent data collection. Multiple CDEs (from one or more Collections) can be curated into Forms. (https://cde.nlm.nih.gov/home)
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CommonDataElement","biolink:CommonDataElement"]] = Field(default=["biolink:CommonDataElement"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Dataset(InformationContentEntity):
    """
    an item that refers to a collection of data from a data source.
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Dataset","biolink:Dataset"]] = Field(default=["biolink:Dataset"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DatasetDistribution(InformationContentEntity):
    """
    an item that holds distribution level information about a dataset.
    """
    distribution_download_url: Optional[str] = Field(default=None)
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DatasetDistribution","biolink:DatasetDistribution"]] = Field(default=["biolink:DatasetDistribution"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DatasetVersion(InformationContentEntity):
    """
    an item that holds version level information about a dataset.
    """
    has_dataset: Optional[str] = Field(default=None)
    ingest_date: Optional[str] = Field(default=None)
    has_distribution: Optional[str] = Field(default=None)
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DatasetVersion","biolink:DatasetVersion"]] = Field(default=["biolink:DatasetVersion"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DatasetSummary(InformationContentEntity):
    """
    an item that holds summary level information about a dataset.
    """
    source_web_page: Optional[str] = Field(default=None)
    source_logo: Optional[str] = Field(default=None)
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DatasetSummary","biolink:DatasetSummary"]] = Field(default=["biolink:DatasetSummary"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ConfidenceLevel(InformationContentEntity):
    """
    Level of confidence in a statement
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ConfidenceLevel","biolink:ConfidenceLevel"]] = Field(default=["biolink:ConfidenceLevel"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EvidenceType(InformationContentEntity):
    """
    Class of evidence that supports an association
    """
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EvidenceType","biolink:EvidenceType"]] = Field(default=["biolink:EvidenceType"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Publication(InformationContentEntity):
    """
    Any ‘published’ piece of information. Publications are considered broadly to include any document or document part made available in print or on the web - which may include scientific journal issues, individual articles, and books - as well as things like pre-prints, white papers, patents, drug labels, web pages, protocol documents,  and even a part of a publication if of significant knowledge scope (e.g. a figure, figure legend, or section highlighted by NLP).
    """
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Publication","biolink:Publication"]] = Field(default=["biolink:Publication"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Book(Publication):
    """
    This class may rarely be instantiated except if use cases of a given knowledge graph support its utility.
    """
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Books should have industry-standard identifier such as from ISBN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Book","biolink:Book"]] = Field(default=["biolink:Book"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""Should generally be set to an ontology class defined term for 'book'.""")
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BookChapter(Publication):
    published_in: str = Field(default=..., description="""The enclosing parent book containing the chapter should have industry-standard identifier from ISBN.""")
    volume: Optional[str] = Field(default=None, description="""volume of a book or music release in a collection/series or a published collection of journal issues in a serial publication""")
    chapter: Optional[str] = Field(default=None, description="""chapter of a book""")
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BookChapter","biolink:BookChapter"]] = Field(default=["biolink:BookChapter"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Serial(Publication):
    """
    This class may rarely be instantiated except if use cases of a given knowledge graph support its utility.
    """
    iso_abbreviation: Optional[str] = Field(default=None, description="""Standard abbreviation for periodicals in the International Organization for Standardization (ISO) 4 system See https://www.issn.org/services/online-services/access-to-the-ltwa/. If the 'published in' property is set, then the iso abbreviation pertains to the broader publication context (the journal) within which the given publication node is embedded, not the publication itself.""")
    volume: Optional[str] = Field(default=None, description="""volume of a book or music release in a collection/series or a published collection of journal issues in a serial publication""")
    issue: Optional[str] = Field(default=None, description="""issue of a newspaper, a scientific journal or magazine for reference purpose""")
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Serials (journals) should have industry-standard identifier such as from ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Serial","biolink:Serial"]] = Field(default=["biolink:Serial"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""Should generally be set to an ontology class defined term for 'serial' or 'journal'.""")
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Article(Publication):
    """
    a piece of writing on a particular topic presented as a stand-alone section of a larger publication
    """
    published_in: str = Field(default=..., description="""The enclosing parent serial containing the article should have industry-standard identifier from ISSN.""")
    iso_abbreviation: Optional[str] = Field(default=None, description="""Optional value, if used locally as a convenience, is set to the iso abbreviation of the 'published in' parent.""")
    volume: Optional[str] = Field(default=None, description="""volume of a book or music release in a collection/series or a published collection of journal issues in a serial publication""")
    issue: Optional[str] = Field(default=None, description="""issue of a newspaper, a scientific journal or magazine for reference purpose""")
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Article","biolink:Article"]] = Field(default=["biolink:Article"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class JournalArticle(Article):
    """
    an article, typically presenting results of research, that is published in an issue of a scientific journal.
    """
    published_in: str = Field(default=..., description="""The enclosing parent serial containing the article should have industry-standard identifier from ISSN.""")
    iso_abbreviation: Optional[str] = Field(default=None, description="""Optional value, if used locally as a convenience, is set to the iso abbreviation of the 'published in' parent.""")
    volume: Optional[str] = Field(default=None, description="""volume of a book or music release in a collection/series or a published collection of journal issues in a serial publication""")
    issue: Optional[str] = Field(default=None, description="""issue of a newspaper, a scientific journal or magazine for reference purpose""")
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/JournalArticle","biolink:JournalArticle"]] = Field(default=["biolink:JournalArticle"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Patent(Publication):
    """
    a legal document granted by a patent issuing authority which confers upon the patenter the sole right to make, use and sell an invention for a set period of time.
    """
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Patent","biolink:Patent"]] = Field(default=["biolink:Patent"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class WebPage(Publication):
    """
    a document that is published according to World Wide Web standards, which may incorporate text, graphics, sound, and/or other features.
    """
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/WebPage","biolink:WebPage"]] = Field(default=["biolink:WebPage"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PreprintPublication(Publication):
    """
    a document reresenting an early version of an author's original scholarly work, such as a research paper or a review, prior to formal peer review and publication in a peer-reviewed scholarly or scientific journal.
    """
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PreprintPublication","biolink:PreprintPublication"]] = Field(default=["biolink:PreprintPublication"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DrugLabel(Publication):
    """
    a document accompanying a drug or its container that provides written, printed or graphic information about the drug, including drug contents, specific instructions or warnings for administration, storage and disposal instructions, etc.
    """
    authors: Optional[list[str]] = Field(default=None, description="""connects an publication to the list of authors who contributed to the publication. This property should be a comma-delimited list of author names. It is recommended that an author's name be formatted as \"surname, firstname initial.\".   Note that this property is a node annotation expressing the citation list of authorship which might typically otherwise be more completely documented in biolink:PublicationToProviderAssociation defined edges which point to full details about an author and possibly, some qualifiers which clarify the specific status of a given author in the publication.""")
    pages: Optional[list[str]] = Field(default=None, description="""When a 2-tuple of page numbers are provided, they represent the start and end page of the publication within its parent publication context. For books, this may be set to the total number of pages of the book.""")
    summary: Optional[str] = Field(default=None, description="""executive  summary of a publication""")
    keywords: Optional[list[str]] = Field(default=None, description="""keywords tagging a publication""")
    mesh_terms: Optional[list[str]] = Field(default=None, description="""mesh terms tagging a publication""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    publication_type: list[str] = Field(default=..., description="""Ontology term for publication type may be drawn from Dublin Core types (https://www.dublincore.org/specifications/dublin-core/dcmi-type-vocabulary/), FRBR-aligned Bibliographic Ontology (https://sparontologies.github.io/fabio/current/fabio.html), the MESH publication types (https://www.nlm.nih.gov/mesh/pubtypes.html), the Confederation of Open Access Repositories (COAR) Controlled Vocabulary for Resource Type Genres (http://vocabularies.coar-repositories.org/documentation/resource_types/), Wikidata (https://www.wikidata.org/wiki/Wikidata:Publication_types), or equivalent publication type ontology. When a given publication type ontology term is used within a given knowledge graph, then the CURIE identified term must be documented in the graph as a concept node of biolink:category biolink:OntologyClass.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""Different kinds of publication subtypes will have different preferred identifiers (curies when feasible). Precedence of identifiers for scientific articles is as follows: PMID if available; DOI if not; actual alternate CURIE otherwise. Enclosing publications (i.e. referenced by 'published in' node property) such as books and journals, should have industry-standard identifier such as from ISBN and ISSN.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DrugLabel","biolink:DrugLabel"]] = Field(default=["biolink:DrugLabel"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""the 'title' of the publication is generally recorded in the 'name' property (inherited from NamedThing). The field name 'title' is now also tagged as an acceptable alias for the node property 'name' (just in case).""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class RetrievalSource(InformationContentEntity):
    """
    Provides information about how a particular InformationResource served as a source from which knowledge expressed in an Edge, or data used to generate this knowledge, was retrieved.
    """
    resource_id: str = Field(default=..., description="""The InformationResource that served as a source for the knowledge expressed in an Edge, or data used to generate this knowledge.""")
    resource_role: ResourceRoleEnum = Field(default=..., description="""The role of the InformationResource in the retrieval of the knowledge expressed in an Edge, or data used to generate this knowledge.""")
    upstream_resource_ids: Optional[list[str]] = Field(default=None, description="""A list of upstream InformationResources from which the resource being described directly retrieved a record of the knowledge expressed in the Edge, or data used to generate this knowledge.""")
    source_record_urls: Optional[list[str]] = Field(default=None, description="""One or more URLs that link to a specific web page or document provided by the InformationResource, that contains a record of the knowledge expressed in the Edge.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    license: Optional[str] = Field(default=None)
    rights: Optional[str] = Field(default=None)
    format: Optional[str] = Field(default=None)
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/RetrievalSource","biolink:RetrievalSource"]] = Field(default=["biolink:RetrievalSource"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PhysicalEssenceOrOccurrent(ConfiguredBaseModel):
    """
    Either a physical or processual entity.
    """
    pass


class PhysicalEssence(PhysicalEssenceOrOccurrent):
    """
    Semantic mixin concept.  Pertains to entities that have physical properties such as mass, volume, or charge.
    """
    pass


class PhysicalEntity(PhysicalEssence, NamedThing):
    """
    An entity that has material reality (a.k.a. physical essence).
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhysicalEntity","biolink:PhysicalEntity"]] = Field(default=["biolink:PhysicalEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Occurrent(PhysicalEssenceOrOccurrent):
    """
    A processual entity.
    """
    pass


class ActivityAndBehavior(Occurrent):
    """
    Activity or behavior of any independent integral living, organization or mechanical actor in the world
    """
    pass


class Activity(ActivityAndBehavior, NamedThing):
    """
    An activity is something that occurs over a period of time and acts upon or with entities; it may include consuming, processing, transforming, modifying, relocating, using, or generating entities.
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Activity","biolink:Activity"]] = Field(default=["biolink:Activity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Study(Activity):
    """
    a detailed investigation and/or analysis
    """
    has_study_results: Optional[list[Union[StudyResult,ConceptCountAnalysisResult,ObservedExpectedFrequencyAnalysisResult,RelativeFrequencyAnalysisResult,ChiSquaredAnalysisResult,LogOddsAnalysisResult,TextMiningStudyResult,IceesStudyResult]]] = Field(default=None, description="""Connects an study to instances of its study result""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Study","biolink:Study"]] = Field(default=["biolink:Study"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Procedure(ActivityAndBehavior, NamedThing):
    """
    A series of actions conducted in a certain order or manner
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Procedure","biolink:Procedure"]] = Field(default=["biolink:Procedure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Phenomenon(Occurrent, NamedThing):
    """
    a fact or situation that is observed to exist or happen, especially one whose cause or explanation is in question
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Phenomenon","biolink:Phenomenon"]] = Field(default=["biolink:Phenomenon"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Device(NamedThing):
    """
    A thing made or adapted for a particular purpose, especially a piece of mechanical or electronic equipment
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Device","biolink:Device"]] = Field(default=["biolink:Device"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DiagnosticAid(NamedThing):
    """
    A device or substance used to help diagnose disease or injury
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiagnosticAid","biolink:DiagnosticAid"]] = Field(default=["biolink:DiagnosticAid"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SubjectOfInvestigation(ConfiguredBaseModel):
    """
    An entity that has the role of being studied in an investigation, study, or experiment
    """
    pass


class MaterialSample(SubjectOfInvestigation, PhysicalEntity):
    """
    A sample is a limited quantity of something (e.g. an individual or set of individuals from a population, or a portion of a substance) to be used for testing, analysis, inspection, investigation, demonstration, or trial use. [SIO]
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MaterialSample","biolink:MaterialSample"]] = Field(default=["biolink:MaterialSample"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PlanetaryEntity(NamedThing):
    """
    Any entity or process that exists at the level of the whole planet
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PlanetaryEntity","biolink:PlanetaryEntity"]] = Field(default=["biolink:PlanetaryEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EnvironmentalProcess(PlanetaryEntity, Occurrent):
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EnvironmentalProcess","biolink:EnvironmentalProcess"]] = Field(default=["biolink:EnvironmentalProcess"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EnvironmentalFeature(PlanetaryEntity):
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EnvironmentalFeature","biolink:EnvironmentalFeature"]] = Field(default=["biolink:EnvironmentalFeature"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeographicLocation(PlanetaryEntity):
    """
    a location that can be described in lat/long coordinates
    """
    latitude: Optional[float] = Field(default=None, description="""latitude""")
    longitude: Optional[float] = Field(default=None, description="""longitude""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeographicLocation","biolink:GeographicLocation"]] = Field(default=["biolink:GeographicLocation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeographicLocationAtTime(GeographicLocation):
    """
    a location that can be described in lat/long coordinates, for a particular time
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    latitude: Optional[float] = Field(default=None, description="""latitude""")
    longitude: Optional[float] = Field(default=None, description="""longitude""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeographicLocationAtTime","biolink:GeographicLocationAtTime"]] = Field(default=["biolink:GeographicLocationAtTime"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ThingWithTaxon(ConfiguredBaseModel):
    """
    A mixin that can be used on any entity that can be taxonomically classified. This includes individual organisms; genes, their products and other molecular entities; body parts; biological processes
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")


class BiologicalEntity(ThingWithTaxon, NamedThing):
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalEntity","biolink:BiologicalEntity"]] = Field(default=["biolink:BiologicalEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenomicEntity(ConfiguredBaseModel):
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")


class EpigenomicEntity(ConfiguredBaseModel):
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")


class BiologicalProcessOrActivity(BiologicalEntity, Occurrent, OntologyClass):
    """
    Either an individual molecular activity, or a collection of causally connected molecular activities in a biological system.
    """
    has_input: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an input into the process""")
    has_output: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an output of the process""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""holds between a process and a physical entity, where the physical entity executes the process""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalProcessOrActivity","biolink:BiologicalProcessOrActivity"]] = Field(default=["biolink:BiologicalProcessOrActivity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MolecularActivity(BiologicalProcessOrActivity, Occurrent, OntologyClass):
    """
    An execution of a molecular function carried out by a gene product or macromolecular complex.
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    has_input: Optional[list[str]] = Field(default=None, description="""A chemical entity that is the input for the reaction""")
    has_output: Optional[list[str]] = Field(default=None, description="""A chemical entity that is the output for the reaction""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""The gene product, gene, or complex that catalyzes the reaction""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MolecularActivity","biolink:MolecularActivity"]] = Field(default=["biolink:MolecularActivity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BiologicalProcess(BiologicalProcessOrActivity, Occurrent, OntologyClass):
    """
    One or more causally connected executions of molecular functions
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    has_input: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an input into the process""")
    has_output: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an output of the process""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""holds between a process and a physical entity, where the physical entity executes the process""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalProcess","biolink:BiologicalProcess"]] = Field(default=["biolink:BiologicalProcess"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Pathway(BiologicalProcess, OntologyClass):
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    has_input: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an input into the process""")
    has_output: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an output of the process""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""holds between a process and a physical entity, where the physical entity executes the process""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Pathway","biolink:Pathway"]] = Field(default=["biolink:Pathway"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PhysiologicalProcess(BiologicalProcess, OntologyClass):
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    has_input: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an input into the process""")
    has_output: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an output of the process""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""holds between a process and a physical entity, where the physical entity executes the process""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhysiologicalProcess","biolink:PhysiologicalProcess"]] = Field(default=["biolink:PhysiologicalProcess"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Behavior(BiologicalProcess, ActivityAndBehavior, OntologyClass):
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    has_input: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an input into the process""")
    has_output: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an output of the process""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""holds between a process and a physical entity, where the physical entity executes the process""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Behavior","biolink:Behavior"]] = Field(default=["biolink:Behavior"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class OrganismAttribute(Attribute):
    """
    describes a characteristic of an organismal entity.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismAttribute","biolink:OrganismAttribute"]] = Field(default=["biolink:OrganismAttribute"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PhenotypicQuality(OrganismAttribute):
    """
    A property of a phenotype
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhenotypicQuality","biolink:PhenotypicQuality"]] = Field(default=["biolink:PhenotypicQuality"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneticInheritance(BiologicalEntity):
    """
    The pattern or 'mode' in which a particular genetic trait or disorder is passed from one generation to the next, e.g. autosomal dominant, autosomal recessive, etc.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneticInheritance","biolink:GeneticInheritance"]] = Field(default=["biolink:GeneticInheritance"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class OrganismalEntity(BiologicalEntity, SubjectOfInvestigation):
    """
    A named entity that is either a part of an organism, a whole organism, population or clade of organisms, excluding chemical entities
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismalEntity","biolink:OrganismalEntity"]] = Field(default=["biolink:OrganismalEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Bacterium(OrganismalEntity):
    """
    A member of a group of unicellular microorganisms lacking a nuclear membrane, that reproduce by binary fission and are often motile.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Bacterium","biolink:Bacterium"]] = Field(default=["biolink:Bacterium"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Virus(OrganismalEntity, SubjectOfInvestigation):
    """
    A virus is a microorganism that replicates itself as a microRNA and infects the host cell.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Virus","biolink:Virus"]] = Field(default=["biolink:Virus"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CellularOrganism(OrganismalEntity, SubjectOfInvestigation):
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CellularOrganism","biolink:CellularOrganism"]] = Field(default=["biolink:CellularOrganism"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Mammal(CellularOrganism, SubjectOfInvestigation):
    """
    A member of the class Mammalia, a clade of endothermic amniotes distinguished from reptiles and birds by the possession of hair, three middle ear bones, mammary glands, and a neocortex
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Mammal","biolink:Mammal"]] = Field(default=["biolink:Mammal"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Human(Mammal, SubjectOfInvestigation):
    """
    A member of the the species Homo sapiens.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Human","biolink:Human"]] = Field(default=["biolink:Human"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Plant(CellularOrganism):
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Plant","biolink:Plant"]] = Field(default=["biolink:Plant"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Invertebrate(CellularOrganism):
    """
    An animal lacking a vertebral column. This group consists of 98% of all animal species.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Invertebrate","biolink:Invertebrate"]] = Field(default=["biolink:Invertebrate"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Vertebrate(CellularOrganism):
    """
    A sub-phylum of animals consisting of those having a bony or cartilaginous vertebral column.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Vertebrate","biolink:Vertebrate"]] = Field(default=["biolink:Vertebrate"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Fungus(CellularOrganism):
    """
    A kingdom of eukaryotic, heterotrophic organisms that live as saprobes or parasites, including mushrooms, yeasts, smuts, molds, etc. They reproduce either sexually or asexually, and have life cycles that range from simple to complex. Filamentous fungi refer to those that grow as multicellular colonies (mushrooms and molds).
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Fungus","biolink:Fungus"]] = Field(default=["biolink:Fungus"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class LifeStage(OrganismalEntity, OntologyClass):
    """
    A stage of development or growth of an organism, including post-natal adult stages
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/LifeStage","biolink:LifeStage"]] = Field(default=["biolink:LifeStage"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class IndividualOrganism(OrganismalEntity, SubjectOfInvestigation):
    """
    An instance of an organism. For example, Richard Nixon, Charles Darwin, my pet cat. Example ID: ORCID:0000-0002-5355-2576
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/IndividualOrganism","biolink:IndividualOrganism"]] = Field(default=["biolink:IndividualOrganism"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PopulationOfIndividualOrganisms(OrganismalEntity, SubjectOfInvestigation):
    """
    A collection of individuals from the same taxonomic class distinguished by one or more characteristics.  Characteristics can include, but are not limited to, shared geographic location, genetics, phenotypes.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PopulationOfIndividualOrganisms","biolink:PopulationOfIndividualOrganisms"]] = Field(default=["biolink:PopulationOfIndividualOrganisms"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class StudyPopulation(PopulationOfIndividualOrganisms):
    """
    A group of people banded together or treated as a group as participants in a research study.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/StudyPopulation","biolink:StudyPopulation"]] = Field(default=["biolink:StudyPopulation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DiseaseOrPhenotypicFeature(BiologicalEntity, OntologyClass):
    """
    Either one of a disease or an individual phenotypic feature. Some knowledge resources such as Monarch treat these as distinct, others such as MESH conflate.  Please see definitions of phenotypic feature and disease in this model for their independent descriptions.  This class is helpful to enforce domains and ranges that may involve either a disease or a phenotypic feature.
    """
    inheritance: Optional[str] = Field(default=None, description="""Connects genetic inheritance to a disease or phenotypic feature, as a node property.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseOrPhenotypicFeature","biolink:DiseaseOrPhenotypicFeature"]] = Field(default=["biolink:DiseaseOrPhenotypicFeature"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Disease(DiseaseOrPhenotypicFeature):
    """
    A disorder of structure or function, especially one that produces specific signs, phenotypes or symptoms or that affects a specific location and is not simply a direct result of physical injury.  A disposition to undergo pathological processes that exists in an organism because of one or more disorders in that organism.
    """
    inheritance: Optional[str] = Field(default=None, description="""Connects genetic inheritance to a disease or phenotypic feature, as a node property.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Disease","biolink:Disease"]] = Field(default=["biolink:Disease"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PhenotypicFeature(DiseaseOrPhenotypicFeature):
    """
    A combination of entity and quality that makes up a phenotyping statement. An observable characteristic of an individual resulting from the interaction of its genotype with its molecular and physical environment.
    """
    inheritance: Optional[str] = Field(default=None, description="""Connects genetic inheritance to a disease or phenotypic feature, as a node property.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhenotypicFeature","biolink:PhenotypicFeature"]] = Field(default=["biolink:PhenotypicFeature"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BehavioralFeature(PhenotypicFeature):
    """
    A phenotypic feature which is behavioral in nature.
    """
    inheritance: Optional[str] = Field(default=None, description="""Connects genetic inheritance to a disease or phenotypic feature, as a node property.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BehavioralFeature","biolink:BehavioralFeature"]] = Field(default=["biolink:BehavioralFeature"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class AnatomicalEntity(OrganismalEntity, PhysicalEssence, OntologyClass):
    """
    A subcellular location, cell type or gross anatomical part
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/AnatomicalEntity","biolink:AnatomicalEntity"]] = Field(default=["biolink:AnatomicalEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CellularComponent(AnatomicalEntity):
    """
    A location in or around a cell
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CellularComponent","biolink:CellularComponent"]] = Field(default=["biolink:CellularComponent"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Cell(AnatomicalEntity):
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Cell","biolink:Cell"]] = Field(default=["biolink:Cell"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CellLine(OrganismalEntity, SubjectOfInvestigation):
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CellLine","biolink:CellLine"]] = Field(default=["biolink:CellLine"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GrossAnatomicalStructure(AnatomicalEntity):
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GrossAnatomicalStructure","biolink:GrossAnatomicalStructure"]] = Field(default=["biolink:GrossAnatomicalStructure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalEntityOrGeneOrGeneProduct(ConfiguredBaseModel):
    """
    A union of chemical entities and children, and gene or gene product. This mixin is helpful to use when searching across chemical entities that must include genes and their children as chemical entities.
    """
    pass


class RegulatoryRegion(ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    A region (or regions) of the genome that contains known or putative regulatory elements that act in cis- or trans- to affect the transcription of gene
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/RegulatoryRegion","biolink:RegulatoryRegion"]] = Field(default=["biolink:RegulatoryRegion"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class AccessibleDnaRegion(RegulatoryRegion, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, PhysicalEssence, OntologyClass):
    """
    A region (or regions) of a chromatinized genome that has been measured to be more accessible to an enzyme such as DNase-I or Tn5 Transpose
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/AccessibleDnaRegion","biolink:AccessibleDnaRegion"]] = Field(default=["biolink:AccessibleDnaRegion"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class TranscriptionFactorBindingSite(RegulatoryRegion, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, PhysicalEssence, OntologyClass):
    """
    A region (or regions) of the genome that contains a region of DNA known or predicted to bind a protein that modulates gene transcription
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/TranscriptionFactorBindingSite","biolink:TranscriptionFactorBindingSite"]] = Field(default=["biolink:TranscriptionFactorBindingSite"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalEntityOrProteinOrPolypeptide(ConfiguredBaseModel):
    """
    A union of chemical entities and children, and protein and polypeptide. This mixin is helpful to use when searching across chemical entities that must include genes and their children as chemical entities.
    """
    pass


class ChemicalEntity(ChemicalEntityOrProteinOrPolypeptide, ChemicalEntityOrGeneOrGeneProduct, PhysicalEssence, NamedThing, ChemicalOrDrugOrTreatment):
    """
    A chemical entity is a physical entity that pertains to chemistry or biochemistry.
    """
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalEntity","biolink:ChemicalEntity"]] = Field(default=["biolink:ChemicalEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MolecularEntity(ChemicalEntity, OntologyClass):
    """
    A molecular entity is a chemical entity composed of individual or covalently bonded atoms.
    """
    is_metabolite: Optional[bool] = Field(default=None, description="""indicates whether a molecular entity is a metabolite""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MolecularEntity","biolink:MolecularEntity"]] = Field(default=["biolink:MolecularEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SmallMolecule(MolecularEntity):
    """
    A small molecule entity is a molecular entity characterized by availability in small-molecule databases of SMILES, InChI, IUPAC, or other unambiguous representation of its precise chemical structure; for convenience of representation, any valid chemical representation is included, even if it is not strictly molecular (e.g., sodium ion).
    """
    is_metabolite: Optional[bool] = Field(default=None, description="""indicates whether a molecular entity is a metabolite""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SmallMolecule","biolink:SmallMolecule"]] = Field(default=["biolink:SmallMolecule"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalMixture(ChemicalEntity, OntologyClass):
    """
    A chemical mixture is a chemical entity composed of two or more molecular entities.
    """
    is_supplement: Optional[str] = Field(default=None)
    highest_FDA_approval_status: Optional[ApprovalStatusEnum] = Field(default=None, description="""Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat.  For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'""")
    drug_regulatory_status_world_wide: Optional[ApprovalStatusEnum] = Field(default=None, description="""An agglomeration of drug regulatory status worldwide. Not specific to FDA.""")
    routes_of_delivery: Optional[list[DrugDeliveryEnum]] = Field(default=None, description="""the method or process of administering a pharmaceutical compound to achieve a therapeutic effect in humans or animals.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalMixture","biolink:ChemicalMixture"]] = Field(default=["biolink:ChemicalMixture"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class NucleicAcidEntity(MolecularEntity, GenomicEntity, ThingWithTaxon, PhysicalEssence, OntologyClass):
    """
    A nucleic acid entity is a molecular entity characterized by availability in gene databases of nucleotide-based sequence representations of its precise sequence; for convenience of representation, partial sequences of various kinds are included.
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    is_metabolite: Optional[bool] = Field(default=None, description="""indicates whether a molecular entity is a metabolite""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/NucleicAcidEntity","biolink:NucleicAcidEntity"]] = Field(default=["biolink:NucleicAcidEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MolecularMixture(ChemicalMixture):
    """
    A molecular mixture is a chemical mixture composed of two or more molecular entities with known concentration and stoichiometry.
    """
    is_supplement: Optional[str] = Field(default=None)
    highest_FDA_approval_status: Optional[ApprovalStatusEnum] = Field(default=None, description="""Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat.  For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'""")
    drug_regulatory_status_world_wide: Optional[ApprovalStatusEnum] = Field(default=None, description="""An agglomeration of drug regulatory status worldwide. Not specific to FDA.""")
    routes_of_delivery: Optional[list[DrugDeliveryEnum]] = Field(default=None, description="""the method or process of administering a pharmaceutical compound to achieve a therapeutic effect in humans or animals.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MolecularMixture","biolink:MolecularMixture"]] = Field(default=["biolink:MolecularMixture"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ComplexMolecularMixture(ChemicalMixture):
    """
    A complex molecular mixture is a chemical mixture composed of two or more molecular entities with unknown concentration and stoichiometry.
    """
    is_supplement: Optional[str] = Field(default=None)
    highest_FDA_approval_status: Optional[ApprovalStatusEnum] = Field(default=None, description="""Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat.  For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'""")
    drug_regulatory_status_world_wide: Optional[ApprovalStatusEnum] = Field(default=None, description="""An agglomeration of drug regulatory status worldwide. Not specific to FDA.""")
    routes_of_delivery: Optional[list[DrugDeliveryEnum]] = Field(default=None, description="""the method or process of administering a pharmaceutical compound to achieve a therapeutic effect in humans or animals.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ComplexMolecularMixture","biolink:ComplexMolecularMixture"]] = Field(default=["biolink:ComplexMolecularMixture"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ProcessedMaterial(ChemicalMixture):
    """
    A chemical entity (often a mixture) processed for consumption for nutritional, medical or technical use. Is a material entity that is created or changed during material processing.
    """
    is_supplement: Optional[str] = Field(default=None)
    highest_FDA_approval_status: Optional[ApprovalStatusEnum] = Field(default=None, description="""Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat.  For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'""")
    drug_regulatory_status_world_wide: Optional[ApprovalStatusEnum] = Field(default=None, description="""An agglomeration of drug regulatory status worldwide. Not specific to FDA.""")
    routes_of_delivery: Optional[list[DrugDeliveryEnum]] = Field(default=None, description="""the method or process of administering a pharmaceutical compound to achieve a therapeutic effect in humans or animals.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ProcessedMaterial","biolink:ProcessedMaterial"]] = Field(default=["biolink:ProcessedMaterial"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Drug(MolecularMixture, ChemicalOrDrugOrTreatment, OntologyClass):
    """
    A substance intended for use in the diagnosis, cure, mitigation, treatment, or prevention of disease
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    is_supplement: Optional[str] = Field(default=None)
    highest_FDA_approval_status: Optional[ApprovalStatusEnum] = Field(default=None, description="""Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat.  For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'""")
    drug_regulatory_status_world_wide: Optional[ApprovalStatusEnum] = Field(default=None, description="""An agglomeration of drug regulatory status worldwide. Not specific to FDA.""")
    routes_of_delivery: Optional[list[DrugDeliveryEnum]] = Field(default=None, description="""the method or process of administering a pharmaceutical compound to achieve a therapeutic effect in humans or animals.""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Drug","biolink:Drug"]] = Field(default=["biolink:Drug"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EnvironmentalFoodContaminant(ChemicalEntity):
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EnvironmentalFoodContaminant","biolink:EnvironmentalFoodContaminant"]] = Field(default=["biolink:EnvironmentalFoodContaminant"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class FoodAdditive(ChemicalEntity):
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/FoodAdditive","biolink:FoodAdditive"]] = Field(default=["biolink:FoodAdditive"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Food(ChemicalMixture):
    """
    A substance consumed by a living organism as a source of nutrition
    """
    is_supplement: Optional[str] = Field(default=None)
    highest_FDA_approval_status: Optional[ApprovalStatusEnum] = Field(default=None, description="""Should be the highest level of FDA approval this chemical entity or device has, regardless of which disease, condition or phenotype it is currently being reviewed to treat.  For specific levels of FDA approval for a specific condition, disease, phenotype, etc., see the association slot, 'clinical approval status.'""")
    drug_regulatory_status_world_wide: Optional[ApprovalStatusEnum] = Field(default=None, description="""An agglomeration of drug regulatory status worldwide. Not specific to FDA.""")
    routes_of_delivery: Optional[list[DrugDeliveryEnum]] = Field(default=None, description="""the method or process of administering a pharmaceutical compound to achieve a therapeutic effect in humans or animals.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    trade_name: Optional[str] = Field(default=None)
    available_from: Optional[list[DrugAvailabilityEnum]] = Field(default=None)
    max_tolerated_dose: Optional[str] = Field(default=None, description="""The highest dose of a drug or treatment that does not cause unacceptable side effects. The maximum tolerated dose is determined in clinical trials by testing increasing doses on different groups of people until the highest dose with acceptable side effects is found. Also called MTD.""")
    is_toxic: Optional[bool] = Field(default=None)
    has_chemical_role: Optional[list[str]] = Field(default=None, description="""A role is particular behaviour which a chemical entity may exhibit.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Food","biolink:Food"]] = Field(default=["biolink:Food"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MacromolecularMachineMixin(ConfiguredBaseModel):
    """
    A union of gene locus, gene product, and macromolecular complex. These are the basic units of function in a cell. They either carry out individual biological activities, or they encode molecules which do this.
    """
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")


class GeneOrGeneProduct(MacromolecularMachineMixin):
    """
    A union of gene loci or gene products. Frequently an identifier for one will be used as proxy for another
    """
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")


class GeneOrGeneProductOrGeneFamily(ConfiguredBaseModel):
    """
    A union of gene family or gene loci or gene products, useful to define the association between a gene or gene product or gene family and some other general class of entity (e.g. biological process or anatomical entity)
    """
    pass


class Gene(GeneOrGeneProduct, ChemicalEntityOrGeneOrGeneProduct, GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    A region (or regions) that includes all of the sequence elements necessary to encode a functional transcript. A gene locus may include regulatory regions, transcribed regions and/or other functional sequence regions.
    """
    symbol: Optional[str] = Field(default=None, description="""Symbol for a particular thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Gene","biolink:Gene"]] = Field(default=["biolink:Gene"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneProductMixin(GeneOrGeneProduct):
    """
    The functional molecular product of a single gene locus. Gene products are either proteins or functional RNA molecules.
    """
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")


class GeneProductIsoformMixin(GeneProductMixin):
    """
    This is an abstract class that can be mixed in with different kinds of gene products to indicate that the gene product is intended to represent a specific isoform rather than a canonical or reference or generic product. The designation of canonical or reference may be arbitrary, or it may represent the superclass of all isoforms.
    """
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")


class MacromolecularComplex(MacromolecularMachineMixin, BiologicalEntity):
    """
    A stable assembly of two or more macromolecules, i.e. proteins, nucleic acids, carbohydrates or lipids, in which at least one component is a protein and the constituent parts function together.
    """
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MacromolecularComplex","biolink:MacromolecularComplex"]] = Field(default=["biolink:MacromolecularComplex"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class NucleosomeModification(GeneProductIsoformMixin, EpigenomicEntity, GenomicEntity, BiologicalEntity):
    """
    A chemical modification of a histone protein within a nucleosome octomer or a substitution of a histone with a variant histone isoform. e.g. Histone 4 Lysine 20 methylation (H4K20me), histone variant H2AZ substituting H2A.
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/NucleosomeModification","biolink:NucleosomeModification"]] = Field(default=["biolink:NucleosomeModification"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Genome(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    A genome is the sum of genetic material within a cell or virion.
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Genome","biolink:Genome"]] = Field(default=["biolink:Genome"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Exon(BiologicalEntity):
    """
    A region of the transcript sequence within a gene which is not removed from the primary RNA transcript by RNA splicing.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Exon","biolink:Exon"]] = Field(default=["biolink:Exon"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Transcript(BiologicalEntity):
    """
    An RNA synthesized on a DNA or RNA template by an RNA polymerase.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Transcript","biolink:Transcript"]] = Field(default=["biolink:Transcript"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CodingSequence(GenomicEntity, BiologicalEntity):
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CodingSequence","biolink:CodingSequence"]] = Field(default=["biolink:CodingSequence"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Polypeptide(ChemicalEntityOrProteinOrPolypeptide, ChemicalEntityOrGeneOrGeneProduct, BiologicalEntity):
    """
    A polypeptide is a molecular entity characterized by availability in protein databases of amino-acid-based sequence representations of its precise primary structure; for convenience of representation, partial sequences of various kinds are included, even if they do not represent a physical molecule.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Polypeptide","biolink:Polypeptide"]] = Field(default=["biolink:Polypeptide"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Protein(Polypeptide, GeneProductMixin):
    """
    A gene product that is composed of a chain of amino acid sequences and is produced by ribosome-mediated translation of mRNA
    """
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Protein","biolink:Protein"]] = Field(default=["biolink:Protein"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ProteinIsoform(Protein, GeneProductIsoformMixin):
    """
    Represents a protein that is a specific isoform of the canonical or reference protein. See https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4114032/
    """
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ProteinIsoform","biolink:ProteinIsoform"]] = Field(default=["biolink:ProteinIsoform"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PosttranslationalModification(GeneProductIsoformMixin, BiologicalEntity):
    """
    A chemical modification of a polypeptide or protein that occurs after translation. e.g. polypeptide cleavage to form separate proteins, methylation or acetylation of histone tail amino acids, protein ubiquitination.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PosttranslationalModification","biolink:PosttranslationalModification"]] = Field(default=["biolink:PosttranslationalModification"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class NucleicAcidSequenceMotif(BiologicalEntity):
    """
    A linear nucleotide sequence pattern that is widespread and has, or is conjectured to have, a biological significance. e.g. the TATA box promoter motif, transcription factor binding consensus sequences.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/NucleicAcidSequenceMotif","biolink:NucleicAcidSequenceMotif"]] = Field(default=["biolink:NucleicAcidSequenceMotif"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class RNAProduct(Transcript, GeneProductMixin):
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/RNAProduct","biolink:RNAProduct"]] = Field(default=["biolink:RNAProduct"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class RNAProductIsoform(RNAProduct, GeneProductIsoformMixin):
    """
    Represents a protein that is a specific isoform of the canonical or reference RNA
    """
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/RNAProductIsoform","biolink:RNAProductIsoform"]] = Field(default=["biolink:RNAProductIsoform"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class NoncodingRNAProduct(RNAProduct):
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/NoncodingRNAProduct","biolink:NoncodingRNAProduct"]] = Field(default=["biolink:NoncodingRNAProduct"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MicroRNA(NoncodingRNAProduct):
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MicroRNA","biolink:MicroRNA"]] = Field(default=["biolink:MicroRNA"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SiRNA(NoncodingRNAProduct):
    """
    A small RNA molecule that is the product of a longer exogenous or endogenous dsRNA, which is either a bimolecular duplex or very long hairpin, processed (via the Dicer pathway) such that numerous siRNAs accumulate from both strands of the dsRNA. SRNAs trigger the cleavage of their target molecules.
    """
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SiRNA","biolink:SiRNA"]] = Field(default=["biolink:SiRNA"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""genes are typically designated by a short symbol and a full name. We map the symbol to the default display name and use an additional slot for full name""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneGroupingMixin(ConfiguredBaseModel):
    """
    any grouping of multiple genes or gene products
    """
    has_gene_or_gene_product: Optional[list[str]] = Field(default=None, description="""connects an entity with one or more gene or gene products""")


class ProteinDomain(GeneGroupingMixin, ChemicalEntityOrGeneOrGeneProduct, BiologicalEntity):
    """
    A conserved part of protein sequence and (tertiary) structure that can evolve, function, and exist independently of the rest of the protein chain. Protein domains maintain their structure and function independently of the proteins in which they are found. e.g. an SH3 domain.
    """
    has_gene_or_gene_product: Optional[list[str]] = Field(default=None, description="""connects an entity with one or more gene or gene products""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ProteinDomain","biolink:ProteinDomain"]] = Field(default=["biolink:ProteinDomain"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ProteinFamily(GeneGroupingMixin, ChemicalEntityOrGeneOrGeneProduct, BiologicalEntity):
    has_gene_or_gene_product: Optional[list[str]] = Field(default=None, description="""connects an entity with one or more gene or gene products""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ProteinFamily","biolink:ProteinFamily"]] = Field(default=["biolink:ProteinFamily"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneFamily(GeneGroupingMixin, ChemicalEntityOrGeneOrGeneProduct, BiologicalEntity):
    """
    any grouping of multiple genes or gene products related by common descent
    """
    has_gene_or_gene_product: Optional[list[str]] = Field(default=None, description="""connects an entity with one or more gene or gene products""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneFamily","biolink:GeneFamily"]] = Field(default=["biolink:GeneFamily"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Zygosity(Attribute):
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Zygosity","biolink:Zygosity"]] = Field(default=["biolink:Zygosity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Genotype(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    An information content entity that describes a genome by specifying the total variation in genomic sequence and/or gene expression, relative to some established background
    """
    has_zygosity: Optional[str] = Field(default=None)
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Genotype","biolink:Genotype"]] = Field(default=["biolink:Genotype"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Haplotype(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    A set of zero or more Alleles on a single instance of a Sequence[VMC]
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Haplotype","biolink:Haplotype"]] = Field(default=["biolink:Haplotype"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SequenceVariant(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    A sequence_variant is a non exact copy of a sequence_feature or genome exhibiting one or more sequence_alteration.
    """
    has_gene: Optional[list[str]] = Field(default=None, description="""Each allele can be associated with any number of genes""")
    hgvs_nomenclature: Optional[list[str]] = Field(default=None, description="""HGVS syntax refers to the specific rules and conventions used by the Human Variant Nomenclature Committee to describe the location and change in DNA, RNA, and protein sequence variants.  This slot is used to capture all the different forms of HGVS nomenclature that may be used to describe a sequence variant, including genomic, transcript, and protein HGVS expressions/nomenclatures and is thus multivalued.""")
    has_biological_sequence: Optional[str] = Field(default=None, description="""The state of the sequence w.r.t a reference sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SequenceVariant","biolink:SequenceVariant"]] = Field(default=["biolink:SequenceVariant"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Snv(SequenceVariant):
    """
    SNVs are single nucleotide positions in genomic DNA at which different sequence alternatives exist
    """
    has_gene: Optional[list[str]] = Field(default=None, description="""Each allele can be associated with any number of genes""")
    hgvs_nomenclature: Optional[list[str]] = Field(default=None, description="""HGVS syntax refers to the specific rules and conventions used by the Human Variant Nomenclature Committee to describe the location and change in DNA, RNA, and protein sequence variants.  This slot is used to capture all the different forms of HGVS nomenclature that may be used to describe a sequence variant, including genomic, transcript, and protein HGVS expressions/nomenclatures and is thus multivalued.""")
    has_biological_sequence: Optional[str] = Field(default=None, description="""The state of the sequence w.r.t a reference sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Snv","biolink:Snv"]] = Field(default=["biolink:Snv"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ReagentTargetedGene(GenomicEntity, BiologicalEntity, PhysicalEssence, OntologyClass):
    """
    A gene altered in its expression level in the context of some experiment as a result of being targeted by gene-knockdown reagent(s) such as a morpholino or RNAi.
    """
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ReagentTargetedGene","biolink:ReagentTargetedGene"]] = Field(default=["biolink:ReagentTargetedGene"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalAttribute(Attribute):
    """
    Attributes relating to a clinical manifestation
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalAttribute","biolink:ClinicalAttribute"]] = Field(default=["biolink:ClinicalAttribute"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalMeasurement(ClinicalAttribute):
    """
    A clinical measurement is a special kind of attribute which results from a laboratory observation from a subject individual or sample. Measurements can be connected to their subject by the 'has attribute' slot.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalMeasurement","biolink:ClinicalMeasurement"]] = Field(default=["biolink:ClinicalMeasurement"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalModifier(ClinicalAttribute):
    """
    Used to characterize and specify the phenotypic abnormalities defined in the phenotypic abnormality sub-ontology, with respect to severity, laterality, and other aspects
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalModifier","biolink:ClinicalModifier"]] = Field(default=["biolink:ClinicalModifier"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalCourse(ClinicalAttribute):
    """
    The course a disease typically takes from its onset, progression in time, and eventual resolution or death of the affected individual
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalCourse","biolink:ClinicalCourse"]] = Field(default=["biolink:ClinicalCourse"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Onset(ClinicalCourse):
    """
    The age group in which (disease) symptom manifestations appear.
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Onset","biolink:Onset"]] = Field(default=["biolink:Onset"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalEntity(NamedThing):
    """
    Any entity or process that exists in the clinical domain and outside the biological realm. Diseases are placed under biological entities
    """
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalEntity","biolink:ClinicalEntity"]] = Field(default=["biolink:ClinicalEntity"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalTrial(Study):
    """
    A clinical trial is a research study that prospectively assigns human participants or groups of humans to one or more health-related interventions to evaluate the effects on health outcomes.
    """
    clinical_trial_phase: Optional[ResearchPhaseEnum] = Field(default=None, description="""The phase that a clinical trials study represents""")
    clinical_trial_primary_purpose: Optional[str] = Field(default=None, description="""The primary purpose of a clinical trial as determined by clinicaltrials.gov.  The most common values are TREATMENT and PREVENTION. Other possible values include BASIC_SCIENCE, SUPPORTIVE_CARE, DIAGNOSTIC, HEALTH_SERVICES_RESEARCH, SCREENING, DEVICE_FEASIBILITY, OTHER, and (null).""")
    clinical_trial_intervention_model: Optional[str] = Field(default=None, description="""The intervention model of a clinical trial as determined by clinicaltrials.gov.  The most common values are SINGLE_GROUP, PARALLEL, CROSSOVER, FACTORIAL, and (null).""")
    clinical_trial_overall_status: Optional[ClinicalTrialStatusEnum] = Field(default=None, description="""The overall status of a clinical trial as determined by clinicaltrials.gov""")
    clinical_trial_brief_title: Optional[str] = Field(default=None, description="""The brief title of a clinical trial as determined by clinicaltrials.gov""")
    clinical_trial_enrollment_type: Optional[str] = Field(default=None, description="""The enrollment type of a clinical trial as determined by clinicaltrials.gov (actual, anticipated, or estimated)""")
    clinical_trial_start_date: Optional[date] = Field(default=None, description="""The start date of a clinical trial as determined by clinicaltrials.gov""")
    clinical_trial_enrollment: Optional[int] = Field(default=None, description="""The enrollment number of a clinical trial as determined by clinicaltrials.gov""")
    clinical_trial_age_stage: Optional[ClinicalTrialAgeStageEnum] = Field(default=None, description="""The age stage of a clinical trial as determined by clinicaltrials.gov (adult, child, older adult)""")
    clinical_trial_age_range: Optional[str] = Field(default=None, description="""The age range of a clinical trial as determined by clinicaltrials.gov""")
    clinical_trial_tested_intervention: Optional[str] = Field(default=None, description="""Records whether the clinical trials are testing the intervention.""")
    clinical_trial_interventions: Optional[list[str]] = Field(default=None, description="""connects a clinical trial to one or more interventions being tested in the trial""")
    clinical_trial_conditions: Optional[list[str]] = Field(default=None, description="""connects a clinical trial to one or more conditions being studied in the trial""")
    creation_date: Optional[date] = Field(default=None, description="""date on which an entity was created. This can be applied to nodes or edges""")
    has_study_results: Optional[list[Union[StudyResult,ConceptCountAnalysisResult,ObservedExpectedFrequencyAnalysisResult,RelativeFrequencyAnalysisResult,ChiSquaredAnalysisResult,LogOddsAnalysisResult,TextMiningStudyResult,IceesStudyResult]]] = Field(default=None, description="""Connects an study to instances of its study result""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalTrial","biolink:ClinicalTrial"]] = Field(default=["biolink:ClinicalTrial"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalIntervention(ClinicalEntity):
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalIntervention","biolink:ClinicalIntervention"]] = Field(default=["biolink:ClinicalIntervention"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ClinicalFinding(PhenotypicFeature):
    """
    this category is currently considered broad enough to tag clinical lab measurements and other biological attributes taken as 'clinical traits' with some statistical score, for example, a p value in genetic associations.
    """
    inheritance: Optional[str] = Field(default=None, description="""Connects genetic inheritance to a disease or phenotypic feature, as a node property.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ClinicalFinding","biolink:ClinicalFinding"]] = Field(default=["biolink:ClinicalFinding"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Hospitalization(ClinicalIntervention):
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Hospitalization","biolink:Hospitalization"]] = Field(default=["biolink:Hospitalization"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SocioeconomicAttribute(Attribute):
    """
    Attributes relating to a socioeconomic manifestation
    """
    name: Optional[str] = Field(default=None, description="""The human-readable 'attribute name' can be set to a string which reflects its context of interpretation, e.g. SEPIO evidence/provenance/confidence annotation or it can default to the name associated with the 'has attribute type' slot ontology term.""")
    has_attribute_type: str = Field(default=..., description="""connects an attribute to a class that describes it""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    has_qualitative_value: Optional[str] = Field(default=None, description="""connects an attribute to a value""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SocioeconomicAttribute","biolink:SocioeconomicAttribute"]] = Field(default=["biolink:SocioeconomicAttribute"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Case(IndividualOrganism, SubjectOfInvestigation):
    """
    An individual (human) organism that has a patient role in some clinical context.
    """
    has_biological_sex: Optional[str] = Field(default=None, description="""The biological sex of the entity (e.g., male or female) regarding a case description from a phenopacket""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Case","biolink:Case"]] = Field(default=["biolink:Case"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Cohort(StudyPopulation, SubjectOfInvestigation):
    """
    A group of people banded together or treated as a group who share common characteristics. A cohort 'study' is a particular form of longitudinal study that samples a cohort, performing a cross-section at intervals through time.
    """
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Cohort","biolink:Cohort"]] = Field(default=["biolink:Cohort"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ExposureEvent(NamedThing, OntologyClass):
    """
    A (possibly time bounded) incidence of a feature of the environment of an organism that influences one or more phenotypic features of that organism, potentially mediated by genes
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ExposureEvent","biolink:ExposureEvent"]] = Field(default=["biolink:ExposureEvent"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenomicBackgroundExposure(ExposureEvent, GeneGroupingMixin, GenomicEntity, ThingWithTaxon, PhysicalEssence, OntologyClass):
    """
    A genomic background exposure is where an individual's specific genomic background of genes, sequence variants or other pre-existing genomic conditions constitute a kind of 'exposure' to the organism, leading to or influencing an outcome.
    """
    has_gene_or_gene_product: Optional[list[str]] = Field(default=None, description="""connects an entity with one or more gene or gene products""")
    has_biological_sequence: Optional[str] = Field(default=None, description="""connects a genomic feature to its sequence""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenomicBackgroundExposure","biolink:GenomicBackgroundExposure"]] = Field(default=["biolink:GenomicBackgroundExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PathologicalEntityMixin(ConfiguredBaseModel):
    """
    A pathological (abnormal) structure or process.
    """
    pass


class PathologicalProcess(PathologicalEntityMixin, BiologicalProcess):
    """
    A biologic function or a process having an abnormal or deleterious effect at the subcellular, cellular, multicellular, or organismal level.
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    has_input: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an input into the process""")
    has_output: Optional[list[str]] = Field(default=None, description="""holds between a process and a continuant, where the continuant is an output of the process""")
    enabled_by: Optional[list[str]] = Field(default=None, description="""holds between a process and a physical entity, where the physical entity executes the process""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PathologicalProcess","biolink:PathologicalProcess"]] = Field(default=["biolink:PathologicalProcess"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PathologicalProcessExposure(ExposureEvent):
    """
    A pathological process, when viewed as an exposure, representing a precondition, leading to or influencing an outcome, e.g. autoimmunity leading to disease.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PathologicalProcessExposure","biolink:PathologicalProcessExposure"]] = Field(default=["biolink:PathologicalProcessExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PathologicalAnatomicalStructure(PathologicalEntityMixin, AnatomicalEntity):
    """
    An anatomical structure with the potential of have an abnormal or deleterious effect at the subcellular, cellular, multicellular, or organismal level.
    """
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    in_taxon: Optional[list[str]] = Field(default=None, description="""connects an entity to its taxonomic classification. Only certain kinds of entities can be taxonomically classified; see 'thing with taxon'""")
    in_taxon_label: Optional[str] = Field(default=None, description="""The human readable scientific name for the taxon of the entity.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PathologicalAnatomicalStructure","biolink:PathologicalAnatomicalStructure"]] = Field(default=["biolink:PathologicalAnatomicalStructure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""may often be an organism attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PathologicalAnatomicalExposure(ExposureEvent):
    """
    An abnormal anatomical structure, when viewed as an exposure, representing an precondition, leading to or influencing an outcome, e.g. thrombosis leading to an ischemic disease outcome.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PathologicalAnatomicalExposure","biolink:PathologicalAnatomicalExposure"]] = Field(default=["biolink:PathologicalAnatomicalExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DiseaseOrPhenotypicFeatureExposure(PathologicalEntityMixin, ExposureEvent):
    """
    A disease or phenotypic feature state, when viewed as an exposure, represents an precondition, leading to or influencing an outcome, e.g. HIV predisposing an individual to infections; a relative deficiency of skin pigmentation predisposing an individual to skin cancer.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseOrPhenotypicFeatureExposure","biolink:DiseaseOrPhenotypicFeatureExposure"]] = Field(default=["biolink:DiseaseOrPhenotypicFeatureExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalExposure(ExposureEvent):
    """
    A chemical exposure is an intake of a particular chemical entity.
    """
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalExposure","biolink:ChemicalExposure"]] = Field(default=["biolink:ChemicalExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ComplexChemicalExposure(ExposureEvent):
    """
    A complex chemical exposure is an intake of a chemical mixture (e.g. gasoline), other than a drug.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ComplexChemicalExposure","biolink:ComplexChemicalExposure"]] = Field(default=["biolink:ComplexChemicalExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DrugExposure(ChemicalExposure):
    """
    A drug exposure is an intake of a particular drug.
    """
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DrugExposure","biolink:DrugExposure"]] = Field(default=["biolink:DrugExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DrugToGeneInteractionExposure(DrugExposure, GeneGroupingMixin):
    """
    drug to gene interaction exposure is a drug exposure is where the interactions of the drug with specific genes are known to constitute an 'exposure' to the organism, leading to or influencing an outcome.
    """
    has_gene_or_gene_product: Optional[list[str]] = Field(default=None, description="""connects an entity with one or more gene or gene products""")
    has_quantitative_value: Optional[list[QuantityValue]] = Field(default=None, description="""connects an attribute to a value""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DrugToGeneInteractionExposure","biolink:DrugToGeneInteractionExposure"]] = Field(default=["biolink:DrugToGeneInteractionExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Treatment(ExposureEvent, ChemicalOrDrugOrTreatment):
    """
    A treatment is targeted at a disease or phenotype and may involve multiple drug 'exposures', medical devices and/or procedures
    """
    has_drug: Optional[list[str]] = Field(default=None, description="""connects an entity to one or more drugs""")
    has_device: Optional[list[str]] = Field(default=None, description="""connects an entity to one or more (medical) devices""")
    has_procedure: Optional[list[str]] = Field(default=None, description="""connects an entity to one or more (medical) procedures""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Treatment","biolink:Treatment"]] = Field(default=["biolink:Treatment"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BioticExposure(ExposureEvent):
    """
    An external biotic exposure is an intake of (sometimes pathological) biological organisms (including viruses).
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BioticExposure","biolink:BioticExposure"]] = Field(default=["biolink:BioticExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EnvironmentalExposure(ExposureEvent):
    """
    A environmental exposure is a factor relating to abiotic processes in the environment including sunlight (UV-B), atmospheric (heat, cold, general pollution) and water-born contaminants.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EnvironmentalExposure","biolink:EnvironmentalExposure"]] = Field(default=["biolink:EnvironmentalExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeographicExposure(EnvironmentalExposure):
    """
    A geographic exposure is a factor relating to geographic proximity to some impactful entity.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeographicExposure","biolink:GeographicExposure"]] = Field(default=["biolink:GeographicExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BehavioralExposure(ExposureEvent):
    """
    A behavioral exposure is a factor relating to behavior impacting an individual.
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BehavioralExposure","biolink:BehavioralExposure"]] = Field(default=["biolink:BehavioralExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SocioeconomicExposure(ExposureEvent):
    """
    A socioeconomic exposure is a factor relating to social and financial status of an affected individual (e.g. poverty).
    """
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    exposure_type: Optional[str] = Field(default=None, description="""Type of exposure""")
    exposure_vehicle: Optional[str] = Field(default=None, description="""Type of an exposure event.""")
    exposure_route: Optional[str] = Field(default=None, description="""Route of exposure.""")
    exposure_start_age: Optional[int] = Field(default=None, description="""Starting age of an exposure event.""")
    exposure_end_age: Optional[int] = Field(default=None, description="""Ending stage of an exposure event.""")
    exposure_duration: Optional[str] = Field(default=None, description="""Duration of an exposure event.""")
    exposure_magnitude: Optional[str] = Field(default=None, description="""Magnitude of an exposure event, e.g, parts per million of a toxic chemical.""")
    exposure_additional_condition: Optional[str] = Field(default=None, description="""Additional conditions impacting an exposure event.""")
    id: str = Field(default=..., description="""Could generally be a CURIE from a suitable exposure ontology like ECTO.""")
    provided_by: Optional[list[str]] = Field(default=None, description="""The value in this node property represents the knowledge provider that created or assembled the node and all of its attributes.  Used internally to represent how a particular node made its way into a knowledge provider or graph.""")
    xref: Optional[list[str]] = Field(default=None, description="""A database cross reference or alternative identifier for a NamedThing or edge between two NamedThings.  This property should point to a database record or webpage that supports the existence of the edge, or gives more detail about the edge. This property can be used on a node or edge to provide multiple URIs or CURIE cross references.""")
    full_name: Optional[str] = Field(default=None, description="""a long-form human readable name for a thing""")
    synonym: Optional[list[str]] = Field(default=None, description="""Alternate human-readable names for a thing""")
    equivalent_identifiers: Optional[list[str]] = Field(default=None, description="""A set of identifiers that are considered equivalent to the primary identifier of the entity. This attribute is used to represent a collection of identifiers that are considered equivalent to the primary identifier of an entity. These equivalent identifiers may come from different databases, ontologies, or naming conventions, but they all refer to the same underlying concept or entity. This attribute is particularly useful in data integration and interoperability scenarios, where it is important to recognize and link different representations of the same entity across various sources.""")
    information_content: Optional[float] = Field(default=None, description="""Information content (IC) value for a term, primarily from Automats.""")
    taxon: Optional[str] = Field(default=None, description="""A property that indicates the taxonomic classification of an entity. Values for this slot should be from the NCBITaxon ontology.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SocioeconomicExposure","biolink:SocioeconomicExposure"]] = Field(default=["biolink:SocioeconomicExposure"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None)
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: list[str] = Field(default=..., description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class Outcome(ConfiguredBaseModel):
    """
    An entity that has the role of being the consequence of an exposure event. This is an abstract mixin grouping of various categories of possible biological or non-biological (e.g. clinical) outcomes.
    """
    pass


class PathologicalProcessOutcome(Outcome):
    """
    An outcome resulting from an exposure event which is the manifestation of a pathological process.
    """
    pass


class PathologicalAnatomicalOutcome(Outcome):
    """
    An outcome resulting from an exposure event which is the manifestation of an abnormal anatomical structure.
    """
    pass


class DiseaseOrPhenotypicFeatureOutcome(Outcome):
    """
    Physiological outcomes resulting from an exposure event which is the manifestation of a disease or other characteristic phenotype.
    """
    pass


class BehavioralOutcome(Outcome):
    """
    An outcome resulting from an exposure event which is the manifestation of human behavior.
    """
    pass


class HospitalizationOutcome(Outcome):
    """
    An outcome resulting from an exposure event which is the increased manifestation of acute (e.g. emergency room visit) or chronic (inpatient) hospitalization.
    """
    pass


class MortalityOutcome(Outcome):
    """
    An outcome of death from resulting from an exposure event.
    """
    pass


class EpidemiologicalOutcome(Outcome):
    """
    An epidemiological outcome, such as societal disease burden, resulting from an exposure event.
    """
    pass


class SocioeconomicOutcome(Outcome):
    """
    An general social or economic outcome, such as healthcare costs, utilization, etc., resulting from an exposure event
    """
    pass


class Association(Entity):
    """
    A typed association between two entities, supported by evidence
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/Association","biolink:Association"]] = Field(default=["biolink:Association"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DiseaseAssociatedWithResponseToChemicalEntityAssociation(Association):
    """
    A statistical association between a disease and a chemical entity where the chemical entity has a therapeutic or adverse effect on the disease progression, symptoms or outcomes in a patient, cell line, or any model system.
    """
    response_context_qualifier: Optional[ResponseEnum] = Field(default=None, description="""a biological response (general, study, cohort, etc.) with a specific set of characteristics to constrain an association.""")
    response_target_context_qualifier: Optional[ResponseTargetEnum] = Field(default=None, description="""a biological response target (a patient, a cohort, a model system, a cell line, a sample of biological material, etc.)""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseAssociatedWithResponseToChemicalEntityAssociation","biolink:DiseaseAssociatedWithResponseToChemicalEntityAssociation"]] = Field(default=["biolink:DiseaseAssociatedWithResponseToChemicalEntityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalEntityAssessesNamedThingAssociation(Association):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalEntityAssessesNamedThingAssociation","biolink:ChemicalEntityAssessesNamedThingAssociation"]] = Field(default=["biolink:ChemicalEntityAssessesNamedThingAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ContributorAssociation(Association):
    """
    Any association between an entity (such as a publication) and various agents that contribute to its realisation
    """
    subject: str = Field(default=..., description="""information content entity which an agent has helped realise""")
    predicate: str = Field(default=..., description="""generally one of the predicate values 'provider', 'publisher', 'editor' or 'author'""")
    object: str = Field(default=..., description="""agent helping to realise the given entity (e.g. such as a publication)""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""this field can be used to annotate special characteristics of an agent relationship, such as the fact that a given author agent of a publication is the 'corresponding author'""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ContributorAssociation","biolink:ContributorAssociation"]] = Field(default=["biolink:ContributorAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenotypeToGenotypePartAssociation(Association):
    """
    Any association between one genotype and a genotypic entity that is a sub-component of it
    """
    subject: str = Field(default=..., description="""parent genotype""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""child genotype""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypeToGenotypePartAssociation","biolink:GenotypeToGenotypePartAssociation"]] = Field(default=["biolink:GenotypeToGenotypePartAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenotypeToGeneAssociation(Association):
    """
    Any association between a genotype and a gene. The genotype have have multiple variants in that gene or a single one. There is no assumption of cardinality
    """
    subject: str = Field(default=..., description="""parent genotype""")
    predicate: str = Field(default=..., description="""the relationship type used to connect genotype to gene""")
    object: str = Field(default=..., description="""gene implicated in genotype""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypeToGeneAssociation","biolink:GenotypeToGeneAssociation"]] = Field(default=["biolink:GenotypeToGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenotypeToVariantAssociation(Association):
    """
    Any association between a genotype and a sequence variant.
    """
    subject: str = Field(default=..., description="""parent genotype""")
    predicate: str = Field(default=..., description="""the relationship type used to connect genotype to gene""")
    object: str = Field(default=..., description="""gene implicated in genotype""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypeToVariantAssociation","biolink:GenotypeToVariantAssociation"]] = Field(default=["biolink:GenotypeToVariantAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneToGeneAssociation(Association):
    """
    abstract parent class for different kinds of gene-gene or gene product to gene product relationships. Includes homology and interaction.
    """
    subject: str = Field(default=..., description="""the subject gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the object gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToGeneAssociation","biolink:GeneToGeneAssociation"]] = Field(default=["biolink:GeneToGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneToGeneHomologyAssociation(GeneToGeneAssociation):
    """
    A homology association between two genes. May be orthology (in which case the species of subject and object should differ) or paralogy (in which case the species may be the same)
    """
    subject: str = Field(default=..., description="""the subject gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    predicate: str = Field(default=..., description="""homology relationship type""")
    object: str = Field(default=..., description="""the object gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToGeneHomologyAssociation","biolink:GeneToGeneHomologyAssociation"]] = Field(default=["biolink:GeneToGeneHomologyAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneToGeneFamilyAssociation(Association):
    """
    Set membership of a gene in a family of genes related by common evolutionary ancestry usually inferred by sequence comparisons. The genes in a given family generally share common sequence motifs which generally map onto shared gene product structure-function relationships.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""membership of the gene in the given gene family.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToGeneFamilyAssociation","biolink:GeneToGeneFamilyAssociation"]] = Field(default=["biolink:GeneToGeneFamilyAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation(Association):
    """
    Relationship between a gene family and a contained gene or gene product or gene family.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""membership of a gene or gene product, or strict subset relationship gene family, in the given gene family.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation","biolink:GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation"]] = Field(default=["biolink:GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation(Association):
    """
    Relationship between a gene or gene product or gene family to a specified biological process or activity (e.g. molecular activity, biological process or pathway).
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""participation of a gene or gene product or gene family in a given biological process or activity (e.g., gene product participates in biological process; gene catalyzes molecular activity; gene family is actively involved in a pathway).""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation","biolink:GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation"]] = Field(default=["biolink:GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation(Association):
    """
    Relationship between a biological processor activity (e.g. molecular activity, biological process or pathway) to gene or gene product or gene family.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""Relationship in which a biological process has the participation of a gene or gene product or gene family in a  (e.g., pathway has participant gene product).""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation","biolink:BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation"]] = Field(default=["biolink:BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation(Association):
    """
    Classification relationship between biological processes or activities (e.g. coupling of two molecular activities;  assignment of molecular activity to a pathway; implicating a pathway in a biological process; etc.)
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""One biological processes or activities is a subclass of another.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation","biolink:BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation"]] = Field(default=["biolink:BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneExpressionMixin(ConfiguredBaseModel):
    """
    Observed gene expression intensity, context (site, stage) and associated phenotypic status within which the expression occurs.
    """
    quantifier_qualifier: Optional[str] = Field(default=None, description="""Optional quantitative value indicating degree of expression.""")
    expression_site: Optional[str] = Field(default=None, description="""location in which gene or protein expression takes place. May be cell, tissue, or organ.""")
    stage_qualifier: Optional[str] = Field(default=None, description="""stage during which gene or protein expression of takes place.""")
    phenotypic_state: Optional[str] = Field(default=None, description="""in experiments (e.g. gene expression) assaying diseased or unhealthy tissue, the phenotypic state can be put here, e.g. MONDO ID. For healthy tissues, use XXX.""")


class GeneToGeneCoexpressionAssociation(GeneExpressionMixin, GeneToGeneAssociation):
    """
    Indicates that two genes are co-expressed, generally under the same conditions.
    """
    quantifier_qualifier: Optional[str] = Field(default=None, description="""Optional quantitative value indicating degree of expression.""")
    expression_site: Optional[str] = Field(default=None, description="""location in which gene or protein expression takes place. May be cell, tissue, or organ.""")
    stage_qualifier: Optional[str] = Field(default=None, description="""stage during which gene or protein expression of takes place.""")
    phenotypic_state: Optional[str] = Field(default=None, description="""in experiments (e.g. gene expression) assaying diseased or unhealthy tissue, the phenotypic state can be put here, e.g. MONDO ID. For healthy tissues, use XXX.""")
    subject: str = Field(default=..., description="""the subject gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the object gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToGeneCoexpressionAssociation","biolink:GeneToGeneCoexpressionAssociation"]] = Field(default=["biolink:GeneToGeneCoexpressionAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PairwiseGeneToGeneInteraction(GeneToGeneAssociation):
    """
    An interaction between two genes or two gene products. May be physical (e.g. protein binding) or genetic (between genes). May be symmetric (e.g. protein interaction) or directed (e.g. phosphorylation)
    """
    subject: str = Field(default=..., description="""the subject gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    predicate: str = Field(default=..., description="""interaction relationship type""")
    object: str = Field(default=..., description="""the object gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PairwiseGeneToGeneInteraction","biolink:PairwiseGeneToGeneInteraction"]] = Field(default=["biolink:PairwiseGeneToGeneInteraction"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PairwiseMolecularInteraction(PairwiseGeneToGeneInteraction):
    """
    An interaction at the molecular level between two physical entities
    """
    interacting_molecules_category: Optional[str] = Field(default=None)
    subject: str = Field(default=..., description="""the subject gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    predicate: str = Field(default=..., description="""interaction relationship type""")
    object: str = Field(default=..., description="""the object gene in the association. If the relation is symmetric, subject vs object is arbitrary. We allow a gene product to stand as a proxy for the gene or vice versa.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""identifier for the interaction. This may come from an interaction database such as IMEX.""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PairwiseMolecularInteraction","biolink:PairwiseMolecularInteraction"]] = Field(default=["biolink:PairwiseMolecularInteraction"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CellLineToEntityAssociationMixin(ConfiguredBaseModel):
    """
    An relationship between a cell line and another entity
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class ChemicalEntityToEntityAssociationMixin(ConfiguredBaseModel):
    """
    An interaction between a chemical entity and another entity
    """
    subject: str = Field(default=..., description="""the chemical entity that is an interactor""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class DrugToEntityAssociationMixin(ChemicalEntityToEntityAssociationMixin):
    """
    An interaction between a drug and another entity
    """
    subject: str = Field(default=..., description="""the drug that is an interactor""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class ChemicalToEntityAssociationMixin(ChemicalEntityToEntityAssociationMixin):
    """
    An interaction between a chemical entity and another entity
    """
    subject: str = Field(default=..., description="""the chemical entity or entity that is an interactor""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class CaseToEntityAssociationMixin(ConfiguredBaseModel):
    """
    An abstract association for use where the case is the subject
    """
    subject: str = Field(default=..., description="""the case (e.g. patient) that has the property""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class ChemicalToChemicalAssociation(Association):
    """
    A relationship between two chemical entities. This can encompass actual interactions as well as temporal causal edges, e.g. one chemical converted to another.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the chemical element that is the target of the statement""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalToChemicalAssociation","biolink:ChemicalToChemicalAssociation"]] = Field(default=["biolink:ChemicalToChemicalAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ReactionToParticipantAssociation(ChemicalToChemicalAssociation):
    stoichiometry: Optional[int] = Field(default=None, description="""the relationship between the relative quantities of substances taking part in a reaction or forming a compound, typically a ratio of whole integers.""")
    reaction_direction: Optional[ReactionDirectionEnum] = Field(default=None, description="""the direction of a reaction as constrained by the direction enum (ie: left_to_right, neutral, etc.)""")
    reaction_side: Optional[ReactionSideEnum] = Field(default=None, description="""the side of a reaction being modeled (ie: left or right)""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the chemical element that is the target of the statement""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ReactionToParticipantAssociation","biolink:ReactionToParticipantAssociation"]] = Field(default=["biolink:ReactionToParticipantAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ReactionToCatalystAssociation(ReactionToParticipantAssociation):
    stoichiometry: Optional[int] = Field(default=None, description="""the relationship between the relative quantities of substances taking part in a reaction or forming a compound, typically a ratio of whole integers.""")
    reaction_direction: Optional[ReactionDirectionEnum] = Field(default=None, description="""the direction of a reaction as constrained by the direction enum (ie: left_to_right, neutral, etc.)""")
    reaction_side: Optional[ReactionSideEnum] = Field(default=None, description="""the side of a reaction being modeled (ie: left or right)""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the chemical element that is the target of the statement""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ReactionToCatalystAssociation","biolink:ReactionToCatalystAssociation"]] = Field(default=["biolink:ReactionToCatalystAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalToChemicalDerivationAssociation(ChemicalToChemicalAssociation):
    """
    A causal relationship between two chemical entities, where the subject represents the upstream entity and the object represents the downstream. For any such association there is an implicit reaction: IF R has-input C1 AND R has-output C2 AND R enabled-by P AND R type Reaction THEN C1 derives-into C2 catalyst qualifier P
    """
    catalyst_qualifier: Optional[list[str]] = Field(default=None, description="""this connects the derivation edge to the chemical entity that catalyzes the reaction that causes the subject chemical to transform into the object chemical.""")
    subject: str = Field(default=..., description="""the upstream chemical entity""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the downstream chemical entity""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalToChemicalDerivationAssociation","biolink:ChemicalToChemicalDerivationAssociation"]] = Field(default=["biolink:ChemicalToChemicalDerivationAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MolecularActivityToPathwayAssociation(Association):
    """
    Association that holds the relationship between a reaction and the pathway it participates in.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MolecularActivityToPathwayAssociation","biolink:MolecularActivityToPathwayAssociation"]] = Field(default=["biolink:MolecularActivityToPathwayAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalToPathwayAssociation(Association):
    """
    An interaction between a chemical entity and a biological process or pathway.
    """
    subject: str = Field(default=..., description="""the chemical entity that is affecting the pathway""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the pathway that is affected by the chemical""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalToPathwayAssociation","biolink:ChemicalToPathwayAssociation"]] = Field(default=["biolink:ChemicalToPathwayAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class NamedThingAssociatedWithLikelihoodOfNamedThingAssociation(Association):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_context_qualifier: Optional[str] = Field(default=None)
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_context_qualifier: Optional[str] = Field(default=None)
    population_context_qualifier: Optional[str] = Field(default=None, description="""a biological population (general, study, cohort, etc.) with a specific set of characteristics to constrain an association.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/NamedThingAssociatedWithLikelihoodOfNamedThingAssociation","biolink:NamedThingAssociatedWithLikelihoodOfNamedThingAssociation"]] = Field(default=["biolink:NamedThingAssociatedWithLikelihoodOfNamedThingAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalGeneInteractionAssociation(Association):
    """
    describes an interaction between a chemical entity and a gene or gene product. Any biological or chemical effect resulting from such an interaction are out of scope, and covered by the ChemicalAffectsGeneAssociation type (e.g. impact of a chemical on the abundance, activity, structure, etc, of either participant in the interaction)
    """
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the subject of an association (or statement).""")
    subject_derivative_qualifier: Optional[ChemicalEntityDerivativeEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the subject of an association (or statement).""")
    subject_context_qualifier: Optional[str] = Field(default=None)
    object_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the object of an association (or statement).""")
    object_context_qualifier: Optional[str] = Field(default=None)
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalGeneInteractionAssociation","biolink:ChemicalGeneInteractionAssociation"]] = Field(default=["biolink:ChemicalGeneInteractionAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneRegulatesGeneAssociation(Association):
    """
    Describes a regulatory relationship between two genes or gene products.
    """
    object_aspect_qualifier: GeneOrGeneProductOrChemicalEntityAspectEnum = Field(default=..., description="""the aspect of the object gene or gene product that is being regulated, must be a descendant of \"activity_or_abundance\"\"""")
    object_direction_qualifier: DirectionQualifierEnum = Field(default=..., description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: str = Field(default=..., description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneRegulatesGeneAssociation","biolink:GeneRegulatesGeneAssociation"]] = Field(default=["biolink:GeneRegulatesGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ProcessRegulatesProcessAssociation(Association):
    """
    Describes a regulatory relationship between two genes or gene products.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ProcessRegulatesProcessAssociation","biolink:ProcessRegulatesProcessAssociation"]] = Field(default=["biolink:ProcessRegulatesProcessAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalAffectsBiologicalEntityAssociation(Association):
    """
    Describes an effect that a chemical has on a biological entity (e.g. an impact of on its abundance, activity,localization, processing, expression, etc.)
    """
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the subject of an association (or statement).""")
    subject_derivative_qualifier: Optional[ChemicalEntityDerivativeEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the subject of an association (or statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_context_qualifier: Optional[str] = Field(default=None)
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the object of an association (or statement).""")
    object_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_context_qualifier: Optional[str] = Field(default=None)
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    causal_mechanism_qualifier: Optional[CausalMechanismQualifierEnum] = Field(default=None, description="""A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalAffectsBiologicalEntityAssociation","biolink:ChemicalAffectsBiologicalEntityAssociation"]] = Field(default=["biolink:ChemicalAffectsBiologicalEntityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalAffectsGeneAssociation(ChemicalAffectsBiologicalEntityAssociation):
    """
    Describes an effect that a chemical has on a gene or gene product (e.g. an impact of on its abundance, activity,localization, processing, expression, etc.)
    """
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the subject of an association (or statement).""")
    subject_derivative_qualifier: Optional[ChemicalEntityDerivativeEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the subject of an association (or statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_context_qualifier: Optional[str] = Field(default=None)
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the object of an association (or statement).""")
    object_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_context_qualifier: Optional[str] = Field(default=None)
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    causal_mechanism_qualifier: Optional[CausalMechanismQualifierEnum] = Field(default=None, description="""A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalAffectsGeneAssociation","biolink:ChemicalAffectsGeneAssociation"]] = Field(default=["biolink:ChemicalAffectsGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneAffectsChemicalAssociation(Association):
    """
    Describes an effect that a gene or gene product has on a chemical entity (e.g. an impact of on its abundance, activity, localization, processing, transport, etc.)
    """
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the subject of an association (or statement).""")
    subject_derivative_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the subject of an association (or statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_context_qualifier: Optional[str] = Field(default=None)
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_part_qualifier: Optional[GeneOrGeneProductOrChemicalPartQualifierEnum] = Field(default=None, description="""defines a specific part/component of the core concept (used in cases there this specific part has no IRI we can use to directly represent it, e.g. 'ESR1 transcript' q: polyA tail).  This qualifier is for the object of an association (or statement).""")
    object_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_context_qualifier: Optional[str] = Field(default=None)
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    object_derivative_qualifier: Optional[ChemicalEntityDerivativeEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object  concept to describe something that is derived from the core concept.  For example, the qualifier ‘metabolite’ combines with a ‘Chemical X’ core concept to express the composed concept ‘a metabolite of Chemical X’.  This qualifier is for the object of an association (or statement).""")
    causal_mechanism_qualifier: Optional[CausalMechanismQualifierEnum] = Field(default=None, description="""A statement qualifier representing a type of molecular control mechanism through which an effect of a chemical on a gene or gene product is mediated (e.g. 'agonism', 'inhibition', 'allosteric modulation', 'channel blocker')""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneAffectsChemicalAssociation","biolink:GeneAffectsChemicalAssociation"]] = Field(default=["biolink:GeneAffectsChemicalAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DrugToGeneAssociation(DrugToEntityAssociationMixin, Association):
    """
    An interaction between a drug and a gene or gene product.
    """
    subject: str = Field(default=..., description="""the drug that is an interactor""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the gene or gene product that is affected by the drug""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DrugToGeneAssociation","biolink:DrugToGeneAssociation"]] = Field(default=["biolink:DrugToGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MaterialSampleToEntityAssociationMixin(ConfiguredBaseModel):
    """
    An association between a material sample and something.
    """
    subject: str = Field(default=..., description="""the material sample being described""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class MaterialSampleDerivationAssociation(Association):
    """
    An association between a material sample and the material entity from which it is derived.
    """
    subject: str = Field(default=..., description="""the material sample being described""")
    predicate: str = Field(default=..., description="""derivation relationship""")
    object: str = Field(default=..., description="""the material entity the sample was derived from. This may be another material sample, or any other material entity, including for example an organism, a geographic feature, or some environmental material.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MaterialSampleDerivationAssociation","biolink:MaterialSampleDerivationAssociation"]] = Field(default=["biolink:MaterialSampleDerivationAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DiseaseToEntityAssociationMixin(ConfiguredBaseModel):
    subject: str = Field(default=..., description="""disease class""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class EntityToExposureEventAssociationMixin(ConfiguredBaseModel):
    """
    An association between some entity and an exposure event.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class DiseaseToExposureEventAssociation(EntityToExposureEventAssociationMixin, DiseaseToEntityAssociationMixin, Association):
    """
    An association between an exposure event and a disease.
    """
    subject: str = Field(default=..., description="""disease class""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseToExposureEventAssociation","biolink:DiseaseToExposureEventAssociation"]] = Field(default=["biolink:DiseaseToExposureEventAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EntityToOutcomeAssociationMixin(ConfiguredBaseModel):
    """
    An association between some entity and an outcome
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class ExposureEventToOutcomeAssociation(EntityToOutcomeAssociationMixin, Association):
    """
    An association between an exposure event and an outcome.
    """
    population_context_qualifier: Optional[str] = Field(default=None, description="""a biological population (general, study, cohort, etc.) with a specific set of characteristics to constrain an association.""")
    temporal_context_qualifier: Optional[str] = Field(default=None, description="""a constraint of time placed upon the truth value of an association. for time intervales, use temporal interval qualifier.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ExposureEventToOutcomeAssociation","biolink:ExposureEventToOutcomeAssociation"]] = Field(default=["biolink:ExposureEventToOutcomeAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class FrequencyQualifierMixin(ConfiguredBaseModel):
    """
    Qualifier for frequency type associations
    """
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class EntityToFeatureOrDiseaseQualifiersMixin(FrequencyQualifierMixin):
    """
    Qualifiers for entity to disease or phenotype associations.
    """
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class EntityToFeatureOrVariantQualifiersMixin(FrequencyQualifierMixin):
    """
    Qualifiers for entity to variant associations.
    """
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class EntityToFeatureOrGeneQualifiersMixin(FrequencyQualifierMixin):
    """
    Qualifiers for entity to gene associations.
    """
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class FeatureOrDiseaseQualifiersToEntityMixin(FrequencyQualifierMixin):
    """
    Qualifiers for disease or phenotype to entity associations.
    """
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class EntityToPhenotypicFeatureAssociationMixin(EntityToFeatureOrDiseaseQualifiersMixin, FrequencyQuantifier):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class PhenotypicFeatureToEntityAssociationMixin(FeatureOrDiseaseQualifiersToEntityMixin, FrequencyQuantifier):
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class PhenotypicFeatureToPhenotypicFeatureAssociation(PhenotypicFeatureToEntityAssociationMixin, EntityToPhenotypicFeatureAssociationMixin, Association):
    """
    Association between two concept nodes of phenotypic character, qualified by the predicate used. This association may typically be used to specify 'similar_to' or 'member_of' relationships.
    """
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhenotypicFeatureToPhenotypicFeatureAssociation","biolink:PhenotypicFeatureToPhenotypicFeatureAssociation"]] = Field(default=["biolink:PhenotypicFeatureToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class InformationContentEntityToNamedThingAssociation(Association):
    """
    association between a named thing and a information content entity where the specific context of the relationship between that named thing and the publication is unknown. For example, model organisms databases often capture the knowledge that a gene is found in a journal article, but not specifically the context in which that gene was documented in the article. In these cases, this association with the accompanying predicate 'mentions' could be used. Conversely, for more specific associations (like 'gene to disease association', the publication should be captured as an edge property).
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/InformationContentEntityToNamedThingAssociation","biolink:InformationContentEntityToNamedThingAssociation"]] = Field(default=["biolink:InformationContentEntityToNamedThingAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EntityToDiseaseAssociationMixin(EntityToFeatureOrDiseaseQualifiersMixin):
    """
    mixin class for any association whose object (target node) is a disease
    """
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease""")


class DiseaseOrPhenotypicFeatureToEntityAssociationMixin(ConfiguredBaseModel):
    subject: str = Field(default=..., description="""disease or phenotype""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class DiseaseOrPhenotypicFeatureToLocationAssociation(DiseaseOrPhenotypicFeatureToEntityAssociationMixin, Association):
    """
    An association between either a disease or a phenotypic feature and an anatomical entity, where the disease/feature manifests in that site.
    """
    subject: str = Field(default=..., description="""disease or phenotype""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""anatomical entity in which the disease or feature is found.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseOrPhenotypicFeatureToLocationAssociation","biolink:DiseaseOrPhenotypicFeatureToLocationAssociation"]] = Field(default=["biolink:DiseaseOrPhenotypicFeatureToLocationAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation(DiseaseOrPhenotypicFeatureToEntityAssociationMixin, Association):
    """
    An association between either a disease or a phenotypic feature and its mode of (genetic) inheritance.
    """
    subject: str = Field(default=..., description="""disease or phenotype""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""genetic inheritance associated with the specified disease or phenotypic feature.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation","biolink:DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation"]] = Field(default=["biolink:DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EntityToDiseaseOrPhenotypicFeatureAssociationMixin(ConfiguredBaseModel):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease or phenotype""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")


class CellLineToDiseaseOrPhenotypicFeatureAssociation(EntityToDiseaseOrPhenotypicFeatureAssociationMixin, CellLineToEntityAssociationMixin, Association):
    """
    An relationship between a cell line and a disease or a phenotype, where the cell line is derived from an individual with that disease or phenotype.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease or phenotype""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CellLineToDiseaseOrPhenotypicFeatureAssociation","biolink:CellLineToDiseaseOrPhenotypicFeatureAssociation"]] = Field(default=["biolink:CellLineToDiseaseOrPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalToDiseaseOrPhenotypicFeatureAssociation(EntityToDiseaseOrPhenotypicFeatureAssociationMixin, Association):
    """
    An interaction between a chemical entity and a phenotype or disease, where the presence of the chemical gives rise to or exacerbates the phenotype.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the disease or phenotype that is affected by the chemical""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalToDiseaseOrPhenotypicFeatureAssociation","biolink:ChemicalToDiseaseOrPhenotypicFeatureAssociation"]] = Field(default=["biolink:ChemicalToDiseaseOrPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation(EntityToDiseaseOrPhenotypicFeatureAssociationMixin, EntityToFeatureOrDiseaseQualifiersMixin, Association):
    """
    This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic feature where the disease or phenotypic feature is a secondary undesirable effect.
    """
    FDA_adverse_event_level: Optional[FDAIDAAdverseEventEnum] = Field(default=None)
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease or phenotype""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation","biolink:ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation"]] = Field(default=["biolink:ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation(ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation, EntityToDiseaseOrPhenotypicFeatureAssociationMixin):
    """
    This association defines a relationship between a chemical or treatment (or procedure) and a disease or phenotypic feature where the disesae or phenotypic feature is a secondary, typically (but not always) undesirable effect.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease or phenotype""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    FDA_adverse_event_level: Optional[FDAIDAAdverseEventEnum] = Field(default=None)
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation","biolink:ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation"]] = Field(default=["biolink:ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class MaterialSampleToDiseaseOrPhenotypicFeatureAssociation(EntityToDiseaseOrPhenotypicFeatureAssociationMixin, MaterialSampleToEntityAssociationMixin, Association):
    """
    An association between a material sample and a disease or phenotype.
    """
    subject: str = Field(default=..., description="""the material sample being described""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease or phenotype""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MaterialSampleToDiseaseOrPhenotypicFeatureAssociation","biolink:MaterialSampleToDiseaseOrPhenotypicFeatureAssociation"]] = Field(default=["biolink:MaterialSampleToDiseaseOrPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenotypeToEntityAssociationMixin(ConfiguredBaseModel):
    subject: str = Field(default=..., description="""genotype that is the subject of the association""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class GenotypeToPhenotypicFeatureAssociation(GenotypeToEntityAssociationMixin, EntityToPhenotypicFeatureAssociationMixin, Association):
    """
    Any association between one genotype and a phenotypic feature, where having the genotype confers the phenotype, either in isolation or through environment
    """
    subject: str = Field(default=..., description="""genotype that is associated with the phenotypic feature""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypeToPhenotypicFeatureAssociation","biolink:GenotypeToPhenotypicFeatureAssociation"]] = Field(default=["biolink:GenotypeToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class ExposureEventToPhenotypicFeatureAssociation(EntityToPhenotypicFeatureAssociationMixin, Association):
    """
    Any association between an environment and a phenotypic feature, where being in the environment influences the phenotype.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ExposureEventToPhenotypicFeatureAssociation","biolink:ExposureEventToPhenotypicFeatureAssociation"]] = Field(default=["biolink:ExposureEventToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class DiseaseToPhenotypicFeatureAssociation(EntityToPhenotypicFeatureAssociationMixin, DiseaseToEntityAssociationMixin, Association, FrequencyQuantifier):
    """
    An association between a disease and a phenotypic feature in which the phenotypic feature is associated with the disease in some way.
    """
    onset_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state when the phenotype appears is in the subject.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject: str = Field(default=..., description="""disease class""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DiseaseToPhenotypicFeatureAssociation","biolink:DiseaseToPhenotypicFeatureAssociation"]] = Field(default=["biolink:DiseaseToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class CaseToPhenotypicFeatureAssociation(EntityToPhenotypicFeatureAssociationMixin, CaseToEntityAssociationMixin, Association):
    """
    An association between a case (e.g. individual patient) and a phenotypic feature in which the individual has or has had the phenotype.
    """
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    onset_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state when the phenotype appears is in the subject.""")
    subject: str = Field(default=..., description="""the case (e.g. patient) that has the property""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CaseToPhenotypicFeatureAssociation","biolink:CaseToPhenotypicFeatureAssociation"]] = Field(default=["biolink:CaseToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class CaseToDiseaseAssociation(CaseToEntityAssociationMixin, Association):
    """
    An association between a Case (patient) and a Disease
    """
    subject: str = Field(default=..., description="""the case (e.g. patient) that has the property""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    onset_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state when the phenotype appears is in the subject.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CaseToDiseaseAssociation","biolink:CaseToDiseaseAssociation"]] = Field(default=["biolink:CaseToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CaseToVariantAssociation(CaseToEntityAssociationMixin, Association):
    """
    Association between a Case and a Genetic Variant
    """
    subject: str = Field(default=..., description="""the case (e.g. patient) that has the property""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    has_zygosity: Optional[str] = Field(default=None)
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CaseToVariantAssociation","biolink:CaseToVariantAssociation"]] = Field(default=["biolink:CaseToVariantAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class CaseToGeneAssociation(CaseToEntityAssociationMixin, Association):
    """
    Association between a Case and a Gene (e.g., indicating a gene of interest for the case)
    """
    subject: str = Field(default=..., description="""the case (e.g. patient) that has the property""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CaseToGeneAssociation","biolink:CaseToGeneAssociation"]] = Field(default=["biolink:CaseToGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BehaviorToBehavioralFeatureAssociation(EntityToPhenotypicFeatureAssociationMixin, Association):
    """
    An association between an mixture behavior and a behavioral feature manifested by the individual exhibited or has exhibited the behavior.
    """
    subject: str = Field(default=..., description="""behavior that is the subject of the association""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""behavioral feature that is the object of the association""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BehaviorToBehavioralFeatureAssociation","biolink:BehaviorToBehavioralFeatureAssociation"]] = Field(default=["biolink:BehaviorToBehavioralFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class GeneToEntityAssociationMixin(ConfiguredBaseModel):
    subject: str = Field(default=..., description="""gene that is the subject of the association""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class GeneToPathwayAssociation(GeneToEntityAssociationMixin, Association):
    """
    An interaction between a gene or gene product and a biological process or pathway.
    """
    subject: str = Field(default=..., description="""the gene or gene product entity that participates or influences the pathway""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the pathway that includes or is affected by the gene or gene product""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToPathwayAssociation","biolink:GeneToPathwayAssociation"]] = Field(default=["biolink:GeneToPathwayAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class VariantToEntityAssociationMixin(ConfiguredBaseModel):
    subject: str = Field(default=..., description="""a sequence variant in which the allele state is associated with some other entity""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class GeneToDiseaseOrPhenotypicFeatureAssociation(GeneToEntityAssociationMixin, EntityToPhenotypicFeatureAssociationMixin, Association):
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    subject: str = Field(default=..., description="""gene in which variation is correlated with the phenotypic feature""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToDiseaseOrPhenotypicFeatureAssociation","biolink:GeneToDiseaseOrPhenotypicFeatureAssociation"]] = Field(default=["biolink:GeneToDiseaseOrPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class GeneToPhenotypicFeatureAssociation(GeneToDiseaseOrPhenotypicFeatureAssociation, GeneToEntityAssociationMixin, EntityToPhenotypicFeatureAssociationMixin):
    subject: str = Field(default=..., description="""gene in which variation is correlated with the phenotypic feature""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToPhenotypicFeatureAssociation","biolink:GeneToPhenotypicFeatureAssociation"]] = Field(default=["biolink:GeneToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class GeneToDiseaseAssociation(GeneToDiseaseOrPhenotypicFeatureAssociation, GeneToEntityAssociationMixin):
    subject: str = Field(default=..., description="""gene in which variation is correlated with the disease, may be protective or causative or associative, or as a model""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToDiseaseAssociation","biolink:GeneToDiseaseAssociation"]] = Field(default=["biolink:GeneToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class CausalGeneToDiseaseAssociation(GeneToDiseaseAssociation, GeneToEntityAssociationMixin):
    subject: str = Field(default=..., description="""gene in which variation is shown to cause the disease.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CausalGeneToDiseaseAssociation","biolink:CausalGeneToDiseaseAssociation"]] = Field(default=["biolink:CausalGeneToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class CorrelatedGeneToDiseaseAssociation(GeneToDiseaseAssociation, GeneToEntityAssociationMixin, EntityToDiseaseAssociationMixin):
    z_score: Optional[float] = Field(default=None, description="""A measure of the divergence of an individual experimental result from the most probable result, the mean. Z is expressed in terms of the number of standard deviations from the mean value.""")
    subject: str = Field(default=..., description="""gene in which variation is shown to correlate with the disease.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease""")
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CorrelatedGeneToDiseaseAssociation","biolink:CorrelatedGeneToDiseaseAssociation"]] = Field(default=["biolink:CorrelatedGeneToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class DruggableGeneToDiseaseAssociation(GeneToDiseaseAssociation, GeneToEntityAssociationMixin, EntityToDiseaseAssociationMixin):
    subject: str = Field(default=..., description="""gene in which variation is correlated with the disease in a protective manner, or if the product produced by the gene can be targeted by a small molecule and this leads to a protective or improving disease state.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease""")
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[DruggableGeneCategoryEnum]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/DruggableGeneToDiseaseAssociation","biolink:DruggableGeneToDiseaseAssociation"]] = Field(default=["biolink:DruggableGeneToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class PhenotypicFeatureToDiseaseAssociation(EntityToDiseaseAssociationMixin, PhenotypicFeatureToEntityAssociationMixin, Association):
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""disease""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PhenotypicFeatureToDiseaseAssociation","biolink:PhenotypicFeatureToDiseaseAssociation"]] = Field(default=["biolink:PhenotypicFeatureToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")


class VariantToGeneAssociation(VariantToEntityAssociationMixin, Association):
    """
    An association between a variant and a gene, where the variant has a genetic association with the gene (i.e. is in linkage disequilibrium)
    """
    subject: str = Field(default=..., description="""a sequence variant in which the allele state is associated with some other entity""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/VariantToGeneAssociation","biolink:VariantToGeneAssociation"]] = Field(default=["biolink:VariantToGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class VariantToGeneExpressionAssociation(VariantToGeneAssociation, GeneExpressionMixin):
    """
    An association between a variant and expression of a gene (i.e. e-QTL)
    """
    quantifier_qualifier: Optional[str] = Field(default=None, description="""Optional quantitative value indicating degree of expression.""")
    expression_site: Optional[str] = Field(default=None, description="""location in which gene or protein expression takes place. May be cell, tissue, or organ.""")
    stage_qualifier: Optional[str] = Field(default=None, description="""stage during which gene or protein expression of takes place.""")
    phenotypic_state: Optional[str] = Field(default=None, description="""in experiments (e.g. gene expression) assaying diseased or unhealthy tissue, the phenotypic state can be put here, e.g. MONDO ID. For healthy tissues, use XXX.""")
    subject: str = Field(default=..., description="""a sequence variant in which the allele state is associated with some other entity""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/VariantToGeneExpressionAssociation","biolink:VariantToGeneExpressionAssociation"]] = Field(default=["biolink:VariantToGeneExpressionAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class VariantToPopulationAssociation(VariantToEntityAssociationMixin, FrequencyQualifierMixin, Association, FrequencyQuantifier):
    """
    An association between a variant and a population, where the variant has particular frequency in the population
    """
    subject: str = Field(default=..., description="""an allele that has a certain frequency in a given population""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the population that is observed to have the frequency""")
    has_count: Optional[int] = Field(default=None, description="""number in object population that carry a particular allele, aka allele count""")
    has_total: Optional[int] = Field(default=None, description="""number all populations that carry a particular allele, aka allele number""")
    has_quotient: Optional[float] = Field(default=None, description="""frequency of allele in population, expressed as a number with allele divided by number in reference population, aka allele frequency""")
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/VariantToPopulationAssociation","biolink:VariantToPopulationAssociation"]] = Field(default=["biolink:VariantToPopulationAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class PopulationToPopulationAssociation(Association):
    """
    An association between a two populations
    """
    subject: str = Field(default=..., description="""the population that form the subject of the association""")
    predicate: str = Field(default=..., description="""A relationship type that holds between the subject and object populations. Standard mereological relations can be used. E.g. subject part-of object, subject overlaps object. Derivation relationships can also be used""")
    object: str = Field(default=..., description="""the population that form the object of the association""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/PopulationToPopulationAssociation","biolink:PopulationToPopulationAssociation"]] = Field(default=["biolink:PopulationToPopulationAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class VariantToPhenotypicFeatureAssociation(VariantToEntityAssociationMixin, EntityToPhenotypicFeatureAssociationMixin, Association):
    subject: str = Field(default=..., description="""a sequence variant in which the allele state is associated in some way with the phenotype state""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/VariantToPhenotypicFeatureAssociation","biolink:VariantToPhenotypicFeatureAssociation"]] = Field(default=["biolink:VariantToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class VariantToDiseaseAssociation(VariantToEntityAssociationMixin, EntityToDiseaseAssociationMixin, Association):
    subject: str = Field(default=..., description="""a sequence variant in which the allele state is associated in some way with the disease state""")
    predicate: str = Field(default=..., description="""E.g. is pathogenic for""")
    object: str = Field(default=..., description="""a disease that is associated with that variant""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/VariantToDiseaseAssociation","biolink:VariantToDiseaseAssociation"]] = Field(default=["biolink:VariantToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class GenotypeToDiseaseAssociation(GenotypeToEntityAssociationMixin, EntityToDiseaseAssociationMixin, Association):
    subject: str = Field(default=..., description="""a genotype that is associated in some way with a disease state""")
    predicate: str = Field(default=..., description="""E.g. is pathogenic for""")
    object: str = Field(default=..., description="""a disease that is associated with that genotype""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypeToDiseaseAssociation","biolink:GenotypeToDiseaseAssociation"]] = Field(default=["biolink:GenotypeToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class ModelToDiseaseAssociationMixin(ConfiguredBaseModel):
    """
    This mixin is used for any association class for which the subject (source node) plays the role of a 'model', in that it recapitulates some features of the disease in a way that is useful for studying the disease outside a patient carrying the disease
    """
    subject: str = Field(default=..., description="""The entity that serves as the model of the disease. This may be an organism, a strain of organism, a genotype or variant that exhibits similar features, or a gene that when mutated exhibits features of the disease""")
    predicate: str = Field(default=..., description="""The relationship to the disease""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class GeneAsAModelOfDiseaseAssociation(ModelToDiseaseAssociationMixin, GeneToDiseaseAssociation, EntityToDiseaseAssociationMixin):
    subject: str = Field(default=..., description="""A gene that has a role in modeling the disease. This may be a model organism ortholog of a known disease gene, or it may be a gene whose mutants recapitulate core features of the disease.""")
    predicate: str = Field(default=..., description="""The relationship to the disease""")
    object: str = Field(default=..., description="""disease""")
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneAsAModelOfDiseaseAssociation","biolink:GeneAsAModelOfDiseaseAssociation"]] = Field(default=["biolink:GeneAsAModelOfDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class VariantAsAModelOfDiseaseAssociation(ModelToDiseaseAssociationMixin, VariantToDiseaseAssociation, EntityToDiseaseAssociationMixin):
    subject: str = Field(default=..., description="""A variant that has a role in modeling the disease.""")
    predicate: str = Field(default=..., description="""The relationship to the disease""")
    object: str = Field(default=..., description="""disease""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/VariantAsAModelOfDiseaseAssociation","biolink:VariantAsAModelOfDiseaseAssociation"]] = Field(default=["biolink:VariantAsAModelOfDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class GenotypeAsAModelOfDiseaseAssociation(ModelToDiseaseAssociationMixin, GenotypeToDiseaseAssociation, EntityToDiseaseAssociationMixin):
    subject: str = Field(default=..., description="""A genotype that has a role in modeling the disease.""")
    predicate: str = Field(default=..., description="""The relationship to the disease""")
    object: str = Field(default=..., description="""disease""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenotypeAsAModelOfDiseaseAssociation","biolink:GenotypeAsAModelOfDiseaseAssociation"]] = Field(default=["biolink:GenotypeAsAModelOfDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class CellLineAsAModelOfDiseaseAssociation(ModelToDiseaseAssociationMixin, CellLineToDiseaseOrPhenotypicFeatureAssociation, EntityToDiseaseAssociationMixin):
    subject: str = Field(default=..., description="""A cell line derived from an organismal entity with a disease state that is used as a model of that disease.""")
    predicate: str = Field(default=..., description="""The relationship to the disease""")
    object: str = Field(default=..., description="""disease""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    subject_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    anatomical_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing an anatomical location where an relationship expressed in an association took place (can be a tissue, cell type, or sub-cellular location).""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/CellLineAsAModelOfDiseaseAssociation","biolink:CellLineAsAModelOfDiseaseAssociation"]] = Field(default=["biolink:CellLineAsAModelOfDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class OrganismalEntityAsAModelOfDiseaseAssociation(ModelToDiseaseAssociationMixin, EntityToDiseaseAssociationMixin, Association):
    subject: str = Field(default=..., description="""A organismal entity (strain, breed) with a predisposition to a disease, or bred/created specifically to model a disease.""")
    predicate: str = Field(default=..., description="""The relationship to the disease""")
    object: str = Field(default=..., description="""disease""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismalEntityAsAModelOfDiseaseAssociation","biolink:OrganismalEntityAsAModelOfDiseaseAssociation"]] = Field(default=["biolink:OrganismalEntityAsAModelOfDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    subject_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")


class OrganismToOrganismAssociation(Association):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""An association between two individual organisms.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismToOrganismAssociation","biolink:OrganismToOrganismAssociation"]] = Field(default=["biolink:OrganismToOrganismAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class TaxonToTaxonAssociation(Association):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""An association between individuals of different taxa.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/TaxonToTaxonAssociation","biolink:TaxonToTaxonAssociation"]] = Field(default=["biolink:TaxonToTaxonAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneHasVariantThatContributesToDiseaseAssociation(GeneToDiseaseAssociation):
    subject_form_or_variant_qualifier: Optional[ChemicalOrGeneOrGeneProductFormOrVariantEnum] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a specific type, variant, alternative version of this concept. The composed concept remains a subtype or instance of the core concept. For example, the qualifier ‘mutation’ combines with the core concept ‘Gene X’ to express the compose concept ‘a mutation of Gene X’.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    subject: str = Field(default=..., description="""A gene that has a role in modeling the disease. This may be a model organism ortholog of a known disease gene, or it may be a gene whose mutants recapitulate core features of the disease.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    subject_aspect_qualifier: Optional[GeneOrGeneProductOrChemicalEntityAspectEnum] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the subject of an association (aka: statement).""")
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    allelic_requirement: Optional[str] = Field(default=None, description="""The allele configuration of a particular gene or variant required for the expression of a disease or phenotype in a specific patient or instance.""")
    sex_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state whether the association is specific to a particular sex.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneHasVariantThatContributesToDiseaseAssociation","biolink:GeneHasVariantThatContributesToDiseaseAssociation"]] = Field(default=["biolink:GeneHasVariantThatContributesToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")
    has_count: Optional[int] = Field(default=None, description="""number of things with a particular property""")
    has_total: Optional[int] = Field(default=None, description="""total number of things in a particular reference set""")
    has_quotient: Optional[float] = Field(default=None)
    has_percentage: Optional[float] = Field(default=None, description="""equivalent to has quotient multiplied by 100""")
    subject_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the subject of an association (aka: statement).""")
    object_aspect_qualifier: Optional[str] = Field(default=None, description="""Composes with the core concept to describe new concepts of a different ontological type. e.g. a process in which the core concept participates, a function/activity/role held by the core concept, or a characteristic/quality that inheres in the core concept.  The purpose of the aspect slot is to indicate what aspect is being affected in an 'affects' association.  This qualifier specifies a change in the object of an association (aka: statement).""")
    qualified_predicate: Optional[str] = Field(default=None, description="""Predicate to be used in an association when subject and object qualifiers are present and the full reading of the statement requires a qualification to the predicate in use in order to refine or increase the specificity of the full statement reading.  This qualifier holds a relationship to be used instead of that expressed by the primary predicate, in a ‘full statement’ reading of the association, where qualifier-based semantics are included.  This is necessary only in cases where the primary predicate does not work in a full statement reading.""")
    disease_context_qualifier: Optional[str] = Field(default=None, description="""A context qualifier representing a disease or condition in which a relationship expressed in an association took place.""")
    frequency_qualifier: Optional[str] = Field(default=None, description="""a qualifier used in a phenotypic association to state how frequent the phenotype is observed in the subject""")

    @field_validator('allelic_requirement')
    def pattern_allelic_requirement(cls, v):
        pattern=re.compile(r"^HP:\d{7}$")
        if isinstance(v, list):
            for element in v:
                if isinstance(element, str) and not pattern.match(element):
                    err_msg = f"Invalid allelic_requirement format: {element}"
                    raise ValueError(err_msg)
        elif isinstance(v, str) and not pattern.match(v):
            err_msg = f"Invalid allelic_requirement format: {v}"
            raise ValueError(err_msg)
        return v


class GeneToExpressionSiteAssociation(Association):
    """
    An association between a gene and a gene expression site, possibly qualified by stage/timing info.
    """
    stage_qualifier: Optional[str] = Field(default=None, description="""stage at which the gene is expressed in the site""")
    quantifier_qualifier: Optional[str] = Field(default=None, description="""can be used to indicate magnitude, or also ranking""")
    object_specialization_qualifier: Optional[str] = Field(default=None, description="""A qualifier that composes with a core subject/object concept to define a more specific version of the subject concept, specifically using an ontology term that is not a subclass or descendant of the core concept and in the vast majority of cases, is of a different ontological namespace than the category or namespace of the subject identifier.""")
    subject: str = Field(default=..., description="""Gene or gene product positively within the specified anatomical entity (or subclass, i.e. cellular component) location.""")
    predicate: str = Field(default=..., description="""expression relationship""")
    object: str = Field(default=..., description="""location in which the gene is expressed""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToExpressionSiteAssociation","biolink:GeneToExpressionSiteAssociation"]] = Field(default=["biolink:GeneToExpressionSiteAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SequenceVariantModulatesTreatmentAssociation(Association):
    """
    An association between a sequence variant and a treatment or health intervention. The treatment object itself encompasses both the disease and the drug used.
    """
    subject: str = Field(default=..., description="""variant that modulates the treatment of some disease""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""treatment whose efficacy is modulated by the subject variant""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SequenceVariantModulatesTreatmentAssociation","biolink:SequenceVariantModulatesTreatmentAssociation"]] = Field(default=["biolink:SequenceVariantModulatesTreatmentAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class FunctionalAssociation(Association):
    """
    An association between a macromolecular machine mixin (gene, gene product or complex of gene products) and either a molecular activity, a biological process or a cellular location in which a function is executed.
    """
    subject: str = Field(default=..., description="""gene, product or macromolecular complex that has the function associated with the GO term""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""class describing the activity, process or localization of the gene product""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/FunctionalAssociation","biolink:FunctionalAssociation"]] = Field(default=["biolink:FunctionalAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MacromolecularMachineToEntityAssociationMixin(ConfiguredBaseModel):
    """
    an association which has a macromolecular machine mixin as a subject
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")


class MacromolecularMachineToMolecularActivityAssociation(MacromolecularMachineToEntityAssociationMixin, FunctionalAssociation):
    """
    A functional association between a macromolecular machine (gene, gene product or complex) and a molecular activity (as represented in the GO molecular function branch), where the entity carries out the activity, or contributes to its execution.
    """
    subject: str = Field(default=..., description="""gene, product or macromolecular complex that has the function associated with the GO term""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""class describing the activity, process or localization of the gene product""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MacromolecularMachineToMolecularActivityAssociation","biolink:MacromolecularMachineToMolecularActivityAssociation"]] = Field(default=["biolink:MacromolecularMachineToMolecularActivityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MacromolecularMachineToBiologicalProcessAssociation(MacromolecularMachineToEntityAssociationMixin, FunctionalAssociation):
    """
    A functional association between a macromolecular machine (gene, gene product or complex) and a biological process or pathway (as represented in the GO biological process branch), where the entity carries out some part of the process, regulates it, or acts upstream of it.
    """
    subject: str = Field(default=..., description="""gene, product or macromolecular complex that has the function associated with the GO term""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""class describing the activity, process or localization of the gene product""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MacromolecularMachineToBiologicalProcessAssociation","biolink:MacromolecularMachineToBiologicalProcessAssociation"]] = Field(default=["biolink:MacromolecularMachineToBiologicalProcessAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MacromolecularMachineToCellularComponentAssociation(MacromolecularMachineToEntityAssociationMixin, FunctionalAssociation):
    """
    A functional association between a macromolecular machine (gene, gene product or complex) and a cellular component (as represented in the GO cellular component branch), where the entity carries out its function in the cellular component.
    """
    subject: str = Field(default=..., description="""gene, product or macromolecular complex that has the function associated with the GO term""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""class describing the activity, process or localization of the gene product""")
    species_context_qualifier: Optional[str] = Field(default=None, description="""A statement qualifier representing a taxonomic category of species in which a relationship expressed in an association took place.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MacromolecularMachineToCellularComponentAssociation","biolink:MacromolecularMachineToCellularComponentAssociation"]] = Field(default=["biolink:MacromolecularMachineToCellularComponentAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MolecularActivityToChemicalEntityAssociation(Association):
    """
    Added in response to capturing relationship between microbiome activities as measured via measurements of blood analytes as collected via blood and stool samples
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MolecularActivityToChemicalEntityAssociation","biolink:MolecularActivityToChemicalEntityAssociation"]] = Field(default=["biolink:MolecularActivityToChemicalEntityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class MolecularActivityToMolecularActivityAssociation(Association):
    """
    Added in response to capturing relationship between microbiome activities as measured via measurements of blood analytes as collected via blood and stool samples
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/MolecularActivityToMolecularActivityAssociation","biolink:MolecularActivityToMolecularActivityAssociation"]] = Field(default=["biolink:MolecularActivityToMolecularActivityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneToGoTermAssociation(FunctionalAssociation):
    subject: str = Field(default=..., description="""gene, product or macromolecular complex that has the function associated with the GO term""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""class describing the activity, process or localization of the gene product""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToGoTermAssociation","biolink:GeneToGoTermAssociation"]] = Field(default=["biolink:GeneToGoTermAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EntityToDiseaseAssociation(Association):
    clinical_approval_status: Optional[ClinicalApprovalStatusEnum] = Field(default=None)
    max_research_phase: Optional[ResearchPhaseEnum] = Field(default=None)
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EntityToDiseaseAssociation","biolink:EntityToDiseaseAssociation"]] = Field(default=["biolink:EntityToDiseaseAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class EntityToPhenotypicFeatureAssociation(Association):
    clinical_approval_status: Optional[ClinicalApprovalStatusEnum] = Field(default=None)
    max_research_phase: Optional[ResearchPhaseEnum] = Field(default=None)
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/EntityToPhenotypicFeatureAssociation","biolink:EntityToPhenotypicFeatureAssociation"]] = Field(default=["biolink:EntityToPhenotypicFeatureAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SequenceAssociation(Association):
    """
    An association between a sequence feature and a nucleic acid entity it is localized to.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SequenceAssociation","biolink:SequenceAssociation"]] = Field(default=["biolink:SequenceAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GenomicSequenceLocalization(SequenceAssociation):
    """
    A relationship between a sequence feature and a nucleic acid entity it is localized to. The reference entity may be a chromosome, chromosome region or information entity such as a contig.
    """
    start_interbase_coordinate: Optional[int] = Field(default=None, description="""The position at which the subject nucleic acid entity starts on the chromosome or other entity to which it is located on. (ie: the start of the sequence being referenced is 0).""")
    end_interbase_coordinate: Optional[int] = Field(default=None, description="""The position at which the subject nucleic acid entity ends on the chromosome or other entity to which it is located on.""")
    genome_build: Optional[StrandEnum] = Field(default=None, description="""The version of the genome on which a feature is located. For example, GRCh38 for Homo sapiens.""")
    strand: Optional[StrandEnum] = Field(default=None, description="""The strand on which a feature is located. Has a value of '+' (sense strand or forward strand) or '-' (anti-sense strand or reverse strand).""")
    phase: Optional[PhaseEnum] = Field(default=None, description="""The phase for a coding sequence entity. For example, phase of a CDS as represented in a GFF3 with a value of 0, 1 or 2.""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GenomicSequenceLocalization","biolink:GenomicSequenceLocalization"]] = Field(default=["biolink:GenomicSequenceLocalization"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class SequenceFeatureRelationship(Association):
    """
    For example, a particular exon is part of a particular transcript or gene
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/SequenceFeatureRelationship","biolink:SequenceFeatureRelationship"]] = Field(default=["biolink:SequenceFeatureRelationship"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class TranscriptToGeneRelationship(SequenceFeatureRelationship):
    """
    A gene is a collection of transcripts
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/TranscriptToGeneRelationship","biolink:TranscriptToGeneRelationship"]] = Field(default=["biolink:TranscriptToGeneRelationship"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneToGeneProductRelationship(SequenceFeatureRelationship):
    """
    A gene is transcribed and potentially translated to a gene product
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneToGeneProductRelationship","biolink:GeneToGeneProductRelationship"]] = Field(default=["biolink:GeneToGeneProductRelationship"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ExonToTranscriptRelationship(SequenceFeatureRelationship):
    """
    A transcript is formed from multiple exons
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ExonToTranscriptRelationship","biolink:ExonToTranscriptRelationship"]] = Field(default=["biolink:ExonToTranscriptRelationship"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation(Association):
    """
    A regulatory relationship between two genes
    """
    object_direction_qualifier: Optional[DirectionQualifierEnum] = Field(default=None, description="""Composes with the core concept (+ aspect if provided) to describe a change in its direction or degree. This qualifier qualifies the object of an association (aka: statement).""")
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""the direction is always from regulator to regulated""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation","biolink:ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation"]] = Field(default=["biolink:ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class AnatomicalEntityToAnatomicalEntityAssociation(Association):
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/AnatomicalEntityToAnatomicalEntityAssociation","biolink:AnatomicalEntityToAnatomicalEntityAssociation"]] = Field(default=["biolink:AnatomicalEntityToAnatomicalEntityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class AnatomicalEntityToAnatomicalEntityPartOfAssociation(AnatomicalEntityToAnatomicalEntityAssociation):
    """
    A relationship between two anatomical entities where the relationship is mereological, i.e the two entities are related by parthood. This includes relationships between cellular components and cells, between cells and tissues, tissues and whole organisms
    """
    subject: str = Field(default=..., description="""the part""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the whole""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/AnatomicalEntityToAnatomicalEntityPartOfAssociation","biolink:AnatomicalEntityToAnatomicalEntityPartOfAssociation"]] = Field(default=["biolink:AnatomicalEntityToAnatomicalEntityPartOfAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class AnatomicalEntityToAnatomicalEntityOntogenicAssociation(AnatomicalEntityToAnatomicalEntityAssociation):
    """
    A relationship between two anatomical entities where the relationship is ontogenic, i.e. the two entities are related by development. A number of different relationship types can be used to specify the precise nature of the relationship.
    """
    subject: str = Field(default=..., description="""the structure at a later time""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the structure at an earlier time""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/AnatomicalEntityToAnatomicalEntityOntogenicAssociation","biolink:AnatomicalEntityToAnatomicalEntityOntogenicAssociation"]] = Field(default=["biolink:AnatomicalEntityToAnatomicalEntityOntogenicAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation(Association):
    """
    An association between a gene or gene product or gene family and an anatomical entity.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation","biolink:GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation"]] = Field(default=["biolink:GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class BiologicalProcessOrActivityToAnatomicalEntityAssociation(Association):
    """
    An association between a biological process or activity and an anatomical entity.
    """
    subject: str = Field(default=..., description="""connects an association to the subject of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/BiologicalProcessOrActivityToAnatomicalEntityAssociation","biolink:BiologicalProcessOrActivityToAnatomicalEntityAssociation"]] = Field(default=["biolink:BiologicalProcessOrActivityToAnatomicalEntityAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class OrganismTaxonToEntityAssociation(ConfiguredBaseModel):
    """
    An association between an organism taxon and another entity
    """
    subject: str = Field(default=..., description="""organism taxon that is the subject of the association""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")


class OrganismTaxonToOrganismTaxonAssociation(OrganismTaxonToEntityAssociation, Association):
    """
    A relationship between two organism taxon nodes
    """
    subject: str = Field(default=..., description="""organism taxon that is the subject of the association""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""connects an association to the object of the association. For example, in a gene-to-phenotype association, the gene is subject and phenotype is object.""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismTaxonToOrganismTaxonAssociation","biolink:OrganismTaxonToOrganismTaxonAssociation"]] = Field(default=["biolink:OrganismTaxonToOrganismTaxonAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class OrganismTaxonToOrganismTaxonSpecialization(OrganismTaxonToOrganismTaxonAssociation):
    """
    A child-parent relationship between two taxa. For example: Homo sapiens subclass_of Homo
    """
    subject: str = Field(default=..., description="""the more specific taxon""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the more general taxon""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismTaxonToOrganismTaxonSpecialization","biolink:OrganismTaxonToOrganismTaxonSpecialization"]] = Field(default=["biolink:OrganismTaxonToOrganismTaxonSpecialization"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class OrganismTaxonToOrganismTaxonInteraction(OrganismTaxonToOrganismTaxonAssociation):
    """
    An interaction relationship between two taxa. This may be a symbiotic relationship (encompassing mutualism and parasitism), or it may be non-symbiotic. Example: plague transmitted_by flea; cattle domesticated_by Homo sapiens; plague infects Homo sapiens
    """
    associated_environmental_context: Optional[str] = Field(default=None, description="""the environment in which the two taxa interact""")
    subject: str = Field(default=..., description="""the taxon that is the subject of the association""")
    predicate: str = Field(default=..., description="""A high-level grouping for the relationship type. AKA minimal predicate. This is analogous to category for nodes.""")
    object: str = Field(default=..., description="""the taxon that is the subject of the association""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismTaxonToOrganismTaxonInteraction","biolink:OrganismTaxonToOrganismTaxonInteraction"]] = Field(default=["biolink:OrganismTaxonToOrganismTaxonInteraction"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


class OrganismTaxonToEnvironmentAssociation(OrganismTaxonToEntityAssociation, Association):
    subject: str = Field(default=..., description="""the taxon that is the subject of the association""")
    predicate: str = Field(default=..., description="""predicate describing the relationship between the taxon and the environment""")
    object: str = Field(default=..., description="""the environment in which the organism occurs""")
    negated: Optional[bool] = Field(default=None, description="""if set to true, then the association is negated i.e. is not true""")
    qualifier: Optional[str] = Field(default=None, description="""grouping slot for all qualifiers on an edge.  useful for testing compliance with association classes""")
    qualifiers: Optional[list[str]] = Field(default=None, description="""connects an association to qualifiers that modify or qualify the meaning of that association""")
    publications: Optional[list[str]] = Field(default=None, description="""One or more publications that report the statement expressed in an Association, or provide information used as evidence supporting this statement.""")
    sources: Optional[list[RetrievalSource]] = Field(default=None, description="""A set of RetrievalSources, which traces where the statement expressed in an Association came from. For example, the provenance of a Gene-Chemical Edge might be traced through the Translator Resource that provided it (e.g. MolePro) to one or more intermediate aggregator resources (e.g. ChEMBL), and finally to the resource that originally created/curated it (e.g. ClinicalTrials.org).""")
    has_evidence: Optional[list[str]] = Field(default=None, description="""connects an association to an instance of supporting evidence""")
    knowledge_source: Optional[str] = Field(default=None, description="""An Information Resource from which the knowledge expressed in an Association was retrieved, directly or indirectly. This can be any resource through which the knowledge passed on its way to its currently serialized form. In practice, implementers should use one of the more specific subtypes of this generic property.""")
    primary_knowledge_source: Optional[str] = Field(default=None, description="""The most upstream source of the knowledge expressed in an Association that an implementer can identify.  Performing a rigorous analysis of upstream data providers is expected; every effort is made to catalog the most upstream source of data in this property.  Only one data source should be declared primary in any association.  \"aggregator knowledge source\" can be used to capture non-primary sources.""")
    aggregator_knowledge_source: Optional[list[str]] = Field(default=None, description="""An intermediate aggregator resource from which knowledge expressed in an Association was retrieved downstream of the original source, on its path to its current serialized form.""")
    knowledge_level: KnowledgeLevelEnum = Field(default=..., description="""Describes the level of knowledge expressed in a statement, based on the reasoning or analysis methods used to generate the statement, or the scope or specificity of what the statement expresses to be true.""")
    agent_type: AgentTypeEnum = Field(default=..., description="""Describes the high-level category of agent who originally generated a statement of knowledge or other type of information.""")
    timepoint: Optional[str] = Field(default=None, description="""a point in time""")
    original_subject: Optional[str] = Field(default=None, description="""used to hold the original subject of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_predicate: Optional[str] = Field(default=None, description="""used to hold the original relation/predicate that an external knowledge source uses before transformation to match the biolink-model specification.""")
    original_object: Optional[str] = Field(default=None, description="""used to hold the original object of a relation (or predicate) that an external knowledge source uses before transformation to match the biolink-model specification.""")
    subject_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated subject for example, a particular sequence variant of a gene""")
    object_feature_name: Optional[str] = Field(default=None, description="""Used to describe a subordinate feature of the associated object for example, a symptom diagnosis of a disease""")
    subject_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category: Optional[str] = Field(default=None, description="""Used to hold the biolink class/category of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_category_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object category closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_namespace: Optional[str] = Field(default=None, description="""Used to hold the subject namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_namespace: Optional[str] = Field(default=None, description="""Used to hold the object namespace of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    subject_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the subject label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    object_label_closure: Optional[list[str]] = Field(default=None, description="""Used to hold the object label closure of an association. This is a denormalized field used primarily in the SQL serialization of a knowledge graph via KGX.""")
    retrieval_source_ids: Optional[list[str]] = Field(default=None, description="""A list of retrieval sources that served as a source of knowledge expressed in an Edge, or a source of data used to generate this knowledge.""")
    p_value: Optional[float] = Field(default=None, description="""A quantitative confidence value that represents the probability of obtaining a result at least as extreme as that actually obtained, assuming that the actual value was the result of chance alone.""")
    adjusted_p_value: Optional[float] = Field(default=None, description="""The adjusted p-value is the probability of obtaining test results at least as extreme as the results actually observed, under the assumption that the null hypothesis is correct, adjusted for multiple comparisons. P is always italicized and capitalized. The actual P value* should be expressed (P=. 04) rather than expressing a statement of inequality (P<. 05), unless P<.""")
    has_supporting_studies: Optional[dict[str, Union[Study,ClinicalTrial]]] = Field(default=None, description="""Studies that produced information used as evidence to generate the knowledge expressed in an Association.""")
    update_date: Optional[date] = Field(default=None, description="""date on which an entity was updated. This can be applied to nodes or edges""")
    has_confidence_score: Optional[float] = Field(default=None, description="""connects an association to a quantitative (numeric) value that can be interpreted as an indicator of the degree of confidence that a piece of information is true, and accurately reflects the aspect of reality it is about.""")
    id: str = Field(default=..., description="""A unique identifier for an entity. Must be either a CURIE shorthand for a URI or a complete URI""")
    iri: Optional[str] = Field(default=None, description="""An IRI for an entity. This is determined by the id using expansion rules.""")
    category: list[Literal["https://w3id.org/biolink/vocab/OrganismTaxonToEnvironmentAssociation","biolink:OrganismTaxonToEnvironmentAssociation"]] = Field(default=["biolink:OrganismTaxonToEnvironmentAssociation"], description="""Name of the high level ontology class in which this entity is categorized. Corresponds to the label for the biolink entity type class. In a neo4j database this MAY correspond to the neo4j label tag. In an RDF database it should be a biolink model class URI. This field is multi-valued. It should include values for ancestors of the biolink class; for example, a protein such as Shh would have category values `biolink:Protein`, `biolink:GeneProduct`, `biolink:MolecularEntity`. In an RDF database, nodes will typically have an rdf:type triples. This can be to the most specific biolink class, or potentially to a class more specific than something in biolink. For example, a sequence feature `f` may have a rdf:type assertion to a SO class such as TF_binding_site, which is more specific than anything in biolink. Here we would have categories {biolink:GenomicEntity, biolink:MolecularEntity, biolink:NamedThing}""")
    type: Optional[list[str]] = Field(default=None, description="""rdf:type of biolink:Association should be fixed at rdf:Statement""")
    name: Optional[str] = Field(default=None, description="""A human-readable name for an attribute or entity.""")
    description: Optional[str] = Field(default=None, description="""a human-readable description of an entity""")
    has_attribute: Optional[list[str]] = Field(default=None, description="""connects any entity to an attribute""")
    deprecated: Optional[bool] = Field(default=None, description="""A boolean flag indicating that an entity is no longer considered current or valid.""")


# Model rebuild
# see https://pydantic-docs.helpmanual.io/usage/models/#rebuilding-a-model
KnowledgeGraph.model_rebuild()
Node.model_rebuild()
Edge.model_rebuild()
MappingCollection.model_rebuild()
PredicateMapping.model_rebuild()
OntologyClass.model_rebuild()
Annotation.model_rebuild()
QuantityValue.model_rebuild()
RelationshipQuantifier.model_rebuild()
SensitivityQuantifier.model_rebuild()
SpecificityQuantifier.model_rebuild()
PathognomonicityQuantifier.model_rebuild()
FrequencyQuantifier.model_rebuild()
ChemicalOrDrugOrTreatment.model_rebuild()
Entity.model_rebuild()
NamedThing.model_rebuild()
Attribute.model_rebuild()
ChemicalRole.model_rebuild()
BiologicalSex.model_rebuild()
PhenotypicSex.model_rebuild()
GenotypicSex.model_rebuild()
SeverityValue.model_rebuild()
RelationshipType.model_rebuild()
TaxonomicRank.model_rebuild()
OrganismTaxon.model_rebuild()
Event.model_rebuild()
AdministrativeEntity.model_rebuild()
Agent.model_rebuild()
InformationContentEntity.model_rebuild()
StudyResult.model_rebuild()
ConceptCountAnalysisResult.model_rebuild()
ObservedExpectedFrequencyAnalysisResult.model_rebuild()
RelativeFrequencyAnalysisResult.model_rebuild()
ChiSquaredAnalysisResult.model_rebuild()
LogOddsAnalysisResult.model_rebuild()
TextMiningStudyResult.model_rebuild()
IceesStudyResult.model_rebuild()
StudyVariable.model_rebuild()
CommonDataElement.model_rebuild()
Dataset.model_rebuild()
DatasetDistribution.model_rebuild()
DatasetVersion.model_rebuild()
DatasetSummary.model_rebuild()
ConfidenceLevel.model_rebuild()
EvidenceType.model_rebuild()
Publication.model_rebuild()
Book.model_rebuild()
BookChapter.model_rebuild()
Serial.model_rebuild()
Article.model_rebuild()
JournalArticle.model_rebuild()
Patent.model_rebuild()
WebPage.model_rebuild()
PreprintPublication.model_rebuild()
DrugLabel.model_rebuild()
RetrievalSource.model_rebuild()
PhysicalEssenceOrOccurrent.model_rebuild()
PhysicalEssence.model_rebuild()
PhysicalEntity.model_rebuild()
Occurrent.model_rebuild()
ActivityAndBehavior.model_rebuild()
Activity.model_rebuild()
Study.model_rebuild()
Procedure.model_rebuild()
Phenomenon.model_rebuild()
Device.model_rebuild()
DiagnosticAid.model_rebuild()
SubjectOfInvestigation.model_rebuild()
MaterialSample.model_rebuild()
PlanetaryEntity.model_rebuild()
EnvironmentalProcess.model_rebuild()
EnvironmentalFeature.model_rebuild()
GeographicLocation.model_rebuild()
GeographicLocationAtTime.model_rebuild()
ThingWithTaxon.model_rebuild()
BiologicalEntity.model_rebuild()
GenomicEntity.model_rebuild()
EpigenomicEntity.model_rebuild()
BiologicalProcessOrActivity.model_rebuild()
MolecularActivity.model_rebuild()
BiologicalProcess.model_rebuild()
Pathway.model_rebuild()
PhysiologicalProcess.model_rebuild()
Behavior.model_rebuild()
OrganismAttribute.model_rebuild()
PhenotypicQuality.model_rebuild()
GeneticInheritance.model_rebuild()
OrganismalEntity.model_rebuild()
Bacterium.model_rebuild()
Virus.model_rebuild()
CellularOrganism.model_rebuild()
Mammal.model_rebuild()
Human.model_rebuild()
Plant.model_rebuild()
Invertebrate.model_rebuild()
Vertebrate.model_rebuild()
Fungus.model_rebuild()
LifeStage.model_rebuild()
IndividualOrganism.model_rebuild()
PopulationOfIndividualOrganisms.model_rebuild()
StudyPopulation.model_rebuild()
DiseaseOrPhenotypicFeature.model_rebuild()
Disease.model_rebuild()
PhenotypicFeature.model_rebuild()
BehavioralFeature.model_rebuild()
AnatomicalEntity.model_rebuild()
CellularComponent.model_rebuild()
Cell.model_rebuild()
CellLine.model_rebuild()
GrossAnatomicalStructure.model_rebuild()
ChemicalEntityOrGeneOrGeneProduct.model_rebuild()
RegulatoryRegion.model_rebuild()
AccessibleDnaRegion.model_rebuild()
TranscriptionFactorBindingSite.model_rebuild()
ChemicalEntityOrProteinOrPolypeptide.model_rebuild()
ChemicalEntity.model_rebuild()
MolecularEntity.model_rebuild()
SmallMolecule.model_rebuild()
ChemicalMixture.model_rebuild()
NucleicAcidEntity.model_rebuild()
MolecularMixture.model_rebuild()
ComplexMolecularMixture.model_rebuild()
ProcessedMaterial.model_rebuild()
Drug.model_rebuild()
EnvironmentalFoodContaminant.model_rebuild()
FoodAdditive.model_rebuild()
Food.model_rebuild()
MacromolecularMachineMixin.model_rebuild()
GeneOrGeneProduct.model_rebuild()
GeneOrGeneProductOrGeneFamily.model_rebuild()
Gene.model_rebuild()
GeneProductMixin.model_rebuild()
GeneProductIsoformMixin.model_rebuild()
MacromolecularComplex.model_rebuild()
NucleosomeModification.model_rebuild()
Genome.model_rebuild()
Exon.model_rebuild()
Transcript.model_rebuild()
CodingSequence.model_rebuild()
Polypeptide.model_rebuild()
Protein.model_rebuild()
ProteinIsoform.model_rebuild()
PosttranslationalModification.model_rebuild()
NucleicAcidSequenceMotif.model_rebuild()
RNAProduct.model_rebuild()
RNAProductIsoform.model_rebuild()
NoncodingRNAProduct.model_rebuild()
MicroRNA.model_rebuild()
SiRNA.model_rebuild()
GeneGroupingMixin.model_rebuild()
ProteinDomain.model_rebuild()
ProteinFamily.model_rebuild()
GeneFamily.model_rebuild()
Zygosity.model_rebuild()
Genotype.model_rebuild()
Haplotype.model_rebuild()
SequenceVariant.model_rebuild()
Snv.model_rebuild()
ReagentTargetedGene.model_rebuild()
ClinicalAttribute.model_rebuild()
ClinicalMeasurement.model_rebuild()
ClinicalModifier.model_rebuild()
ClinicalCourse.model_rebuild()
Onset.model_rebuild()
ClinicalEntity.model_rebuild()
ClinicalTrial.model_rebuild()
ClinicalIntervention.model_rebuild()
ClinicalFinding.model_rebuild()
Hospitalization.model_rebuild()
SocioeconomicAttribute.model_rebuild()
Case.model_rebuild()
Cohort.model_rebuild()
ExposureEvent.model_rebuild()
GenomicBackgroundExposure.model_rebuild()
PathologicalEntityMixin.model_rebuild()
PathologicalProcess.model_rebuild()
PathologicalProcessExposure.model_rebuild()
PathologicalAnatomicalStructure.model_rebuild()
PathologicalAnatomicalExposure.model_rebuild()
DiseaseOrPhenotypicFeatureExposure.model_rebuild()
ChemicalExposure.model_rebuild()
ComplexChemicalExposure.model_rebuild()
DrugExposure.model_rebuild()
DrugToGeneInteractionExposure.model_rebuild()
Treatment.model_rebuild()
BioticExposure.model_rebuild()
EnvironmentalExposure.model_rebuild()
GeographicExposure.model_rebuild()
BehavioralExposure.model_rebuild()
SocioeconomicExposure.model_rebuild()
Outcome.model_rebuild()
PathologicalProcessOutcome.model_rebuild()
PathologicalAnatomicalOutcome.model_rebuild()
DiseaseOrPhenotypicFeatureOutcome.model_rebuild()
BehavioralOutcome.model_rebuild()
HospitalizationOutcome.model_rebuild()
MortalityOutcome.model_rebuild()
EpidemiologicalOutcome.model_rebuild()
SocioeconomicOutcome.model_rebuild()
Association.model_rebuild()
DiseaseAssociatedWithResponseToChemicalEntityAssociation.model_rebuild()
ChemicalEntityAssessesNamedThingAssociation.model_rebuild()
ContributorAssociation.model_rebuild()
GenotypeToGenotypePartAssociation.model_rebuild()
GenotypeToGeneAssociation.model_rebuild()
GenotypeToVariantAssociation.model_rebuild()
GeneToGeneAssociation.model_rebuild()
GeneToGeneHomologyAssociation.model_rebuild()
GeneToGeneFamilyAssociation.model_rebuild()
GeneFamilyToGeneOrGeneProductOrGeneFamilyAssociation.model_rebuild()
GeneOrGeneProductOrGeneFamilyToBiologicalProcessOrActivityAssociation.model_rebuild()
BiologicalProcessOrActivityToGeneOrGeneProductOrGeneFamilyAssociation.model_rebuild()
BiologicalProcessOrActivityToBiologicalProcessOrActivityAssociation.model_rebuild()
GeneExpressionMixin.model_rebuild()
GeneToGeneCoexpressionAssociation.model_rebuild()
PairwiseGeneToGeneInteraction.model_rebuild()
PairwiseMolecularInteraction.model_rebuild()
CellLineToEntityAssociationMixin.model_rebuild()
ChemicalEntityToEntityAssociationMixin.model_rebuild()
DrugToEntityAssociationMixin.model_rebuild()
ChemicalToEntityAssociationMixin.model_rebuild()
CaseToEntityAssociationMixin.model_rebuild()
ChemicalToChemicalAssociation.model_rebuild()
ReactionToParticipantAssociation.model_rebuild()
ReactionToCatalystAssociation.model_rebuild()
ChemicalToChemicalDerivationAssociation.model_rebuild()
MolecularActivityToPathwayAssociation.model_rebuild()
ChemicalToPathwayAssociation.model_rebuild()
NamedThingAssociatedWithLikelihoodOfNamedThingAssociation.model_rebuild()
ChemicalGeneInteractionAssociation.model_rebuild()
GeneRegulatesGeneAssociation.model_rebuild()
ProcessRegulatesProcessAssociation.model_rebuild()
ChemicalAffectsBiologicalEntityAssociation.model_rebuild()
ChemicalAffectsGeneAssociation.model_rebuild()
GeneAffectsChemicalAssociation.model_rebuild()
DrugToGeneAssociation.model_rebuild()
MaterialSampleToEntityAssociationMixin.model_rebuild()
MaterialSampleDerivationAssociation.model_rebuild()
DiseaseToEntityAssociationMixin.model_rebuild()
EntityToExposureEventAssociationMixin.model_rebuild()
DiseaseToExposureEventAssociation.model_rebuild()
EntityToOutcomeAssociationMixin.model_rebuild()
ExposureEventToOutcomeAssociation.model_rebuild()
FrequencyQualifierMixin.model_rebuild()
EntityToFeatureOrDiseaseQualifiersMixin.model_rebuild()
EntityToFeatureOrVariantQualifiersMixin.model_rebuild()
EntityToFeatureOrGeneQualifiersMixin.model_rebuild()
FeatureOrDiseaseQualifiersToEntityMixin.model_rebuild()
EntityToPhenotypicFeatureAssociationMixin.model_rebuild()
PhenotypicFeatureToEntityAssociationMixin.model_rebuild()
PhenotypicFeatureToPhenotypicFeatureAssociation.model_rebuild()
InformationContentEntityToNamedThingAssociation.model_rebuild()
EntityToDiseaseAssociationMixin.model_rebuild()
DiseaseOrPhenotypicFeatureToEntityAssociationMixin.model_rebuild()
DiseaseOrPhenotypicFeatureToLocationAssociation.model_rebuild()
DiseaseOrPhenotypicFeatureToGeneticInheritanceAssociation.model_rebuild()
EntityToDiseaseOrPhenotypicFeatureAssociationMixin.model_rebuild()
CellLineToDiseaseOrPhenotypicFeatureAssociation.model_rebuild()
ChemicalToDiseaseOrPhenotypicFeatureAssociation.model_rebuild()
ChemicalOrDrugOrTreatmentToDiseaseOrPhenotypicFeatureAssociation.model_rebuild()
ChemicalOrDrugOrTreatmentSideEffectDiseaseOrPhenotypicFeatureAssociation.model_rebuild()
MaterialSampleToDiseaseOrPhenotypicFeatureAssociation.model_rebuild()
GenotypeToEntityAssociationMixin.model_rebuild()
GenotypeToPhenotypicFeatureAssociation.model_rebuild()
ExposureEventToPhenotypicFeatureAssociation.model_rebuild()
DiseaseToPhenotypicFeatureAssociation.model_rebuild()
CaseToPhenotypicFeatureAssociation.model_rebuild()
CaseToDiseaseAssociation.model_rebuild()
CaseToVariantAssociation.model_rebuild()
CaseToGeneAssociation.model_rebuild()
BehaviorToBehavioralFeatureAssociation.model_rebuild()
GeneToEntityAssociationMixin.model_rebuild()
GeneToPathwayAssociation.model_rebuild()
VariantToEntityAssociationMixin.model_rebuild()
GeneToDiseaseOrPhenotypicFeatureAssociation.model_rebuild()
GeneToPhenotypicFeatureAssociation.model_rebuild()
GeneToDiseaseAssociation.model_rebuild()
CausalGeneToDiseaseAssociation.model_rebuild()
CorrelatedGeneToDiseaseAssociation.model_rebuild()
DruggableGeneToDiseaseAssociation.model_rebuild()
PhenotypicFeatureToDiseaseAssociation.model_rebuild()
VariantToGeneAssociation.model_rebuild()
VariantToGeneExpressionAssociation.model_rebuild()
VariantToPopulationAssociation.model_rebuild()
PopulationToPopulationAssociation.model_rebuild()
VariantToPhenotypicFeatureAssociation.model_rebuild()
VariantToDiseaseAssociation.model_rebuild()
GenotypeToDiseaseAssociation.model_rebuild()
ModelToDiseaseAssociationMixin.model_rebuild()
GeneAsAModelOfDiseaseAssociation.model_rebuild()
VariantAsAModelOfDiseaseAssociation.model_rebuild()
GenotypeAsAModelOfDiseaseAssociation.model_rebuild()
CellLineAsAModelOfDiseaseAssociation.model_rebuild()
OrganismalEntityAsAModelOfDiseaseAssociation.model_rebuild()
OrganismToOrganismAssociation.model_rebuild()
TaxonToTaxonAssociation.model_rebuild()
GeneHasVariantThatContributesToDiseaseAssociation.model_rebuild()
GeneToExpressionSiteAssociation.model_rebuild()
SequenceVariantModulatesTreatmentAssociation.model_rebuild()
FunctionalAssociation.model_rebuild()
MacromolecularMachineToEntityAssociationMixin.model_rebuild()
MacromolecularMachineToMolecularActivityAssociation.model_rebuild()
MacromolecularMachineToBiologicalProcessAssociation.model_rebuild()
MacromolecularMachineToCellularComponentAssociation.model_rebuild()
MolecularActivityToChemicalEntityAssociation.model_rebuild()
MolecularActivityToMolecularActivityAssociation.model_rebuild()
GeneToGoTermAssociation.model_rebuild()
EntityToDiseaseAssociation.model_rebuild()
EntityToPhenotypicFeatureAssociation.model_rebuild()
SequenceAssociation.model_rebuild()
GenomicSequenceLocalization.model_rebuild()
SequenceFeatureRelationship.model_rebuild()
TranscriptToGeneRelationship.model_rebuild()
GeneToGeneProductRelationship.model_rebuild()
ExonToTranscriptRelationship.model_rebuild()
ChemicalEntityOrGeneOrGeneProductRegulatesGeneAssociation.model_rebuild()
AnatomicalEntityToAnatomicalEntityAssociation.model_rebuild()
AnatomicalEntityToAnatomicalEntityPartOfAssociation.model_rebuild()
AnatomicalEntityToAnatomicalEntityOntogenicAssociation.model_rebuild()
GeneOrGeneProductOrGeneFamilyToAnatomicalEntityAssociation.model_rebuild()
BiologicalProcessOrActivityToAnatomicalEntityAssociation.model_rebuild()
OrganismTaxonToEntityAssociation.model_rebuild()
OrganismTaxonToOrganismTaxonAssociation.model_rebuild()
OrganismTaxonToOrganismTaxonSpecialization.model_rebuild()
OrganismTaxonToOrganismTaxonInteraction.model_rebuild()
OrganismTaxonToEnvironmentAssociation.model_rebuild()

